【发布时间】:2020-03-13 06:12:10
【问题描述】:
我正在尝试使用 C# openXML 插入 Excel 文件 (.xlsx) 单元格,
但是当我打开创建的 Excel 文件时,需要通过显示以下错误来修复它,
修复的记录:来自 /xl/worksheets/sheet1.xml 部分的单元格信息
这是我的代码。
public void InsertText(TestModelList data)
{
var date_time = DateTime.Now.ToString().Replace("/", "_").Replace(":", "_");
string OutputFileDirectory = "E:\\TEST";
string fileFullName = Path.Combine(OutputFileDirectory, "Output.xlsx");
if (File.Exists(fileFullName))
{
fileFullName = Path.Combine(OutputFileDirectory, "Output_" + date_time + ".xlsx");
}
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Create(fileFullName, SpreadsheetDocumentType.Workbook))
{
WorkbookPart wbp = spreadSheet.AddWorkbookPart();
WorksheetPart wsp = wbp.AddNewPart<WorksheetPart>();
Workbook wb = new Workbook();
Worksheet ws = new Worksheet();
SheetData sd = new SheetData();
InsertToCell(1, "C", "1C", sd);
ws.Append(sd);
wsp.Worksheet = ws;
wsp.Worksheet.Save();
Sheets sheets = new Sheets();
Sheet sheet = new Sheet()
{
Id = wbp.GetIdOfPart(wsp),
Name = "test",
SheetId = 1
};
sheets.Append(sheet);
wb.Append(sheets);
spreadSheet.WorkbookPart.Workbook = wb;
spreadSheet.WorkbookPart.Workbook.Save();
}
}
private void InsertToCell(uint rowIndex, string col, string value, SheetData sd)
{
var row = new Row() { RowIndex = rowIndex };
var cellReference = col + rowIndex;
Cell newCell = new Cell
{
StyleIndex = (UInt32Value)1U,
CellValue = new CellValue(value),
DataType = CellValues.SharedString,
CellReference = cellReference
};
row.InsertBefore(newCell, null);
sd.Append(row);
}
谁能帮我解决这个问题?
【问题讨论】:
-
选择开修有用吗?如果是,则将该结果保存为新文件名,然后关闭。在 Open XML sDK 生产力工具中打开原始文件。对修复的文件使用比较功能。检查用于从原始代码创建该代码的代码,并将其与您的代码正在执行的操作进行比较。这至少应该缩小问题所在。
-
您使用哪个版本的 Open XML SDK?
-
OpenXMl v2.10.1
-
@Ravihansa,好的,我问这个问题是因为 v2.10.0 存在可能导致此类错误消息的问题。现在,在更详细地查看了您的代码后,我发现了一些问题,并在下面的回答中提供了解决方案。