2007年3月10日 星期六

[C#] Excel 的處理

最近幫華哥寫一隻轉卡號的程式,要讀 Excel 檔案來轉碼.....

很久沒寫了,所以找了些資料來看....

雖然只是一支簡單的程式,不過還是把部分重點記起來,以後有機會要用還可以用到....

1、讀取 Excel 檔案:

由於 .NET Framework 2.0 中並沒有支援直接讀寫 Excel 的 DLL,因此使用者必須自行安裝相關工具,除了 Office 2003(這次所使用的環境安裝的是 Office 2003) 之外,還必須安裝「Office Primary Interop Assemblies」。

安裝完成後,系統中會多出許多處理 Office 檔案相關的 DLL,若想瞭解細節,可參考此網頁

以下有一段範例程式提供參考:
//要讀取Excel檔必須使用此Namespace
using Microsoft.Office.Interop.Excel;

//產生Excel Application物件
Microsoft.Office.Interop.Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();

//宣告Workbook
Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;

//宣告Worksheet
Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;


//使用Excel Application的Workbooks.Open()的方法產生Workbook物件
ObjWorkBook = ObjExcel.Workbooks.Open(@"c:\\abc.xls", Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);

//透過Workbook物件取得Worksheet物件
ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet) ObjWorkBook.Sheets[1];

//設定第一列第三欄中的資料為「123」
((Range)ObjWorkSheet.Cells[1, 3]).Value2 = "123";

//儲存變更
ObjWorkBook.Save();

//刪除 Excel process
foreach(System.Diagnostics.Process excelProc in System.Diagnostics.Process.GetProcessesByName("EXCEL"))
excelProc.Kill();
看完上面的程式碼,大致應該可以瞭解 Excel 相關物件(Application、Workbook、Worksheet)之間的關係,其他的部分就靠程式設計師的創意與巧思了!


2、字串格式的轉換:

當然,不僅是讀取 Excel 的部分值得記錄,還有字串格式的轉換也值得記錄,而這一次有用到的是「String.Format」方法,在 google 搜尋中,發現一篇寫得相當詳細的文章,名稱為「String Formatting in C#」,另外還可參考官方資料(String.Format Method)

而在這一次的程式開發中,我有用到的部分如以下的範例程式:
//輸出 => 00123
String.Format("{0:D5}", "123")

//輸出 => 01234
String.Format("{0:D5}", "1234")


3、進位轉換

這部份則是數字上的進位轉換,在這個程式中有使用到 16 進位轉換為 10 進位,所使用的方法是「System.Convert」類別中的 Convert.ToInt32() 進行進位的轉換,以下為範例程式碼:
//輸出 => 44003
Convert.ToInt32("ABE3", 16) //來源資料為16進位


參考資料: