如何使用打开的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); }