博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用NPOI组件完成的Excel导出导入(附源代码,测试通过)
阅读量:5790 次
发布时间:2019-06-18

本文共 7177 字,大约阅读时间需要 23 分钟。

最近遇到一个Excel导入导出的问题,要支持winform和webform,这里我是一个认真严谨的coder,所以决定把这个记录下来!和大家一起分享一下!如果需要的同学可以下载哦!

对于NPOI这个组件,大家可能都了解了吧!如果不了解的同学,还是百度一下吧!不然后面不太看懂的。

1.我封装了这个类(ExcelHelper),该有的注释我也都加上了,希望大家可以看得懂!如果有什么bug,可以反馈到我的邮箱:

自己做了一个简单的winform的小程序,主要就是Excel的导入和导出,大家可以下载看一下

方法解释说明

ExcelToDataTable()--Excel转换成DataTable--B/S和C/S都可以使用

ExcelToDataTable()--根据索引读取Sheet表数据,默认读取第一个sheet--B/S和C/S都可以使用

DataGridViewToExcel()--DataGridView导出到Excel文件--C/S

#region ExcelToDataTable(string strExcelFileName, string strSheetName) Excel转换成DataTable--B/S和C/S都可以使用        ///         /// Excel转换成DataTable        ///         /// 文件路径        /// Excel中对应的sheet表单名称,如:sheet1,sheet2        /// 
数据集
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2100:检查 SQL 查询是否存在安全漏洞")] public static DataTable ExcelToDataTable(string strExcelFileName, string strSheetName) { string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + strExcelFileName + ";" + "Extended Properties=Excel 5.0;"; string strExcel = string.Format("select * from [{0}$]", strSheetName); DataSet ds = new DataSet(); using (OleDbConnection conn = new OleDbConnection(strConn)) { conn.Open(); OleDbDataAdapter adapter = new OleDbDataAdapter(strExcel, strConn); adapter.Fill(ds, strSheetName); conn.Close(); return ds.Tables[strSheetName]; } } #endregion #region DataTable ExcelToDataTable(string strFileName, int sheetIndex = 0) 根据索引读取Sheet表数据,默认读取第一个sheet--B/S和C/S都可以使用 /// 读取excel /// 根据索引读取Sheet表数据,默认读取第一个sheet /// /// excel文档路径 /// sheet表的索引,从0开始 ///
数据集
public static DataTable ExcelToDataTable(string strFileName, int sheetIndex = 0) { DataTable dt = new DataTable(); HSSFWorkbook hssfworkbook = null; XSSFWorkbook xssfworkbook = null; string fileExt = Path.GetExtension(strFileName);//获取文件的后缀名 using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read)) { if (fileExt == ".xls") hssfworkbook = new HSSFWorkbook(file); else if (fileExt == ".xlsx") xssfworkbook = new XSSFWorkbook(file);//初始化太慢了,不知道这是什么bug } if (hssfworkbook != null) { HSSFSheet sheet = (HSSFSheet)hssfworkbook.GetSheetAt(sheetIndex); if (sheet != null) { System.Collections.IEnumerator rows = sheet.GetRowEnumerator(); HSSFRow headerRow = (HSSFRow)sheet.GetRow(0); int cellCount = headerRow.LastCellNum; for (int j = 0; j < cellCount; j++) { HSSFCell cell = (HSSFCell)headerRow.GetCell(j); dt.Columns.Add(cell.ToString()); } for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++) { HSSFRow row = (HSSFRow)sheet.GetRow(i); DataRow dataRow = dt.NewRow(); for (int j = row.FirstCellNum; j < cellCount; j++) { if (row.GetCell(j) != null) dataRow[j] = row.GetCell(j).ToString(); } dt.Rows.Add(dataRow); } } } else if (xssfworkbook != null) { XSSFSheet xSheet = (XSSFSheet)xssfworkbook.GetSheetAt(sheetIndex); if (xSheet != null) { System.Collections.IEnumerator rows = xSheet.GetRowEnumerator(); XSSFRow headerRow = (XSSFRow)xSheet.GetRow(0); int cellCount = headerRow.LastCellNum; for (int j = 0; j < cellCount; j++) { XSSFCell cell = (XSSFCell)headerRow.GetCell(j); dt.Columns.Add(cell.ToString()); } for (int i = (xSheet.FirstRowNum + 1); i <= xSheet.LastRowNum; i++) { XSSFRow row = (XSSFRow)xSheet.GetRow(i); DataRow dataRow = dt.NewRow(); for (int j = row.FirstCellNum; j < cellCount; j++) { if (row.GetCell(j) != null) dataRow[j] = row.GetCell(j).ToString(); } dt.Rows.Add(dataRow); } } } return dt; } #endregion #region DataGridViewToExcel(DataGridView myDgv, string strHeaderText, string strFileName) DataGridView导出到Excel文件--C/S /// /// C/S Winform中DataGridView导出数据到Excel /// /// DataGridView控件名称 /// 保存的文件名称,默认没有,调用的时候最好加上,中英文都支持 /// 导出后是否打开文件和所在文件夹 /// 默认保存在“我的文档”中,可自定义保存的文件夹路径 /// Excel中第一行的标题文字,默认没有,可以自定义 /// Excel中列名的数组,默认绑定GridView的列名 public static void DataGridViewToExcel(DataGridView myDgv, string saveFileName = null, bool isOpen = false, string saveFilePath = null, string strHeaderText = null, string[] titleNames = null) { using (MemoryStream ms = DataGridViewToExcel(myDgv, strHeaderText, titleNames)) { if (string.IsNullOrEmpty(saveFileName)) //文件名为空 { saveFileName = DateTime.Now.Ticks.ToString(); } if (string.IsNullOrEmpty(saveFilePath) || !System.IO.Directory.Exists(saveFilePath)) //保存路径为空或者不存在 { saveFilePath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); //默认在文档文件夹中 } string saveFullPath = saveFilePath + "\\" + saveFileName + ".xls"; if (System.IO.File.Exists(saveFullPath)) //验证文件重复性 { saveFullPath = saveFilePath + "\\" + saveFileName + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss").Replace(":", "-").Replace(" ", "-") + ".xls"; } using (FileStream fs = new FileStream(saveFullPath, FileMode.Create, FileAccess.Write)) { byte[] data = ms.ToArray(); fs.Write(data, 0, data.Length); fs.Flush(); } if (isOpen) { Process.Start(saveFullPath); //打开文件 Process.Start(saveFilePath); //打开文件夹 } } } #endregion
View Code

 

添加引用包

Dll下载地址(http://download.csdn.net/detail/mryanghenglian/6873605

这个压缩文件当中包含了需要添加的dll和ExcelHelper类,添加完毕后,就可以使用了,支持B/S和C/S的导入导出哦!希望大家可以喜欢

测试程序项目下载地址

小伙伴们如果觉得好,帮忙推荐一下!

*****************************************************************

将来的你一定会感激现在拼命的自己

转载地址:http://dogyx.baihongyu.com/

你可能感兴趣的文章
Exchange2010高可靠性和可用性解决方案
查看>>
java读取Excel文件
查看>>
病毒在网络上传播的基本途径分析
查看>>
Mac系统中在Finder中显示(隐藏)隐藏文件
查看>>
perl学习笔记(9)
查看>>
使用Intel Thread Profiler查看Parallel.For性能
查看>>
《Hadoop进阶》利用Hadoop构建豆瓣图书推荐系统
查看>>
Linux运行环境大杂配
查看>>
部件举例之磁头上岗记(硬盘构造再揭秘之二)
查看>>
我们如何从VC++开始“编程”?
查看>>
设计模式学习笔记(8)——装饰者模式
查看>>
个人笔记------微信支付
查看>>
Django 之 基于类的视图源码分析
查看>>
增强的任务单元模型
查看>>
十招保护Linux系统安全
查看>>
Luhn算法验证银行卡是否有效
查看>>
javascript代码snippet
查看>>
《棋经十三篇》
查看>>
统计方法:Count API-Medoo使用指南
查看>>
Slackware窗口系统本地化
查看>>