C# 使用NPOI 操作Excel
2024-09-26 11:49:30
首先 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();
}
}
最新文章
- 在Windows10 64位 Anaconda4 Python3.5下安装XGBoost
- linux---文本编辑vi
- html css js
- Python3基础 ,= 一个等式给多个变量赋值
- iMpACT中的Xilinx Prom烧录
- [已解决问题] Could not find class XXX referenced from method XXX.<;YYY>;
- COJ 0802 非传统题(二)
- 自制单片机之七……RS232串口
- UITextView 限制输入字数
- 用web技术写APP
- python上传图片并识别图片
- FATAL ERROR: Could not find ./share/fill_help_tables.sql
- CUDA ---- Memory Access
- 对ThreadLocal的源码解读
- windows 10 部署flask web
- 基于gRpc的远程服务框架
- Codeforces Round #353 (Div. 2) D. Tree Construction 模拟
- java-servlet的url-pattern匹配规则详细描述
- POJ3254:Corn Fields(状压dp第一发)
- Low overhead memory space management
热门文章
- 注意C语言 / 要想得到精确结果
- cordova原生页面切换效果插件的使用:com.telerik.plugins.nativepagetransitions
- 引擎设计跟踪(九.14.3.3) Deferred shading的一些小细节
- 前后端数据交互处理基于原生JS模板引擎开发
- 自己实现一个jQuery插件
- git 命令提交文件
- jumpserver+Keepalived中一些配置
- Linux系统时间的设置
- 18.23 inline函数功能
- Python中安装MySQL