我有一个.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);
但它没有用。
请提供示例代码和答案。
答案 0 :(得分:2)
您正在创建新的Row
对象,即使文档中已存在一个对象。然后你给它一个RowIndex
,它也已经存在,这意味着你最终会得到一个损坏的文件(你不能有两行具有相同的索引)。
您需要找到现有 Row
并将新的Cell
添加到其中,而不是创建全新的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);
}