如何把excel数据导入数据库,将excel数据导入word

2020-11-12 阅读 于蔚然整理

内容简介:excel数据导入mysql简介:工程中经常使用excel导入数据和excel导入数据库的功能。相关内容已搜索过。总结使用的方案。方案一npoi npoi是。POI项目的网络版本。POI是表格数据导入cad...

引言项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下。

方案一NPOINPOI是POI项目的.NET版本。

POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。

使用NPOI你就可以在没有安装Office或者相应环境的机器上对WORD/EXCEL文档进行读写。

NPOI是构建在POI3.x版本之上的,它可以在没有安装Office的情况下对Word/Excel文档进行读写操作。

优势(一)传统操作Excel遇到的问题:1、如果是.NET,需要在服务器端装Office,且及时更新它,以防漏洞,还需要设定权限允许.NET访问COM,如果在导出过程中出问题可能导致服务器宕机。

2、Excel会把只包含数字的列进行类型转换,本来是文本型的,Excel会将其转成数值型的,比如编号000123会变成123。

3、导出时,如果字段内容以-或=开头,Excel会把它当成公式进行,会报错。

4、Excel会根据Excel文件前8行分析数据类型,如果正好你前8行某一列只是数字,那它会认为该列为数值型,自动将该列转变成类似1.42702E17格式,日期列变成包含日期和数字的。

(二)使用NPOI的优势1、您可以完全免费使用该框架2、包含了大部分EXCEL的特性(单元格样式、数据格式、公式等等)3、专业的技术支持服务(24*7全天候)(非免费)4、支持处理的文件格式包括xls,xlsx,docx.5、采用面向接口的设计架构(可以查看NPOI.SS的命名空间)6、同时支持文件的导入和导出7、基于.net2.0也支持xlsx和docx格式(当然也支持.net4.0)8、来自全世界大量成功且真实的测试Cases9、大量的实例代码11、你不需要在服务器上安装微软的Office,可以避免版权问题。

12、使用起来比OfficePIA的API更加方便,更人性化。

13、你不用去花大力气维护NPOI,NPOITeam会不断更新、改善NPOI,绝对省成本。

NPOI之所以强大,并不是因为它支持导出Excel,而是因为它支持导入Excel,并能理解OLE2文档结构,这也是其他一些Excel读写库比较弱的方面。

通常,读入并理解结构远比导出来得复杂,因为导入你必须假设一切情况都是可能的,而生成你只要保证满足你自己需求就可以了,如果把导入需求和生成需求比做两个集合,那么生成需求通常都是导入需求的子集,这一规律不仅体现在Excel读写库中,也体现在pdf读写库中,目前市面上大部分的pdf库仅支持生成,不支持导入。

构成NPOI1.2.x主要由POIFS、DDF、HPSF、HSSF、SS、Util六部分组成。

NPOI.POIFSOLE2/ActiveX文档属性读写库NPOI.DDFMicrosoftOfficeDrawing读写库NPOI.HPSFOLE2/ActiveX文档读写库NPOI.HSSFMicrosoftExcelBIFF(Excel97-2003)格式读写库NPOI.SSExcel公用接口及Excel公式计算引擎NPOI.Util基础类库,提供了很多实用功能,可用于其他读写文件格式项目的开发NPOI组成部分NPOI1.x的最新版为NPOI1.2.5,其中包括了以下功能:1、读写OLE2文档2、读写DocummentSummaryInformation和SummaryInformation3、基于LittleEndian的字节读写4、读写ExcelBIFF格式5、识别并读写ExcelBIFF中的常见Record,如RowRecord,StyleRecord,ExtendedFormatRecord6、支持设置单元格的高、宽、样式等7、支持调用部分Excel内建函数,比如说sum,countif以及计算符号8、支持在生成的XLS内嵌入打印设置,比如说横向/纵向打印、缩放、使用的纸张等。

NPOI2.0主要由SS,HPSF,DDF,HSSF,XWPF,XSSF,OpenXml4Net,OpenXmlFormats组成,具体列表如下:Assembly名称模块/命名空间说明NPOI.DLLNPOI.POIFSOLE2/ActiveX文档属性读写库NPOI.DLLNPOI.DDF微软OfficeDrawing读写库NPOI.DLLNPOI.HPSFOLE2/ActiveX文档读写库NPOI.DLLNPOI.HSSF微软ExcelBIFF(Excel97-2003,doc)格式读写库NPOI.DLLNPOI.SSExcel公用接口及Excel公式计算引擎NPOI.DLLNPOI.Util基础类库,提供了很多实用功能,可用于其他读写文件格式项目的开发NPOI.OOXML.DLLNPOI.XSSFExcel2007(xlsx)格式读写库NPOI.OOXML.DLLNPOI.XWPFWord2007(docx)格式读写库NPOI.OpenXml4Net.DLLNPOI.OpenXml4NetOpenXml底层zip包读写库NPOI.OpenXmlFormats.DLLNPOI.OpenXmlFormats微软OfficeOpenXml对象关系库(以上内容来自百度百科)从上表可知NPOI组件已支持excel2007,记得之前用的时候只支持excel2003。

很久没研究过这玩意儿了。

案例官网地址:http://npoi.codeplex.com/,可以从官网下载NPOI2.X版本的。

首先引入ICSharpCode.SharpZipLib.dllNPOI.dllNPOI.OOXML.dllNPOI.OpenXml4Net.dllNPOI.OpenXmlFormats.dll然后引入命名空间:usingNPOI.XSSF.UserModel;usingNPOI.SS.UserModel;usingNPOI.HSSF.UserModel;辅助类usingNPOI.XSSF.UserModel;usingNPOI.SS.UserModel;usingNPOI.HSSF.UserModel;usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.IO;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingNPOI.SS.Formula.Eval;namespaceWolfy.Common{///

///使用NPOI组件///需引入ICSharpCode.SharpZipLib.dll/NPOI.dll/NPOI.OOXML.dll/NPOI.OpenXml4Net.dll/NPOI.OpenXmlFormats.dll///office2007///publicclassNPOIExcelHelper{//////将Excel文件中的数据读出到DataTable中/////////publicstaticDataTableExcel2DataTable(stringfile,stringsheetName,stringtableName){DataTabledt=newDataTable();IWorkbookworkbook=null;using(FileStreamfs=newFileStream(file,FileMode.Open,FileAccess.Read)){//office2003HSSFWorkbookworkbook=newXSSFWorkbook(fs);}ISheetsheet=workbook.GetSheet(sheetName);dt=Export2DataTable(sheet,0,true);returndt;}//////将指定sheet中的数据导入到datatable中//////指定需要导出的sheet///列头所在的行号,-1没有列头//////privatestaticDataTableExport2DataTable(ISheetsheet,intHeaderRowIndex,boolneedHeader){DataTabledt=newDataTable();XSSFRowheaderRow=null;intcellCount;try{if(HeaderRowIndex0||!needHeader){headerRow=sheet.GetRow(0)asXSSFRow;cellCount=headerRow.LastCellNum;for(inti=headerRow.FirstCellNum;i=cellCount;i){DataColumncolumn=newDataColumn(Convert.ToString(i));dt.Columns.Add(column);}}else{headerRow=sheet.GetRow(HeaderRowIndex)asXSSFRow;cellCount=headerRow.LastCellNum;for(inti=headerRow.FirstCellNum;i=cellCount;i){ICellcell=headerRow.GetCell(i);if(cell==null){break;//到最后跳出循环}else{DataColumncolumn=newDataColumn(headerRow.GetCell(i).ToString());dt.Columns.Add(column);}}}introwCount=sheet.LastRowNum;for(inti=HeaderRowIndex1;i=sheet.LastRowNum;i){XSSFRowrow=null;if(sheet.GetRow(i)==null){row=sheet.CreateRow(i)asXSSFRow;}else{row=sheet.GetRow(i)asXSSFRow;}DataRowdtRow=dt.NewRow();for(intj=row.FirstCellNum;j=cellCount;j){if(row.GetCell(j)!=null){switch(row.GetCell(j).CellType){caseCellType.Boolean:dtRow[j]=Convert.ToString(row.GetCell(j).BooleanCellValue);break;caseCellType.Error:dtRow[j]=ErrorEval.GetText(row.GetCell(j).ErrorCellValue);break;caseCellType.Formula:switch(row.GetCell(j).CachedFormulaResultType){caseCellType.Boolean:dtRow[j]=Convert.ToString(row.GetCell(j).BooleanCellValue);break;caseCellType.Error:dtRow[j]=ErrorEval.GetText(row.GetCell(j).ErrorCellValue);break;caseCellType.Numeric:dtRow[j]=Convert.ToString(row.GetCell(j).NumericCellValue);break;caseCellType.String:stringstrFORMULA=row.GetCell(j).StringCellValue;if(strFORMULA!=nullstrFORMULA.Length0){dtRow[j]=strFORMULA.ToString();}else{dtRow[j]=null;}break;default:dtRow[j]=;break;}break;caseCellType.Numeric:if(DateUtil.IsCellDateFormatted(row.GetCell(j))){dtRow[j]=DateTime.FromOADate(row.GetCell(j).NumericCellValue);}else{dtRow[j]=Convert.ToDouble(row.GetCell(j).NumericCellValue);}break;caseCellType.String:stringstr=row.GetCell(j).StringCellValue;if(!string.IsNullOrEmpty(str)){dtRow[j]=Convert.ToString(str);}else{dtRow[j]=null;}break;default:dtRow[j]=;break;}}}dt.Rows.Add(dtRow);}}catch(Exception){returnnull;}returndt;}//////将DataTable中的数据导入Excel文件中/////////publicstaticvoidDataTable2Excel(DataTabledt,stringfile,stringsheetName){IWorkbookworkbook=newXSSFWorkbook();ISheetsheet=workbook.CreateSheet(sheetName);IRowheader=sheet.CreateRow(0);for(inti=0;idt.Columns.Count;i){ICellcell=header.CreateCell(i);cell.SetCellValue(dt.Columns[i].ColumnName);}//数据for(inti=0;idt.Rows.Count;i){IRowrow=sheet.CreateRow(i1);for(intj=0;jdt.Columns.Count;j){ICellcell=row.CreateCell(j);cell.SetCellValue(dt.Rows[i][j].ToString());}}MemoryStreamstream=newMemoryStream();workbook.Write(stream);byte[]buffer=stream.ToArray();using(FileStreamfs=newFileStream(file,FileMode.Create,FileAccess.Write)){fs.Write(buffer,0,buffer.Length);fs.Flush();}}//////获取单元格类型/////////privatestaticobjectGetValueType(XSSFCellcell){if(cell==null){returnnull;}switch(cell.CellType){caseCellType.Blank:returnnull;caseCellType.Boolean:returncell.BooleanCellValue;caseCellType.Error:returncell.ErrorCellValue;caseCellType.Numeric:returncell.NumericCellValue;caseCellType.String:returncell.StringCellValue;caseCellType.Formula:default:return=cell.StringCellValue;}}}}

作者给您推荐的内容
  1. 当我们的电脑被发现是关闭的和看不见的,我们该怎么办?接下来,让我告诉你。具体内容如下:1。在第一步中,单击桌面上的计算机图标并将其打开。在上面的菜单中解决网络发现关闭且网络计...

  2. 01、首先打开小红书登录,然后点击左上角的头像进入个人中心,然后点击订单可以查看你的订单。02、然后就会出现你所有的订单...

  3. 显示器最佳颜色设置我相信很多用户对显示器的颜色非常敏感。如果有飞蛾,一定很不习惯使用。然后使用显示器的颜色校正软件。它可以帮助用户通过软件修改屏幕的颜色,而无需使...

  4. 微信群不同于QQ群会有一个唯一的号进行查找加入,很多微信朋友在退出群后想再加入回去,但是不知道怎么加入,那么微信群怎么找呢?可以找得到吗?下面我们一起来分享一下吧!01、可以自己...

  5. 自己拍摄的有趣的小视频,想要跟朋友分享,但是不知道怎么办,下面我们就来看看如何在微信朋友圈分享个人视频。01、打开微信,点击发现,进入朋友圈。02、找到下图标注的图标,点击。03、...

  6. 电脑显示器为什么不显示器电源灯不亮黑屏亮...

  7. mercury路由器设置步骤有些朋友家里有几台电脑,但他们只有一个宽带,但他们都希望能够连接到互联网,所以他们需要使用路由器说到路由器,我们必须先谈谈无线路由。在家里,不仅...

  8. VMware以前工作得很好。今VMwareWorkstation无法恢复错误:(vcpu-0)问题的解决方法天,我们在同时运行两个虚拟主机时遇到了一个问题。第一台主机正常进入系统,后一台主机弹出错误提示:VMware Worksta...

  9. Photoshop工作区面板不见了怎么办?可能很多人遇到这种情况,下面我们就来看一下。01、有时打开photoshop,会发现右边常用的工作区不见了。02、这时,我们可以点击菜单上的‘窗口’项。03、然后...

  10. ps在平面设计中是不可缺少的一款软件,我们使用该软件不仅可以对图片进行编辑处理,也可以使用该软件制作印章,下面我们就来看看使用ps是如何制作印章的吧。01、打开ps之后新建一个文件,然...