c#讀寫Excel文件

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();

當然這是一個很簡單的例子,許多問題還需要各位去研究。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章