C#操作Excel(NPOI)


這兩天需要讀取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里。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM