不需要Office用C#来读写NPOI的Excel表单文件

在过去的两天里,我一直在研究一个故障修复系统,在这个系统中,我需要使用表格进行统计和记录信息。我的第一反应是构建MySQL,它安全可靠,不能被其他人改变。然而…电脑相对较旧,不能携带,我想使用sqlite,一个轻量级数据库。出于各种原因,我放弃了sqlite,最终选择了Excel,因为它简单、快速且不够安全。

有许多方法可以操作电子表格。微软还提供了C#可以调用的办公组件。如果对方的计算机没有配备ofice,那将是尴尬和无用的。然而,代码狗今天谈论的方法不需要ce组件支持。

本文所需的支持库将在文章末尾共享。看最后!

首先看看功能效果:

首先在文章末尾下载支持库,添加对项目的引用,并使用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文件的路径并返回数据表对象。

下面是将数据表对象保存为一个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保存路径和数据表数据对象,如果成功返回true,如果失败返回false  
支持库下载地址:
链接: https://pan.baidu.com/s/12kKzhpMm2BWklQ7G12ubYw 提取码: 56h4

转载请注明出处:不需要Office用C#来读写NPOI的Excel表单文件
本文链接:https://www.axdzc.com/blog/cexcel


					    					            

评论0

请先

1.即日起暂时取消网站QQ登录,之前用QQ登录的会员请联系客服绑定邮箱或改为密码登录。 2.交流社区已上线,会员如需交流请移动至交流社区发帖。
没有账号? 忘记密码?