簡體   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