使用NPOI可以在没有安装Office或者相应环境的机器上对Excel文档进行读写。其下载地址为:http://npoi.codeplex.com/releases
一、读取Excel文件:
// 定义要读取的Excel文件地址 string excel = @"C:\test.xls"; // 定义要写入的数据表 DataTable dataTable = new DataTable(); // 创建Excel文件流 FileStream fileStream = new FileStream(excel, FileMode.Open, FileAccess.Read); // 通过Excel文件流创建NPOI的Excel操作对象 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(fileStream); // 关闭Excel文件流 fileStream.Close(); // 获取Excel工作表 ISheet sheet = hssfWorkbook.GetSheetAt(0); // 获取Excel工作表的行枚举对象 IEnumerator rows = sheet.GetRowEnumerator(); // 是否存在第一行 if (rows.MoveNext()) { // 获取第一行 HSSFRow hssfRow = (HSSFRow)rows.Current; // 遍历行数据设置数据表列名 for (int j = 0, length = hssfRow.LastCellNum; j < length; j++) { // 获取单元格 ICell cell = hssfRow.GetCell(j); if (cell != null) { // 设置数据表列名 dataTable.Columns.Add(cell.ToString()); } } // 循环获取行数据 while (rows.MoveNext()) { // 获取当前行 hssfRow = (HSSFRow)rows.Current; // 创建数据表行 DataRow dataRow = dataTable.NewRow(); // 遍历行数据设置数据表行数据 for (int i = 0, length = hssfRow.LastCellNum; i < length; i++) { // 获取单元格 ICell cell = hssfRow.GetCell(i); if (cell != null) { // 设置数据表行数据 dataRow[i] = cell.ToString(); } } // 添加数据行到数据表中 dataTable.Rows.Add(dataRow); } } // 关闭NPOI的Excel操作对象 hssfWorkbook.Close();
二、写入Excel文件:
// 定义要读取的数据表 DataTable dataTable = new DataTable(); // 定义要写入的Excel文件地址 string excel = @"C:\test.xls"; // 创建NPOI的Excel操作对象 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(); // 根据数据表名创建Excel工作表 ISheet sheet = hssfWorkbook.CreateSheet(dataTable.TableName); // 创建工作表第一行 IRow row = sheet.CreateRow(0); // 遍历数据表列名写入工作表第一行 for (int i = 0, length = dataTable.Columns.Count; i < length; i++) { // 创建工作表单元格并写入列名 row.CreateCell(i).SetCellValue(dataTable.Columns[i].ColumnName); } // 遍历数据表行数据写入工作表 for (int i = 0, iLength = dataTable.Rows.Count; i < iLength; i++) { //创建工作表数据行 IRow row2 = sheet.CreateRow(i + 1); // 遍历行数据写入工作表 for (int j = 0, jLength = dataTable.Columns.Count; j < jLength; j++) { // 获取数据 object value = dataTable.Rows[i][j]; // 创建单元格 ICell cell = row2.CreateCell(j); // 设置单元格数据 if (value == null) { cell.SetCellValue(""); } else { cell.SetCellValue(value.ToString()); } } } // 创建Excel文件流 FileStream fileStream = new FileStream(excel, FileMode.Create, FileAccess.Write); // 将Excel数据写入文件流 hssfWorkbook.Write(fileStream); // 将文件流数据写入到文件中 fileStream.Flush(); // 关闭Excel文件流 fileStream.Close(); // 关闭NPOI的Excel操作对象 hssfWorkbook.Close();
更多信息请参阅:NPOI – Home