如何使用 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);
}
我有一个 .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);
}