如何使用 open xml sdk 在 .xlsx 文件的现有行中添加新单元格?

How to add a new cell in an existing row in .xlsx file using open xml sdk?

我有一个 .xlsx 文件,其中已经有一些数据。 我想在 I1 单元格上输入一些数据。

更新: 我试过这个:

WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();                
SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();

Row row1 = new Row()
{
  RowIndex = (UInt32Value)1U
};

Cell cell = new Cell() { CellReference = "I1" };
CellFormula cellformula = new CellFormula();
cellformula.Text = "IF(A2 = A1,1,0)";
CellValue cellValue = new CellValue();
cellValue.Text = "0";
cell.Append(cellformula);
cell.Append(cellValue);

row1.Append(cell);

sheetData.Append(row1);

但它不起作用。

请提供示例代码和您的答案。

您正在创建一个新的 Row 对象,尽管您的文档中已经存在一个对象。然后你给它一个 RowIndex 它也已经存在这意味着你最终会得到一个损坏的文件(你不能有两行具有相同的索引)。

您需要找到 现有的 Row 并将新的 Cell 添加到其中,而不是创建一个全新的 Row。最简单的方法是在 sheetData.

上调用 GetFirstChild<Row>

顺便说一句,我也不会在使用公式时将 CellValue 写到 Cell。在那种情况下,Excel 使用 Value 来防止它在 sheet 加载时必须重新计算公式。在您的示例中,尽管您的价值是错误的。完全省略该值可能是保证正确性的最简单方法,因为 Excel 将在 sheet 加载时计算公式。

这导致以下代码:

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filename, true))
{
    WorkbookPart workBookPart = spreadsheetDocument.WorkbookPart;

    WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
    WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
    SheetData sheetData = worksheetPart.Worksheet.Elements<SheetData>().First();

    //find the first row in the sheet data
    Row row1 = sheetData.GetFirstChild<Row>();

    //create a new cell
    Cell cell = new Cell() { CellReference = "I1" };
    CellFormula cellformula = new CellFormula();
    cellformula.Text = "IF(A2 = A1,1,0)";
    cell.Append(cellformula);

    //append the cell to the row
    row1.Append(cell);
}