c# - 使用 NPOI 将 Excel 单元格区域格式化为表格
问题描述
我正在使用 NPOI 来操作 Excel(.xlsx) 文件数据和格式。我想知道是否有办法将单元格范围格式化为表格。
// something like.
ITable table = worksheet.FormatAsTable("A1:C4");
在互联网上做了一些研究,但还没有运气。任何帮助将非常感激!
解决方案
[2021/05/28 更新]:谢谢提醒。发现不设置ctTable的id、name和displayName会出现这个错误Removed Part: /xl/tables/table1.xml part with XML error. (Table) Load error. Line 1, column 247.
(下面的示例代码已修复。)
根据@Gian Paolo 提供的评论和链接,使用 NPOI 实现“格式为表格”的 C# 方法如下:
安装包 NPOI -版本 2.5.3
// NPOI dependencies
using NPOI.OpenXmlFormats.Spreadsheet;
using NPOI.SS.UserModel;
using NPOI.SS.Util;
using NPOI.XSSF.UserModel;
IWorkbook workbook = new XSSFWorkbook();
XSSFSheet worksheet = workbook.CreateSheet("Grades") as XSSFSheet;
InsertTestData(worksheet);
// Format Cell Range As Table
XSSFTable xssfTable = worksheet.CreateTable();
CT_Table ctTable = xssfTable.GetCTTable();
AreaReference myDataRange = new AreaReference(new CellReference(0, 0), new CellReference(3, 2));
ctTable.@ref = myDataRange.FormatAsString();
ctTable.id = 1;
ctTable.name = "Table1";
ctTable.displayName = "Table1";
ctTable.tableStyleInfo = new CT_TableStyleInfo();
ctTable.tableStyleInfo.name = "TableStyleMedium2"; // TableStyleMedium2 is one of XSSFBuiltinTableStyle
ctTable.tableStyleInfo.showRowStripes = true;
ctTable.tableColumns = new CT_TableColumns();
ctTable.tableColumns.tableColumn = new List<CT_TableColumn>();
ctTable.tableColumns.tableColumn.Add(new CT_TableColumn() { id = 1, name = "ID" });
ctTable.tableColumns.tableColumn.Add(new CT_TableColumn() { id = 2, name = "Name" });
ctTable.tableColumns.tableColumn.Add(new CT_TableColumn() { id = 3, name = "Score" });
using (FileStream file = new FileStream(@"test.xlsx", FileMode.Create))
{
workbook.Write(file);
}
// Function to Populate Test Data
private void InsertTestData(XSSFSheet worksheet)
{
worksheet.CreateRow(0);
worksheet.GetRow(0).CreateCell(0).SetCellValue("ID");
worksheet.GetRow(0).CreateCell(1).SetCellValue("Name");
worksheet.GetRow(0).CreateCell(2).SetCellValue("Score");
worksheet.CreateRow(1);
worksheet.GetRow(1).CreateCell(0).SetCellValue(1);
worksheet.GetRow(1).CreateCell(1).SetCellValue("John");
worksheet.GetRow(1).CreateCell(2).SetCellValue(82);
worksheet.CreateRow(2);
worksheet.GetRow(2).CreateCell(0).SetCellValue(2);
worksheet.GetRow(2).CreateCell(1).SetCellValue("Sam");
worksheet.GetRow(2).CreateCell(2).SetCellValue(90);
worksheet.CreateRow(3);
worksheet.GetRow(3).CreateCell(0).SetCellValue(3);
worksheet.GetRow(3).CreateCell(1).SetCellValue("Amy");
worksheet.GetRow(3).CreateCell(2).SetCellValue(88);
}
结果:
推荐阅读
- python - 使用 groupby 对多个数据框列进行上采样?
- mysql - 具有方案 t1[eid,organizer,startdate],t2[event,user,reviewdate] 的两个表
- ruby-on-rails - 在 Rails 4 中,如何禁用视图中的按钮并确保无法单击它?
- xml - XML:如何根据条件选择第一个元素
- bash - shell脚本中的多个curl命令
- python - 构建工作区时缺少变量是 CMAKE_py_LINK_EXECUTABLE
- r - Rgee 中等效的 ee.Image.not() 是什么
- ckeditor - 配置ckeditor后无法删除插件
- ag-grid-angular - Angular 11 ag-grid如何在单击一行时抑制扩展行
- c++ - Poco 密文未从 openssl 终端解密