zoukankan      html  css  js  c++  java
  • 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里。

  • 相关阅读:
    在vm中安装ubuntu 11 并部署 xampp集成环境步骤
    修改xampp的mysql默认密码
    linux下重命名文件的命令
    IE6下DIV最小高度不能为0的解决方法
    linux下解压tar.gz 文件和 tar.bz2 文件命令
    linux svn 使用
    win7 下设置java环境变量
    在linux下安装svn软件rabbitvcs
    linux下开启ssh服务
    【转】DataSet与DataTable的区别
  • 原文地址:https://www.cnblogs.com/wzxwhd/p/5888849.html
Copyright © 2011-2022 走看看