這兩天需要讀取Excel文件,網上找了找,發現NPOI用的是最多的,於是研究了一下。這里大概介紹一下。
首先,在NPOI中一個Excel文件對應了一個IWorkbook對象,Excel中的一個工作表對應了NPOI中的一個ISheet。
在Excel中有行的概念IRow,但是沒有列,取而代之的是單元格ICell。
下面簡單介紹一下NPOI讀取寫入Excel的方法,我這里用的是NPOI2.0版本的
http://pan.baidu.com/s/1qXJsWXm 這是下載地址。
也可以來這里http://npoi.codeplex.com/看NPOI的官方文檔。如果有用Java的同學,可以用poi來操作方法都是一樣的。
自offic2003之后,excel多了一種格式即xlsx格式,所以在引用NPOI時,需要把那幾個dll全部引用,如果只引用ICSharpCode.SharpZipLib.dll和NPOI.dll 則只能讀取xls格式的excel。
首先看一下如何向Excel 中寫入:
//HSSF可以讀取xls格式的Excel文件 IWorkbook workbook = new HSSFWorkbook(); //XSSF可以讀取xlsx格式的Excel文件 //IWorkbook workbook = new XSSFWorkbook(); //Excel文件至少要有一個工作表sheet ISheet sheet = workbook.CreateSheet("工作表"); //創建行 for (int i = 0; i < 10; i++) { IRow row = sheet.CreateRow(i); //i表示了創建行的索引,從0開始 //創建單元格 for (int j = 0; j < 5; j++) { ICell cell = row.CreateCell(j); //同時這個函數還有第二個重載,可以指定單元格存放數據的類型 cell.SetCellValue(i.ToString() + j.ToString()); } } //表格制作完成后,保存 //創建一個文件流對象 using (FileStream fs = File.Open("test.xls", FileMode.OpenOrCreate)) { workbook.Write(fs); //最后記得關閉對象 workbook.Close(); } }
然后我們還是用這個excel文件來讀取一下
//首先根據需要讀取的文件創建一個文件流對象 using (FileStream fs = File.OpenRead("test.xls")) { IWorkbook workbook = null; //這里需要根據文件名格式判斷一下 //HSSF只能讀取xls的 //XSSF只能讀取xlsx格式的 if (Path.GetExtension(fs.Name) == ".xls") { workbook = new HSSFWorkbook(fs); } else if (Path.GetExtension(fs.Name) == ".xlsx") { workbook = new XSSFWorkbook(fs); } //因為Excel表中可能不止一個工作表,這里為了演示,我們遍歷所有工作表 for (int i = 0; i < workbook.NumberOfSheets; i++) { //得到當前sheet ISheet sheet = workbook.GetSheetAt(i); //也可以通過GetSheet(name)得到 //遍歷表中所有的行 //注意這里加1,這里得到的最后一個單元格的索引默認是從0開始的 for (int j = 0; j < sheet.LastRowNum + 1; j++) { //得到當前的行 IRow row = sheet.GetRow(j); //遍歷每行所有的單元格 //注意這里不用加1,這里得到的最后一個單元格的索引默認是從1開始的 for (int k = 0; k < row.LastCellNum; k++) { //得到當前單元格 ICell cell = row.GetCell(k, MissingCellPolicy.CREATE_NULL_AS_BLANK); Console.Write(cell.StringCellValue+" "); } Console.WriteLine(); } } }
這就是讀取完成后控制台顯示的結果,和Excel文件中一模一樣。
下一篇我們介紹一下如果將Excel文件導入到數據庫中或者將數據庫的文件導出到Excel里。