[英]Populate .docx second table using OpenXml SDK WordprocessingDocument
[英]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.