C#讀寫Excel文件
近日遇到這樣的一個程序需求:把sql server2005 數據庫的數據表導入到excel文件中,整理出來和大家一起分析討論。
完成這個功能需要的幾個集合和對象:Application、Workbooks、Workbook、Worksheets還有Worksheet和Range。Application創建Excel應用,Workbooks打開Excel文檔,Workbook獲得Excel文檔工作薄,Worksheets操作工作表集合,Worksheet獲得單個工作表。.net支持用C#操作操作這些對象。
關於Excel編程的其他細節請參閱Excel VBA幫助。
1、 添加應用excel.dll和office.dll (常用的2種方法)
A 、添加引Microsoft.Excel.x.0.Object.Library,Microsoft.Office.x.0.Object.Library
引用的Office組建版本是個敏感問題,不同版本之間有細微差別,需要分別處理。
建議安裝正版OFFICE,而且版本在11.0以上(Office2003以上)。使用這種方式時在程序裏使用的命名空間是:using Microsoft.Office.Interop.Excel;using Microsoft.Office.Core;
B、添加引用Excel.dll,office.dll。注意:注意在MS office 2003以下的版本中,可能找不到Excel.dll,但是要在Visual C#中使用非受管代碼的COM組件,就必須把它們轉換成受管代碼的類庫。所以在用Visual C#調用Excel表格之前,必須完成從COM組件的非受管代碼到受管代碼的類庫的轉換。具體方法如下: tlbimp /out:excel.dll "C:/Program Files/Microsoft Office/OFFICE11/EXCEL.EXE" 這樣就得到了execl.dll和office.dll了
使用這種方式時在程序裏使用的命名空間是:using Excel;
我在示例程序中使用第二種。使用兩種引用後,語言的實現上略有不同。
2、 將數據表中的數據導出到excel文件中。
A、獲取要導出的數據表數據。這個不屬於我們今天的話題,我們暫且不去關注。
B、新建一個excel文件。
首先建立一個Execl應用,然後建立Workbooks,Workbook,Worksheets,Worksheet實例。示例代碼如下:
1 System.Reflection.Missing miss = System.Reflection.Missing.Value;
2 Excel.ApplicationClass m_Excel = new Excel.ApplicationClass();
3 m_Excel.Visible = false;
4 Excel.Workbooks m_Books = (Excel.Workbooks)m_Excel.Workbooks;
5 Excel.Workbook m_Book = (Excel.Workbook)(m_Books.Add(miss));
6 Excel.Worksheet m_Sheet = (Excel.Worksheet)m_Book.ActiveSheet;
7 Excel.Range ER = null;
其中Excel.Range 代表某一單元格、某一行、某一列、某一選定區域(該選定區域可包含一個或若干連續單元格區域)或者某一三維區域。
C、根據表結構建立excel模板。
建立模板的過程就是操作execl的過程。
假設我們要導出的數據表有兩列分別是編號,姓名。exel模板需要有列標題。
(1)我們要在工作簿的sheet1的第一行第一列和第二列寫入編號和姓名。示例代碼如下:
16 ER = m_Sheet.get_Range((object)"A1", System.Reflection.Missing.Value);
17 ER.Value2 = "編號";
18 ER = m_Sheet.get_Range((object)"B1", System.Reflection.Missing.Value);
19 ER.Value2 = "姓名";
其中 get_Range 方法中以 A1 樣式的記號引用單元格和單元格區域。
通過value2設置單元格的屬性。
(2) 設置單元格的格式。示例程序如下:
range3.Borders.Color = Color.FromArgb(123, 231, 32).ToArgb();
20 ER.Font.Color = Color.Red.ToArgb();
21 ER.Font.Name = "Arial";
22 ER.Font.Size = 90;
23 ER.Columns.HorizontalAlignment = Excel.Constants.xlCenter;
24 ER.VerticalAlignment = Excel.Constants.xlCenter;
25 ER.Interior.Color = Color.FromArgb(192,192,192).ToArgb();
26 ER.Columns.AutoFit();
D、寫入數據,保存。
利用循環將DataTable中的數據寫到excel文件中。
32 m_Book.SaveAs(SavePath, miss, miss, miss, miss, miss, Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss, miss);
E、關閉資源。
33 m_Book.Close(false, miss, miss);
34 m_Books.Close();
35 m_Excel.Quit();
36
37 System.Runtime.InteropServices.Marshal.ReleaseComObject(ER);
38 System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Sheet);
39 System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Book);
40 System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Books);
41 System.Runtime.InteropServices.Marshal.ReleaseComObject(m_Excel);
42 GC.Collect();
當然這是一個很簡單的例子,許多問題還需要各位去研究。