zoukankan      html  css  js  c++  java
  • NPOI读取Excel数据应用

    NPOI 是 POI 项目的 .NET 版本。使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写。NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。

    需求:根据excel表格提供的SVN相对路径将本地中A文件夹中涉及到的文件拷贝到B文件中(A和B两个文件路径所在位置不同)

    分析:

    1. 如何读取excle文档?(怎样根据读取excle中的指定sheet信息,如何读取某一列数据)
    2. 如果本地PS端未按照office办公软件,如何读取?

    常规做法如下:

    把excel表格当作一个本地库(可以理解为本地数据库),利用ADO.ENT进行数据读取,具体代码如下:

     //创建一个数据链接 
                string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =" + fileName + ";Extended Properties=Excel 8.0";
                using (OleDbConnection myConn = new OleDbConnection(strCon))
                {
                    string strCom = " SELECT * FROM [过程文档$] ";
                    myConn.Open();
                    //打开数据链接,得到一个数据集 
                    OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
                    //创建一个 DataSet对象 
                    DataSet ds = new DataSet();
                    //得到自己的DataSet对象 
                    myCommand.Fill(ds, "[过程文档$]");
                    DataTable dt = ds.Tables[0];
                
    }

    通过上述代码,我们的调试的过程中发现以下几个问题

    1. 读取excel的版本必须和本地excel的provider保持一直(这种情况相对不灵活,如果excel版本更改,其他配置都需更改);
    2. 发现错误调试过程比较麻烦,耗费时间较大
    3. 本地必须安装office excel软件

    那既然用传统的方式操作比较麻烦,下面提供NPOI的解决方案,代码如下:

                using (FileStream sr = new FileStream(fileName, FileMode.OpenOrCreate))
                {
                    //根据路径通过已存在的excel来创建HSSFWorkbook,即整个excel文档
                    HSSFWorkbook workbook = new HSSFWorkbook(sr);
    
                    //获取excel的第一个sheet
                    Sheet sheet = workbook.GetSheetAt(0);
    
                    //最后一列的标号  即总的行数
                    int rowCount = sheet.LastRowNum;
    
                    //从第二行开始,第一行为列名
                    for (int i = 1; i <= sheet.LastRowNum; i++)
                    {
                        //获取索引2即为svn源路径
                        string path = sheet.GetRow(i).GetCell(2).ToString();
                        if (!developPaths.Contains(path))
                        {
                            developPaths.Add(GetDevelopPath(path, copyCodeFileName));
                        }
                    }
    
                }

    相对于传统做法来讲,npoi将每个sheet当初了一个table,其代码量相对较少,对开发的要求也比较低。

    以下是NPOI的下载地址

    http://download.csdn.net/detail/jun118166/7243415

  • 相关阅读:
    2017.4.7 java异常处理总结
    2017.3.31 spring mvc教程(八) <mvc:annotation-driven />所做的工作
    2017.3.31 spring mvc教程(七)多视图控制器
    2017.3.31 spring mvc教程(六)转发、重定向、ajax请求
    2017.3.31 spring mvc教程(五)Action的单元测试
    2017.3.31 spring mvc教程(四)全局的异常处理
    2017.3.31 spring mvc教程(三)拦截器
    2017.3.31 spring mvc教程(二)核心流程及配置详解
    2017.3.31 spring mvc教程(一)核心类与接口
    19.创建如下三个类:(People类中的三个方法分别输出一些信息,ChinaPeople 和AmericanPeople类重写父类的三个方法)。
  • 原文地址:https://www.cnblogs.com/tuqun/p/3684733.html
Copyright © 2011-2022 走看看