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

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

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

自己做了一个简单的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都可以使用

        /// <summary>
/// Excel转换成DataTable
/// </summary>
/// <param name="strExcelFileName">文件路径</param>
/// <param name="strSheetName">Excel中对应的sheet表单名称,如:sheet1,sheet2</param>
/// <returns>数据集</returns>
[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都可以使用 /// <summary>读取excel
/// 根据索引读取Sheet表数据,默认读取第一个sheet
/// </summary>
/// <param name="strFileName">excel文档路径</param>
/// <param name="sheetIndex">sheet表的索引,从0开始</param>
/// <returns>数据集</returns>
public static DataTable ExcelToDataTable(string strFileName, int sheetIndex = )
{
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();
int cellCount = headerRow.LastCellNum;
for (int j = ; j < cellCount; j++)
{
HSSFCell cell = (HSSFCell)headerRow.GetCell(j);
dt.Columns.Add(cell.ToString());
}
for (int i = (sheet.FirstRowNum + ); 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();
int cellCount = headerRow.LastCellNum;
for (int j = ; j < cellCount; j++)
{
XSSFCell cell = (XSSFCell)headerRow.GetCell(j);
dt.Columns.Add(cell.ToString());
}
for (int i = (xSheet.FirstRowNum + ); 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 /// <summary>
/// C/S Winform中DataGridView导出数据到Excel
/// </summary>
/// <param name="myDgv">DataGridView控件名称</param>
/// <param name="saveFileName">保存的文件名称,默认没有,调用的时候最好加上,中英文都支持</param>
/// <param name="isOpen">导出后是否打开文件和所在文件夹</param>
/// <param name="saveFilePath">默认保存在“我的文档”中,可自定义保存的文件夹路径</param>
/// <param name="strHeaderText">Excel中第一行的标题文字,默认没有,可以自定义</param>
/// <param name="titleNames">Excel中列名的数组,默认绑定GridView的列名</param>
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, , data.Length);
fs.Flush();
}
if (isOpen)
{
Process.Start(saveFullPath); //打开文件
Process.Start(saveFilePath); //打开文件夹
}
}
} #endregion

添加引用包

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

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

测试程序项目下载地址

http://download.csdn.net/detail/mryanghenglian/6873615

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

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

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

使用NPOI组件完成的Excel导出导入(附源代码,测试通过)的更多相关文章

  1. 使用NPOI实现简单的Excel导出功能

    [1]NPOI是啥? NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作. POI是一个开源的Java读写Excel. ...

  2. C#Excel导出导入

    using System; using System.Collections.Generic; using NPOI; using NPOI.HPSF; using NPOI.HSSF; using ...

  3. excel导出导入通用方法

    /** * 方法说明:批量导出通用方法 * 创建时间:2018年8月24日 *** * @param filePath 文件地址 * @param sheetName 分页名称 * @param ti ...

  4. excel 导出导入

    /** * 导出 * @param * @param * @return */ public function exportexcel() { set_time_limit(0); ini_set(' ...

  5. php 之 excel导出导入合并

    <?php class Excel extends Controller { //直属高校 public function __construct() { parent::Controller( ...

  6. 【编码备份】1.9从Excel中导入用户名进行测试,用户一次进入系统进行答题测试。

    # coding=utf-8 """ Created on 2017年7月31日 @author: candy """ from selen ...

  7. Unity读取Excel文件(附源代码)

    今天想弄个Unity读取Excel的功能的,发现网上有许多方法,采用其中一种方法:加入库文件 Excel.dll 和ICSharpCode.SharpZipLib.dll库文件,(还有System.D ...

  8. NPOI组件集锦

    关于NPOI不错的介绍:http://www.cnblogs.com/restran/p/3889479.html http://www.cnblogs.com/Irving/archive/2012 ...

  9. php做EXCEL数据导出导入开发的一些小问题

    前两天刚刚做开发CRM系统项目,在做要做EXCEL导出导入功能,因为以前做.NET开发用的是NPOI,但可是没找到PHP版本的,所以就网搜找了个国外的开源PHPEXCEL , 一开始只是做了简单的导入 ...

随机推荐

  1. 备忘录:hadoop技术一点积累

    1.hbase的rowkey是按字典排序的,我看有的资料建议rowkey设计不应该是自增的,应该和这个字典排序相关吧 2.hbase的数据存储是按照region来的,region的设计前段时间在坐飞机 ...

  2. [nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

    蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体 ...

  3. android内部培训视频_第一节

    声明:本视频为公司内部做android培训时录制的,无任何商业目的.同时鉴于水平有限,可能不符合您的需求,放在这里的目的是提供给公司同事下载,作为培训的一个记录,也作为一个系列教程的自我督促完成的理由 ...

  4. 剖析twemproxy前言

    又是喜闻乐见的新坑,前面的mysql协议,当我在解读go-mysql包的时候,会重新讲到,至于Leetcode的更新会与go语言同步.关于这个redis的新坑,目前打算通过剖析twemproxy源码来 ...

  5. KnockoutJS 3.X API 第六章 组件(4) 自定义元素

    自定义元素提供了一种将组件注入视图的方便方法. 本节目录 介绍 例子 传递参数 父组件和子组件之间的通信 传递监控属性的表达式 将标记传递到组件中 控制自定义元素标记名称 注册自定义元素 备注1:将自 ...

  6. Tips for newbie to read source code

    This post is first posted on my WeChat public account: GeekArtT Reading source code is always one bi ...

  7. 【Win10应用开发】自定义桌面壁纸

    调用通用的API来设置桌面壁纸,是一件既简单又有趣的事情,结合XAML可以生成图像的特性,你甚至可以做一个应用,让用户用他所拍的照片做成一张自定义壁纸,然后作为桌面壁纸. 这个API是通用的,应用运行 ...

  8. 【Win10 应用开发】语音命令与App Service集成

    昨天,老周演示了语音命令集成这一高大上功能,今天咱们来点更高级的语音命令. 在昨天的例子中,响应语音命令是需要启动应用程序的,那么如果可以不启动应用程序,就直接在小娜面板上进行交互,是不是会更高大小呢 ...

  9. 【WP开发】记录屏幕操作

    在某些应用中,比如游戏,有时候需要将用户的操作记录下来.ScreenCapture类提供了这个功能.但必须注意的是:此屏幕记录功能只对当前应用程序的屏幕有效,即只有当前应用程序在前台运行时才有效. 与 ...

  10. n维数组实现(可变参数表的使用)

    首先先介绍一下可变参数表需要用到的宏: 头文件:#include<cstdarg> void va_start( va_list arg_ptr, prev_param ); type v ...