本文共 3241 字,大约阅读时间需要 10 分钟。
在ASP.NET/C#开发中操作Excel已经成为开发者的常见需求之一。然而,选择合适的工具对于提高开发效率至关重要。NPOI(Apache POI的开源版本)作为一个强大的工具,能够在没有安装微软Office的情况下,轻松读取并写入 Office 97-2003格式的文件,包括Excel、Word和PowerPoint文件。
NPOI构建在POI 3.x版本之上,支持从Excel、Word等文件中提取数据,且无需依赖Office环境。对于需要处理大量Excel文件的开发者来说,NPOI是一个理想的选择。
首先,访问NPOI的官方网站 http://npoi.codeplex.com/,下载适用于你项目的NPOI版本(支持.NET 2.0和.NET 4.0的DLL文件)。将下载的DLL文件添加到你的项目中,确保在代码中可以使用到。
如果你需要将数据以Excel格式导出到客户端,可以按照以下步骤操作:
using (MemoryStream ms = new MemoryStream()) { HSSFWorkbook book = new HSSFWorkbook(); ISheet sheet = book.CreateSheet("test_01"); IRow row = sheet.CreateRow(0); row.CreateCell(0).SetCellValue("第一列第一行"); // 继续添加更多行和单元格 book.Write(ms); Response.AddHeader("Content-Disposition", $"attachment; filename={DateTime.Now:yyyyMMddHHmmssfff}.xls"); Response.BinaryWrite(ms.ToArray()); book = null; ms.Dispose(); } 如果需要从Excel文件中读取数据到DataTable中,可以按照以下步骤操作:
DataTable ImportExcelFile(string filePath) { DataTable dt = new DataTable(); try { using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { HSSFWorkbook hssfworkbook = new HSSFWorkbook(file); } } catch (Exception e) { throw new Exception("导入Excel文件失败:" + e.Message); } ISheet sheet = hssfworkbook.GetSheetAt(0); IEnumerator rows = sheet.GetRowEnumerator(); // 确定列数 for (int j = 0; j < sheet.GetRow(0).LastCellNum; j++) { dt.Columns.Add((char)('A' + j).ToString()); } // 读取数据 while (rows.MoveNext()) { HSSFRow row = (HSSFRow)rows.Current; DataRow dr = dt.NewRow(); for (int i = 0; i < row.LastCellNum; i++) { Cell cell = row.GetCell(i); dr[i] = cell == null ? null : cell.ToString(); } dt.Rows.Add(dr); } return dt; } 如果你需要将DataTable中的数据以Excel格式保存到文件中,可以按照以下步骤操作:
public static void WriteExcel(DataTable dt, string filePath) { if (string.IsNullOrEmpty(filePath) || dt == null || dt.Rows.Count == 0) { return; } HSSFWorkbook book = new HSSFWorkbook(); ISheet sheet = book.CreateSheet(dt.TableName); IRow headerRow = sheet.CreateRow(0); for (int i = 0; i < dt.Columns.Count; i++) { headerRow.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName); } for (int i = 0; i < dt.Rows.Count; i++) { IRow row = sheet.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { row.CreateCell(j).SetCellValue(dt.Rows[i][j] != null ? dt.Rows[i][j].ToString() : string.Empty); } } // 将文件写入 using (MemoryStream ms = new MemoryStream()) { book.Write(ms); using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) { byte[] data = ms.ToArray(); fs.Write(data, 0, data.Length); fs.Flush(); } book = null; } } 通过以上方法,你可以轻松地在ASP.NET/C#项目中使用NPOI来读取和写入Excel文件。NPOI的优势在于无需安装Office环境,支持多种文件格式,且操作简单易懂。如果你觉得这篇文章对你有帮助,请不要忘记分享给需要的朋友或同事。
转载地址:http://qtcfk.baihongyu.com/