国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Excel集成種種

2019-11-17 02:55:19
字體:
來源:轉載
供稿:網友

Excel集成種種

最近有些項目在做集成,和Excel之類的。所遇到的問題如下:

Win下如何操作

如何處理Excel進程

如何制作AddIn

如何在Web中應用

其他..

//

Win下的應用

Excel.application_excelApp =newExcel.Application();

Excel._WorkbookreportWB =null;

Excel._WorksheetreportWS =null;

try

{ reportWB = (Excel._Workbook)Schedule.ExcelApp.Workbooks._Open(fileReport, 0,false, 5,"","",true, Excel.XlPlatform.xlWindows,"/t",false,false, 0,true);

reportWS = (Excel._Worksheet)reportWB.Worksheets["Sheet1"];

…………

………

………

reportWB.Save();

}

Marshal.ReleaseComObject(reportWB);

Marshal.ReleaseComObject(reportWS);

reportWB =null;

reportWS =null;

ExcelApp.Workbooks.Close();

ExcelApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp); GC.Collect();

只是這個Excel進程關閉起來比較麻煩,另作論述。

關于簡單的操作

賦值:

reportWS.get_Range("D3","D3").Value2 =”xxx”;

插入行列:

(reportWS.Rows[beginRow,Missing.Value]asExcel.Range).Insert(Excel.XlDirection.xlDown,Missing.Value);

復制行列

reportWS.get_Range("A3","I4").Copy(Missing.Value);

粘貼行列:

reportWS.get_Range("A4""I5").PasteSpecial(Excel.XlPasteType.xlPasteAll, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone,Missing.Value,Missing.Value);

公式:

reportWS.get_Range("D3","D3").Value2 =”=sum(D1:D2)”;

也有其他高手提供的操作Excel的類庫,但是有時候需要自己做比較精細的控制,所以一般都是自己去做這些操作。

注意:

1:復制的時候可以附帶上單元格的格式

2:公式的循環引用設置。不然的話就會有很煩人的提示。

關于安裝:

1:需要安裝一個XP下的接口oxpPIA。可到微軟網站下載

2:解壓縮oxpPIA,注冊時,需要一個程序gacutil.exe

關于關閉Excel進程的問題

在Win/Web下,都可以生成一個Excel的Application對象。但是這個對象在關閉時可能會遇到問題。主要是,即使執行了釋放對象的操作,也很難把這個實例關掉。每次去TaskMan里面看看,還都在內存里面。

解決方法

1:只用一個全局的Application對象。關不掉,就不關了。所有的地方都用這個App來打開新的Worbook,這樣,只要最后關掉這些Workbook,Worksheet就可以了。只有一個實例也不會占用很多的資源。

2:徹底關掉這個進程

PRocess[] excelPro;

excelPro =Process.GetProcessesByName("Excel");

foreach(ProcessmyProcessinexcelPro)

{

myProcess.Kill();

}

有點暴力,但是管用。

制作Add-In

建立項目:

在vs.studio里面有模版,建立一個AddIn比較簡單。

剛開始的時候,我用的Express版,就只能手工寫這些代碼了。這個Connector也就是繼承自Extensibility.IDTExtensibility2的一個實現而已。

其實關鍵就在那一個Connector上。還有就是如何注冊這個控件。原來在VB里面開發完之后,Excel還識別他是一個Dcom,但是后來用C#開發的居然無法識別。其怪也哉。最后直接通過寫注冊表實現。

調試:

調試在vs.studio里面也不是問題,只要設置項目debug啟動參數就可以:項目/屬性/Debug/Start Action/Start external program/選擇Excel.exe的位置就可以

Web下的應用

Web下邊寫Excel,除去了用上述Win下的操作之外,也還有其他方式來實現,那就是直接寫Response輸出,進而演化出來寫Html格式的Excel數據。

1:直接輸出到Response。這個方法,就是直接生成一個Html頁面,然后把該頁面的type修改一下,變成application/ms-excel,這樣,客戶端的IE會把這個html頁面在Excel中打開。具體可以看http://m.survivalescaperooms.com/caizinet/

用這個方法輸出的話,可以直接把頁面上所有內容都輸出到Excel。包括各類格式和數據。

但是,也有點小問題:有時候會把界面上所有的東西都在Excel中里面顯示。

2:直接輸出到.xls文件,讓客戶下在這個文件。

這次輸出的.xls文件,也是用html來實現,那就是直接把html格式的數據保存成xls文件,這樣的話,用戶就可以直接下在這個文件了。

輸出的數據可以直接是<Table>:

a:) strData=”<Table>………….. “

b:) string file ,File.Write(strData)

c:) Response.Redirect(file);

這個實現還有個有意思的地方,那就是可以直接使用公式。<table><td>=Sum(A1:A3)</td></table>

更多:使用宏,而不是IE來做客戶端

有朋友正在開發一套程序,就是因為所處理的數據過大,導致IE加載后占用內存近500M的情況。后來他使用了宏處理,直接使用Excel來做客戶端。這也是個很不錯的方法。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 尼玛县| 旬邑县| 凤冈县| 裕民县| 泸定县| 富川| 通州市| 依安县| 巨野县| 利津县| 北票市| 阳高县| 苗栗县| 理塘县| 漳浦县| 玛多县| 孟州市| 连云港市| 双城市| 唐河县| 科技| 南昌市| 湄潭县| 壤塘县| 巴里| 丹巴县| 任丘市| 纳雍县| 墨玉县| 苍南县| 新田县| 象州县| 汉阴县| 平谷区| 扎鲁特旗| 东辽县| 紫阳县| 通化市| 江安县| 邳州市| 扶风县|