基于以下文档示例:https://github.com/ClosedXML/ClosedXML/wiki/Using-Tables
在 C# 应用程序中,我使用 ClosedXML 创建包含新内容的工作簿。部分内容是我想将其设置为表格样式的一系列单元格。但是,表的第一个“列”实际上跨越多个单元格列。在不应用任何表格格式的情况下,结果类似于以下简化的代码片段。
在我的 C# 应用程序中,填充该表的单元格后,我抓取这些单元格的范围并从中创建一个
IXLTable
。
IXLWorkbook book = ...;
IXLWorksheet sheet = ...;
//------------------------------
// Populate cells with milestone data.
...
//------------------------------
// Create a table.
IXLRange range = sheet.Range( "A1:D3");
IXLTable table = range.CreateTable();
//------------------------------
// Done.
book.SaveAs( "foo.xlsx" );
只要 C# 应用程序编译、执行并生成工作簿文件,就可以了。
但是,当我在 Microsoft Excel 中打开该工作簿时,Excel 判定存在错误并提示我是否修复该工作簿。 Excel 通过删除工作簿中的任何
<table>
来修复工作簿。
相反,如果表格的第一个“列”仅跨越一个单元格列,则创建的表格没有错误并且可以在 Excel 中加载。结果就像下面的简化片段。
因此,根本问题是表格包含合并单元格。
有什么方法可以实现我想要的,其中一个表“列”由跨越多个单元格列的合并单元格组成?
IXLRange range = sheet.Range( "A1:D3");
range.Range(startRow, startColumn, startRow, endColumn).Merge();
我有一个现有的 Excel 文件,其中包含现有选项卡和格式表,但是当我写入数据时,格式表没有更新新范围。
在将新数据写入工作表之前我用这段代码解决了这个问题。
var table = ws.Tables.FirstOrDefault();
if (table != null)
{
// Resize the table to include the new data range
table.InsertRowsBelow(DataItemsToWriteList.Count - 1); //-1 Because of the Header
}