导入导出的方法以及引用,可以自行创建一个帮助类

using System;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using NPOI.HSSF.UserModel;
using System.IO;
using System.Data;
using System.Data.OleDb;

namespace ExcelHelper
{
public class ExcelHelper : IDisposable
{
private string fileName = null; //文件名
private IWorkbook workbook = null;
private FileStream fs = null;
private bool disposed;

public ExcelHelper(string fileName)
{
this.fileName = fileName;
disposed = false;
}

/// <summary>
/// 将DataTable数据导入到excel中
/// </summary>
/// <param name="data">要导入的数据</param>
/// <param name="isColumnWritten">DataTable的列名是否要导入</param>
/// <param name="sheetName">要导入的excel的sheet的名称</param>
/// <returns>导入数据行数(包含列名那一行)</returns>
public int DataTableToExcel(DataTable data, string sheetName, bool isColumnWritten)
{
int i = 0;
int j = 0;
int count = 0;
ISheet sheet = null;

fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);
if (fileName.IndexOf(".xlsx") > 0) // 2007版本
workbook = new XSSFWorkbook();
else if (fileName.IndexOf(".xls") > 0) // 2003版本
workbook = new HSSFWorkbook();

try
{
if (workbook != null)
{
sheet = workbook.CreateSheet(sheetName);
}
else
{
return -1;
}

if (isColumnWritten == true) //写入DataTable的列名
{
IRow row = sheet.CreateRow(0);
for (j = 0; j < data.Columns.Count; ++j)
{
row.CreateCell(j).SetCellValue(data.Columns[j].ColumnName);
}
count = 1;
}
else
{
count = 0;
}

for (i = 0; i < data.Rows.Count; ++i)
{
IRow row = sheet.CreateRow(count);
for (j = 0; j < data.Columns.Count; ++j)
{
row.CreateCell(j).SetCellValue(data.Rows[i][j].ToString());
}
++count;
}
workbook.Write(fs); //写入到excel
return count;
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
return -1;
}
}

/// <summary>
/// 将excel中的数据导入到DataTable中
/// </summary>
/// <param name="sheetName">excel工作薄sheet的名称</param>
/// <param name="isFirstRowColumn">第一行是否是DataTable的列名</param>
/// <returns>返回的DataTable</returns>
public DataTable ExcelToDataTable(string sheetName, bool isFirstRowColumn)
{
ISheet sheet = null;
DataTable data = new DataTable();
int startRow = 0;
try
{
fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
if (fileName.IndexOf(".xlsx") > 0) // 2007版本
workbook = new XSSFWorkbook(fs);
else if (fileName.IndexOf(".xls") > 0) // 2003版本
workbook = new HSSFWorkbook(fs);

if (sheetName != null)
{
sheet = workbook.GetSheet(sheetName);
if (sheet == null) //如果没有找到指定的sheetName对应的sheet,则尝试获取第一个sheet
{
sheet = workbook.GetSheetAt(0);
}
}
else
{
sheet = workbook.GetSheetAt(0);
}
if (sheet != null)
{
IRow firstRow = sheet.GetRow(0);
int cellCount = firstRow.LastCellNum; //一行最后一个cell的编号 即总的列数

if (isFirstRowColumn)
{
for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{
ICell cell = firstRow.GetCell(i);
dynamic cellValue = string.Empty;
switch (cell.CellType)
{
case CellType.Numeric:
//NPOI中数字和日期都是NUMERIC类型的,这里对其进行判断是否是日期类型
if (HSSFDateUtil.IsCellDateFormatted(cell))//日期类型
{
cellValue = cell.DateCellValue;
}
else//其他数字类型
{
cellValue = cell.NumericCellValue;
}
break;
case CellType.Formula:
HSSFFormulaEvaluator eva = new HSSFFormulaEvaluator(workbook);
cellValue = eva.Evaluate(cell).StringValue;
break;
case CellType.Blank:
cellValue = "";
break;
default:
cellValue = cell.StringCellValue;
break;
}
if (cellValue != null)
{
DataColumn column = new DataColumn(cellValue);
data.Columns.Add(column);
}
}
startRow = sheet.FirstRowNum + 1;
}
else
{
for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
{
DataColumn column = new DataColumn("number" + i);
data.Columns.Add(column);
}
startRow = sheet.FirstRowNum;
}

//最后一列的标号
int rowCount = sheet.LastRowNum;
for (int i = startRow; i <= rowCount; ++i)
{
IRow row = sheet.GetRow(i);
if (row == null) continue; //没有数据的行默认是null       

DataRow dataRow = data.NewRow();
for (int j = row.FirstCellNum; j < cellCount; ++j)
{
ICell cell = row.GetCell(j);
if (cell != null) //同理,没有数据的单元格都默认是null
{
dynamic cellValue = string.Empty;
switch (cell.CellType)
{
case CellType.Numeric:
//NPOI中数字和日期都是NUMERIC类型的,这里对其进行判断是否是日期类型
if (HSSFDateUtil.IsCellDateFormatted(cell))//日期类型
{
cellValue = cell.DateCellValue.ToString("yyyy/MM/dd");
}
else//其他数字类型
{
cellValue = Convert.ToDouble(cell.ToString());
}
break;
case CellType.Blank:
cellValue = "";
break;
default:
cellValue = cell.ToString();
break;
}
dataRow[j] = cellValue;
}

}
data.Rows.Add(dataRow);
}
}

return data;
}
catch (Exception ex)
{
Console.WriteLine("Exception: " + ex.Message);
return null;
}
}

public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}

protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (disposing)
{
if (fs != null)
fs.Close();
}

fs = null;
disposed = true;
}
}
}
}

转载于:https://www.cnblogs.com/chendaye/p/10693983.html

ASP .Net C# ---Excel导入导出方法相关推荐

  1. ASP.NET MVC Excel 导入导出 ASP.NET Web API Excel 下载 C# Excel 导入导出

    注意:服务器需要安装office软件 1.Excel导入    提示:未在本地计算机上注册"Microsoft.Jet.OLEDB.4.0"提供程序.               ...

  2. 【飞秋】ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码

    最近闲了,花点几天时间将项目中常用的一些类.方法做了一下总结,希望对大家有用. 实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回fa ...

  3. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

  4. 注解+反射优雅的实现Excel导入导出(通用版)

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源:blog.csdn.net/youzi1394046585/ article/details/86670203 日常在做后 ...

  5. java超级简单到爆的Excel导入导出(easypoi)

    场景: 在日常工作中,excel导入导出,是十分常见的,有两种主流的技术,一种是jxl,另一种是poi,而easypoi就是对poi进行了封装,使得导入导出变得更加的简单,阿里巴巴也有封装的工具名叫E ...

  6. easyexcel 设置标题_EasyExcel,让 excel 导入导出更加简单

    做积极的人,而不是积极废人! 来源:jianshu.com/p/8f3defdc76d4EasyExcelGitHub上的官方说明快速开始maven仓库地址导入导出总结 EasyExcel 在做exc ...

  7. excel winform 导入 导出_强大的 Excel 导入导出工具 hutool

    " 最近项目上需要用到 Excel 的导入导出功能,想着之前使用的都有点麻烦,所以结合多方资料,终于找到了这个还算不错的 Excel 处理工具,一起来看" 今日安利好物名为 Hut ...

  8. 【springboot+easypoi】一行代码搞定excel导入导出

    原文:https://www.jianshu.com/p/5d67fb720ece 开发中经常会遇到excel的处理,导入导出解析等等,java中比较流行的用poi,但是每次都要写大段工具类来搞定这事 ...

  9. SpringBoot实现Excel导入导出,好用到爆,POI可以扔掉了!

    在我们平时工作中经常会遇到要操作Excel的功能,比如导出个用户信息或者订单信息的Excel报表.你肯定听说过POI这个东西,可以实现.但是POI实现的API确实很麻烦,它需要写那种逐行解析的代码(类 ...

最新文章

  1. leetcode-Symmetric Tree 对称树
  2. Python字符串的定义与常用操作
  3. vba mysql update多字段_vba操作Mysql使用UPDATE一次更新多组数据
  4. 前端小知识点(7):正则前瞻
  5. 【hue】 There are currently no roles defined
  6. Python if语句Demo
  7. idea中springBoot项目修改html之类的文件后服务不自动更新
  8. 简单排序(插入排序法)
  9. 10.React中的组件、父子组件、React props父组件给子组件传值、子组件给父组件传值、父组件中通过refs获取子组件属性和方法...
  10. 千入坑坑之安装matlab,114错误,几种系统报错解决
  11. 【GMSK+FPGA】基于verilog的GMSK调制系统设计
  12. delphi完美经典--第十八章
  13. 2014校园招聘_华为2014校园招聘
  14. java线程游戏之随机小球游戏V2
  15. 空间和时间 ----节选《时间简史》 霍金
  16. 产品读书.心理学《梦的解析》
  17. 再玩五分钟手机就开始学习
  18. 齐岳|马铃薯凝集素修饰PLGA纳米粒|利福平PLGA纳米粒|齐墩果酸/乳酸羟基乙酸共聚物-水溶性维生素E衍生物(PLGA-TPGS)纳米粒
  19. Xtend官方文档-第一部分
  20. 魔兽世界新版本-逍遥魔兽V837-一键服务端

热门文章

  1. android编译的错误日志,android编译遇到错误
  2. 模板设计模式_23种设计模式之模板设计模式
  3. java web几百万分页_举例详解用Java实现web分页功能的方法
  4. python setup_简述python setup.py install的过程
  5. oracle删除的数据没有commit,在Oracle中误删除数据后并commit后的数据恢复办法
  6. 数组元素替换_LeetCode基础算法题第183篇:一维数组的重新洗牌
  7. 学会python爬虫能发财么_python如何赚钱? python爬虫如何进阶? python就业? 如何快速入门python?...
  8. 左右边界二分查找小总结
  9. 相机模型与标定(十四)--误差分析
  10. 蓝牙学习笔记(二)——低功耗蓝牙(BLE)的体系结构