最近有些項目在做集成,和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來做客戶端。這也是個很不錯的方法。
新聞熱點
疑難解答