zoukankan      html  css  js  c++  java
  • c#关于导入execl

      由于工作需要,经常要添加新的产品,涉及到数量多了就得考虑批量处理。

     //此驱动对应的Execl格式为 xls        

    string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filenameurl + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";

      //此驱动对应的Execl格式为 xlsx     HDR=YES/No 有标题/没有标题     IMEX=0/1/2   写入/读取/写读皆可

       

    //string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filenameurl + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=1;'";

    通过以上调用OleDb的方式,依旧有问题,主要是存在当某列前10几条的文件类型是数字,而其后数字上带有字母的话就无法读取到。即使设置此列为文本也无效,有些人说可修改注册表里面的值。但是我找注册表里面却没有那些节点,且这种方法要安装office才有效。挺多局限性。找资料看到前辈们推荐NPOI,就找到官网学习了:

    官网:http://npoi.codeplex.com/SourceControl/latest#NPOI.Examples/ImportXlsToDataTable/Form1.cs

    第一步,下载组件并导入NPOI.dll。

    第二部,引用命名空间。using NPOI.HSSF.UserModel;   using NPOI.SS.UserModel;
    第三步,说明工作簿对象: HSSFWorkbook hssfworkbook;

    第四部,读取数据内容:

    protected void Button1_Click(object sender, EventArgs e)    

    {           //打开.xls文件         

                        using (FileStream fs = File.OpenRead(@"e:/*.xls"))       

                         {            

                                HSSFWorkbook wk = new HSSFWorkbook(fs);   //把xls文件中的数据写入wk中            

                              for (int i = 0; i < wk.NumberOfSheets; i++)  //NumberOfSheets是*.xls中总共的表数            

                              {               

                                       ISheet sheet = wk.GetSheetAt(i);   //读取当前表数据                

                                       for (int j = 0; j <= sheet.LastRowNum; j++)  //LastRowNum 是当前表的总行数                  

                                        {                    

                                                     IRow row = sheet.GetRow(j);  //读取当前行数据                    

                                                   if (row != null)                    

                                                  {

                                                        for (int k = 0; k <= row.LastCellNum; k++)  //LastCellNum 是当前行的总列数                        

                                                         {

                                                                ICell cell = row.GetCell(k);  //当前表格                                                    

                                                                 if (cell != null)   

                                                                  {    //读取cell即单元格的值做进一步处理   

                                                                   }

                                                           }

                                                      }              

                                       }           

                          }      

               }        

     }

    以上只是简单的读取到execl中的单元格的值,有待于进一步学习使用NPOI对文档进行操作处理。

  • 相关阅读:
    Java 执行
    Java 反射
    Mysql 日常
    Java 引用
    Mysql insert on update
    Java Mail 异常
    HDU_5456_数位dp
    HDU_4734_数位dp
    POJ_1221_DP
    POJ_1050_最大子矩阵
  • 原文地址:https://www.cnblogs.com/professional-NET/p/4681544.html
Copyright © 2011-2022 走看看