首先 Nuget 引入NPOI

一、读取Excel

/// <summary>
/// 读取Excel数据
/// </summary>
public static void ReadExcel()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Excel|*.xlsx;*.xls";
if (ofd.ShowDialog() == DialogResult.OK)
{
IWorkbook workbook = null;
//打开选择的Excel文件
using (FileStream file = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read))
{
//根据现有的Excel文档创建工作簿
workbook = WorkbookFactory.Create(ofd.FileName);
}
//获得工作表
ISheet sheet0 = workbook.GetSheetAt();
//获得所有行的集合
System.Collections.IEnumerator rows = sheet0.GetRowEnumerator();
var cellCount = sheet0.GetRow().LastCellNum;//第一行列数
//从第一行开始读取
for (int i = sheet0.FirstRowNum ; i <= sheet0.LastRowNum; i++)
{
IRow row = sheet0.GetRow(i);
var cell0 = row.GetCell().ToString();//第 i 行第1列
var cell1 = row.GetCell().ToString();//第 i 行第2列 //todo something:
}
}
}

二、导出到Excel

/// <summary>
/// Datable导出成Excel
/// </summary>
/// <param name="dt"></param>
/// <param name="file">导出路径(包括文件名与扩展名)</param>
public static void TableToExcel(DataTable dt, string file)
{
IWorkbook workbook;
string fileExt = Path.GetExtension(file).ToLower();
if (fileExt == ".xlsx") { workbook = new XSSFWorkbook(); } else if (fileExt == ".xls") { workbook = new HSSFWorkbook(); } else { workbook = null; }
if (workbook == null) { return; }
ISheet sheet = string.IsNullOrEmpty(dt.TableName) ? workbook.CreateSheet("Sheet1") : workbook.CreateSheet(dt.TableName); //表头
IRow row = sheet.CreateRow();
for (int i = ; i < dt.Columns.Count; i++)
{
ICell cell = row.CreateCell(i);
cell.SetCellValue(dt.Columns[i].ColumnName);
} //数据
for (int i = ; i < dt.Rows.Count; i++)
{
IRow row1 = sheet.CreateRow(i + );
for (int j = ; j < dt.Columns.Count; j++)
{
ICell cell = row1.CreateCell(j);
cell.SetCellValue(dt.Rows[i][j].ToString());
}
} //转为字节数组
MemoryStream stream = new MemoryStream();
workbook.Write(stream);
var buf = stream.ToArray(); //保存为Excel文件
using (FileStream fs = new FileStream(file, FileMode.Create, FileAccess.Write))
{
fs.Write(buf, , buf.Length);
fs.Flush();
}
}

最新文章

  1. 在Windows10 64位 Anaconda4 Python3.5下安装XGBoost
  2. linux---文本编辑vi
  3. html css js
  4. Python3基础 ,= 一个等式给多个变量赋值
  5. iMpACT中的Xilinx Prom烧录
  6. [已解决问题] Could not find class XXX referenced from method XXX.&lt;YYY&gt;
  7. COJ 0802 非传统题(二)
  8. 自制单片机之七……RS232串口
  9. UITextView 限制输入字数
  10. 用web技术写APP
  11. python上传图片并识别图片
  12. FATAL ERROR: Could not find ./share/fill_help_tables.sql
  13. CUDA ---- Memory Access
  14. 对ThreadLocal的源码解读
  15. windows 10 部署flask web
  16. 基于gRpc的远程服务框架
  17. Codeforces Round #353 (Div. 2) D. Tree Construction 模拟
  18. java-servlet的url-pattern匹配规则详细描述
  19. POJ3254:Corn Fields(状压dp第一发)
  20. Low overhead memory space management

热门文章

  1. 注意C语言 / 要想得到精确结果
  2. cordova原生页面切换效果插件的使用:com.telerik.plugins.nativepagetransitions
  3. 引擎设计跟踪(九.14.3.3) Deferred shading的一些小细节
  4. 前后端数据交互处理基于原生JS模板引擎开发
  5. 自己实现一个jQuery插件
  6. git 命令提交文件
  7. jumpserver+Keepalived中一些配置
  8. Linux系统时间的设置
  9. 18.23 inline函数功能
  10. Python中安装MySQL