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对文档进行操作处理。

原文地址:https://www.cnblogs.com/professional-NET/p/4681544.html