excel文本写入 npoi_C#读写Excel表格文件NPOI方式无需安装office

本文介绍如何使用C#和NPOI库在无Office环境下读写Excel文件。通过示例代码展示了读取Excel数据到DataTable以及将DataTable保存回Excel的过程。
摘要由CSDN通过智能技术生成

重要:本文最后更新于2018-05-11 09:54:31,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗。

这两天在做一个故障报修系统,其中需要用到表格来统计记录信息,第一反应是弄个MySQL,安全可靠,别人改不了。然而…电脑比较老,带不动,又想用sqlite这种轻量级的数据库,又由于各种原因,放弃了sqlite,最终选择了Excel,因为它简单,快捷,就是不够安全。

操作Excel的方法很多,微软也提供了office组件,C#可以调用。如果对方电脑没装ofice那就尴尬了,用不了。不过代码狗今天讲的方法是不需要ofice组件支持的。

本文所需支持库在文章末尾有分享,看到最后哟!

先看看功能效果:

1fb67e559a47f348ea356a6362ad028d.png

C#读写Excel表格文件NPOI方式无需安装office

4cba2068ed7c66cefa6e94dfb698119e.png

C#读写Excel表格文件NPOI方式无需安装office

首先下载文章末尾的支持库,添加引用到你的工程中,并使用using字段进行引用。

下面是读取Excel文件的C#代码:

public static DataTable getexcel(String fileName)

{

DataTable dt = new DataTable();

IWorkbook workbook = null; //新建IWorkbook对象

FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);

if (fileName.IndexOf(".xlsx") > 0) // 2007版本

{

workbook = new XSSFWorkbook(fileStream); //xlsx数据读入workbook

}

else if (fileName.IndexOf(".xls") > 0) // 2003版本

{

workbook = new HSSFWorkbook(fileStream); //xls数据读入workbook

}

ISheet sheet = workbook.GetSheetAt(0); //获取第一个工作表

IRow row;// = sheet.GetRow(0); //新建当前工作表行数据

// MessageBox.Show(sheet.LastRowNum.ToString());

row = sheet.GetRow(0); //row读入头部

if (row != null)

{

for (int m = 0; m < row.LastCellNum; m++) //表头

{

string cellValue = row.GetCell(m).ToString(); //获取i行j列数据

Console.WriteLine(cellValue);

dt.Columns.Add(cellValue);

}

}

for (int i = 1; i <= sheet.LastRowNum; i++) //对工作表每一行

{

System.Data.DataRow dr = dt.NewRow();

row = sheet.GetRow(i); //row读入第i行数据

if (row != null)

{

for (int j = 0; j < row.LastCellNum; j++) //对工作表每一列

{

string cellValue = row.GetCell(j).ToString(); //获取i行j列数据

Console.WriteLine(cellValue);

dr[j] = cellValue;

}

}

dt.Rows.Add(dr);

}

Console.ReadLine();

fileStream.Close();

return dt;

}

提供Excel文件的路径,返回一个datatable对象。

下面是将datatable对象保存为Excel文件(测试.xls后缀没问题,貌似.xlsx后缀有点问题)

public static bool DataTableToExcel(String path, DataTable dt)

{

bool result = false;

IWorkbook workbook = null;

FileStream fs = null;

IRow row = null;

ISheet sheet = null;

ICell cell = null;

try

{

if (dt != null && dt.Rows.Count > 0)

{

workbook = new HSSFWorkbook();

sheet = workbook.CreateSheet("Sheet0");//创建一个名称为Sheet0的表

int rowCount = dt.Rows.Count;//行数

int columnCount = dt.Columns.Count;//列数

//设置列头

row = sheet.CreateRow(0);//excel第一行设为列头

for (int c = 0; c < columnCount; c++)

{

cell = row.CreateCell(c);

cell.SetCellValue(dt.Columns[c].ColumnName);

}

//设置每行每列的单元格,

for (int i = 0; i < rowCount; i++)

{

row = sheet.CreateRow(i + 1);

for (int j = 0; j < columnCount; j++)

{

cell = row.CreateCell(j);//excel第二行开始写入数据

cell.SetCellValue(dt.Rows[i][j].ToString());

}

}

using (fs = File.OpenWrite(path))

{

workbook.Write(fs);//向打开的这个xls文件中写入数据

result = true;

}

}

return result;

}

catch (Exception ex)

{

MessageBox.Show(ex.ToString());

if (fs != null)

{

fs.Close();

}

return false;

}

}

提供Excel保存路径及datatable数据对象,成功返回真,失败返回假。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值