目录
概述:NPOI 是一个功能强大的第三方库,支持 .xls 和 .xlsx 格式,且完全开源。NPOI 可以在任何平台上运行,无需安装 Excel。
优点:跨平台,支持 .xls 和 .xlsx 格式,性能较好。
缺点:与原生 Excel 功能兼容性较低,格式化和高级功能支持相对有限。
1. 安装 NPOI
2. 使用 NPOI 创建新 Excel 文件
以下代码演示了如何使用 NPOI 创建一个新的 Excel 文件,并向其中写入 DataTable 数据。
using System.Data;
using System.IO;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel; // 对于 .xlsx 文件
using NPOI.HSSF.UserModel; // 对于 .xls 文件
public void CreateNewExcel(string filePath, DataTable dataTable)
{
IWorkbook workbook;
if (filePath.EndsWith(".xlsx"))
workbook = new XSSFWorkbook(); // 创建 .xlsx 文件
else
workbook = new HSSFWorkbook(); // 创建 .xls 文件
var sheet = workbook.CreateSheet("Sheet1");
// 写入表头
var headerRow = sheet.CreateRow(0);
for (int i = 0; i < dataTable.Columns.Count; i++)
{
headerRow.CreateCell(i).SetCellValue(dataTable.Columns[i].ColumnName);
}
// 写入数据
for (int i = 0; i < dataTable.Rows.Count; i++)
{
var dataRow = sheet.CreateRow(i + 1);
for (int j = 0; j < dataTable.Columns.Count; j++)
{
dataRow.CreateCell(j).SetCellValue(dataTable.Rows[i][j].ToString());
}
}
// 保存文件
using (var stream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
workbook.Write(stream);
}
}
3. 设置列宽和行高
1. 设置列宽
public void SetColumnWidth(IWorkbook workbook, int sheetIndex, int columnIndex)
{
var sheet = workbook.GetSheetAt(sheetIndex);
// 设置列宽(单位是 1/256 字符宽度)
sheet.SetColumnWidth(columnIndex, 20 * 256); // 设置第 1 列宽度为 20
}
2. 设置行高
public void SetColumnRowHeight(IWorkbook workbook, int sheetIndex, int rowIndex)
{
var sheet = workbook.GetSheetAt(sheetIndex);
// 设置行高(单位是点数)
var row = sheet.GetRow(rowIndex) ?? sheet.CreateRow(rowIndex);
row.HeightInPoints = 25; // 设置行高为 25 点
}
3. 同时设置列宽和行高
public void SetColumnWidthAndRowHeight(IWorkbook workbook, int sheetIndex, int columnIndex, int rowIndex)
{
var sheet = workbook.GetSheetAt(sheetIndex);
// 设置列宽(单位是 1/256 字符宽度)
sheet.SetColumnWidth(columnIndex, 20 * 256); // 设置第 1 列宽度为 20
// 设置行高(单位是点数)
var row = sheet.GetRow(rowIndex) ?? sheet.CreateRow(rowIndex);
row.HeightInPoints = 25; // 设置行高为 25 点
}