2017/12/13

【C#】Excel讀寫

首先,要關聯Microsoft.Office.Interop相關的檔案 必要的命名空間

using Microsoft.Office.Interop.Excel;
操作介面 EXCEL執行緒,一般來說不管開幾個檔案都只需要一個程序,要記得釋放
Application App;           //定義   
App = new Application();   //宣告實體(開啟程式)
App.Quit();                //關閉
活頁簿
Workbook ExcelBook;        //定義

//開啟舊檔
ExcelBook = App.Workbooks.Open(filenameOrFullpath , 0, 
                               true, 
                               5, "", "", true, 
                               Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, 
                               "", true, false, 0, true, false, false);
//變數說明:其中除了第一個"檔案路徑"之外, 一般只要注意第三個變數"是否唯獨"就好了

ExcelBook.Save();          //存檔(唯獨不適用)
ExcelBook.Close(false,"",false);         //關閉
最後是檔案中的工作表及儲存格,這兩個型態可視為指標因此不需要釋放
Worksheet ExcelWorkSheet; //工作表
Range ExcelRange;  //儲存格(範圍)
透過檔案介面指向一個分頁
ExcelWorkSheet = ExcelBook.Worksheets[分頁];
分頁可以是完整分頁名稱(字串),或是直接指定分頁的index(int) 透過分頁介面取得儲存格範圍
ExcelRange = ExcelWorkSheet.get_Range("A1","A1");
儲存格操作都是以範圍進行,即使只有一個格子也是範圍型態 將目前範圍延伸至整行(方便搜尋)
ExcelRange = ExcelRange.EntireRow;
同樣地也可以設定整列EntireColumn 從指定範圍搜尋特定字串
try{ //建議一定要用try catch,找不到的時候才不會跳出無法處理的錯誤
 int matchIndex = (int)App.WorksheetFunction.Match( 搜尋的字串 , 範圍物件 , 0);
 //只要搜尋失敗,這後面的程式碼都不會執行而跳到catch
}catch{
 //在這裡針對錯誤的結果作處理
}
找出最後一行的位置
int lastRow = ExcelWorkSheet.UsedRange.Rows.Count;
這是最簡單的方法,但是要注意這個方法會包含被調整過但是沒資料的空白行 將指定的範圍(儲存格)文字提取
ExcelRange.Text.ToString();

沒有留言: