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

我有一个.xlsx文件,它已经有一些数据。 我想在I1单元格中input一些数据。 在这里输入图像说明

更新:我试过这个:

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对象,您也正在创build一个新的Row对象。 然后给它一个RowIndex ,它也已经存在了,这意味着你最终会得到一个损坏的文件(你不能有两个具有相同索引的行)。

你需要find现有的 Row并添加新的Cell ,而不是创build一个全新的Row 。 最简单的方法是在sheetData上调用GetFirstChild<Row>

另外,我也不会像使用公式一样将CellValue写入Cell 。 在这种情况下,Excel使用该Value来防止在加载表单时重新计算公式。 在你的例子中,虽然你的价值是错误的。 完全忽略这个值可能是保证正确性的最简单方法,因为Excel会在表单加载时计算公式。

这导致以下代码:

 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); }