如何解决使用OpenXml创建后,Excel无法加载表
我正在使用OpenXML SDK动态创建excel文件。我在创建表格时遇到了麻烦。 我用来创建表格的代码:
InsertCellInWorksheet("A",5,"passed");
InsertCellInWorksheet("B","failed");
InsertCellInWorksheet("C","skipped");
InsertCellInWorksheet("D","total");
InsertCellInWorksheet("A",6,"240");
InsertCellInWorksheet("B","241");
InsertCellInWorksheet("C","242");
InsertCellInWorksheet("D","243");
var tableParts = new TableParts() {Count = 1U};
var tablePart = new TablePart() {Id = "rId2"};
tableParts.Append(tablePart);
_worksheetPart.Worksheet.Append(tableParts);
var table = new Table()
{
Reference = "5A:6D",TotalsRowShown = false,Name = "Table2",DisplayName = "Table2",Id = 2U
};
var tableColumns = new TableColumns {Count = 4U};
var col1 = new TableColumn {Id = 1U,Name = "passed"};
var col2 = new TableColumn {Id = 2U,Name = "failed"};
var col3 = new TableColumn {Id = 3U,Name = "skipped"};
var col4 = new TableColumn {Id = 4U,Name = "total"};
var autoFilter = new AutoFilter() {Reference = "5A:6D"};
tableColumns.Append(col1);
tableColumns.Append(col2);
tableColumns.Append(col3);
tableColumns.Append(col4);
table.Append(autoFilter);
table.Append(tableColumns);
var resultTableDefinitionPart=_worksheetPart.AddNewPart<TableDefinitionPart>("rId2");
resultTableDefinitionPart.Table = table;
但是当我打开excel文件时,无法加载该表,使用excel修复后,我得到以下报告: 删除的部分:/xl/tables/table1.xml发生XML错误的部分。 (表)加载错误。第1行,第388列。
我用来创建单元格的方法如下:
private Cell InsertCellInWorksheet(string columnName,uint rowIndex,string cellValue)
{
var worksheet = _worksheetPart.Worksheet;
var sheetData = worksheet.GetFirstChild<SheetData>();
var cellReference = columnName + rowIndex;
// If the worksheet does not contain a row with the specified row index,insert one.
Row row;
if (sheetData.Elements<Row>().Count(r => r.RowIndex == rowIndex) != 0)
{
row = sheetData.Elements<Row>().First(r => r.RowIndex == rowIndex);
}
else
{
for (var i = 1U; i < rowIndex; i++)
{
if (sheetData.Elements<Row>().Count(r => r.RowIndex == i) == 0)
{
sheetData.AppendChild(new Row {RowIndex = i});
}
}
row = new Row() {RowIndex = rowIndex};
sheetData.AppendChild(row);
}
// If there is not a cell with the specified column name,insert one.
if (row.Elements<Cell>().Count(c => c.CellReference.Value == columnName + rowIndex) > 0)
{
var insertCellInWorksheet = row.Elements<Cell>().First(c => c.CellReference.Value == cellReference);
insertCellInWorksheet.CellValue = new CellValue(cellValue);
insertCellInWorksheet.DataType = new EnumValue<CellValues>(CellValues.String);
return insertCellInWorksheet;
}
// Cells must be in sequential order according to CellReference. Determine where to insert the new cell.
var refCell = row.Elements<Cell>().Where(cell => cell.CellReference.Value.Length == cellReference.Length)
.FirstOrDefault(cell =>
string.Compare(cell.CellReference.Value,cellReference,StringComparison.OrdinalIgnoreCase) > 0);
var newCell = new Cell() { CellReference = cellReference,CellValue = new CellValue(cellValue.ToString()),DataType = new EnumValue<CellValues>(CellValues.String)};
row.InsertBefore(newCell,refCell);
//row.Append(newCell);
worksheet.Save();
return newCell;
}
能否请您告诉我我做错了什么或如何正确地将表格添加到spreedsheet文档中?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。