繁体   English   中英

使用 OpenXml 填充表格

[英]Populate table with OpenXml

我想创建一个 Excel 模板文件,然后打开它并使用 OpenXml 用代码中的数据填充它。

是否可以在 Excel 中创建表格,然后从代码中按名称填充该表格?

我希望能够按名称引用该表。 理想情况下,这将允许我插入行,并且表格会变高以容纳这些行。 任何表格页眉或页脚都将保持不变。

我是 OpenXML 的新手。 如果这是可能的,有人可以指点我一些有关如何操作的文档吗?

是的,这可以通过 OpenXml 实现。 基本上,如果表格已经存在,您只需要写入所需的数据,找到表格,然后更新表格的Reference属性以反映表格现在涵盖的单元格。

一个Table存在于TableDefinitionPart ,可以从Worksheetpart找到它。 这听起来很复杂,但找到正确的表格还不错。

假设您在 A 列中有一个表格,除了标题之外没有其他数据,并且在这样的现有 Excel 文件中命名为MyTable

前

以下将向表中添加一些数据:

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filename, true))
{
    WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
    Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == "Sheet1").First();
    WorksheetPart worksheetPart = workbookPart.GetPartById(sheet.Id) as WorksheetPart;
    SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();

    //write some new data
    for (int i = 1; i < 11; i++)
    {
        //rowIndex takes into account the header (i.e. we're filling A2-A11)
        uint rowIndex = (uint)i + 1;
        Row row = new Row() { RowIndex = rowIndex };
        Cell cell = new Cell() { CellReference = $"A{rowIndex}", CellValue = new CellValue(i), DataType = CellValues.Number };
        row.Append(cell);

        sheetData.Append(row);
    }
    //find the table
    Table table = worksheetPart.TableDefinitionParts.FirstOrDefault(t => t.Table.Name == "MyTable")?.Table;
    //update the reference of the table (11 is 10 data rows and 1 header)
    table.Reference = "A1:A11";
}

给出这样的结果:

后

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM