我有一个预定义的Excel工作簿,其中所有工作表都已设置好,我需要向其写入内容。我已经成功地写入单元格。
问题是在特定的工作表中,我需要添加三列。在下面的代码中,首先我获取工作表,然后继续添加列。这段代码运行良好,也就是说,没有抛出异常,但当我尝试打开Excel文件时,会弹出一个错误提示,指出某些内容无法读取,并且此特定工作表的所有内容都被清除。
我知道问题出在此操作上,因为如果我注释掉那些添加列的行,工作簿将仅带有我从代码中编写的所有单元格值正常打开。
以下是相关代码,为测试目的,我尝试添加3列:
问题是在特定的工作表中,我需要添加三列。在下面的代码中,首先我获取工作表,然后继续添加列。这段代码运行良好,也就是说,没有抛出异常,但当我尝试打开Excel文件时,会弹出一个错误提示,指出某些内容无法读取,并且此特定工作表的所有内容都被清除。
我知道问题出在此操作上,因为如果我注释掉那些添加列的行,工作簿将仅带有我从代码中编写的所有单元格值正常打开。
以下是相关代码,为测试目的,我尝试添加3列:
using (SpreadsheetDocument document = SpreadsheetDocument.Open(outputPath, true)){
Sheet sheet2 = document.WorkbookPart.Workbook.Descendants<Sheet>().Single( s => s.Name == "Miscellaneous Credit" );
Worksheet workSheet2 = ( (WorksheetPart)document.WorkbookPart.GetPartById( sheet2.Id ) ).Worksheet;
Columns cs = new Columns();
for ( var y = 1; y <= 3; y++ ) {
Column c = new Column()
{
Min = (UInt32Value)1U,
Max = (UInt32Value)1U,
Width = 44.33203125D,
CustomWidth = true
};
cs.Append( c );
}
workSheet2.Append( cs );
}
编辑:根据Chris关于列概念的解释
using (SpreadsheetDocument document = SpreadsheetDocument.Open(outputPath, true)){
Sheet sheet2 = document.WorkbookPart.Workbook.Descendants<Sheet>().Single( s => s.Name == "Miscellaneous Credit" );
Worksheet workSheet2 = ( (WorksheetPart)document.WorkbookPart.GetPartById( sheet2.Id ) ).Worksheet;
// Check if the column collection exists
Columns cs = workSheet2.Elements<Columns>().FirstOrDefault();
if ( ( cs == null ) ) {
// If Columns appended to worksheet after sheetdata Excel will throw an error.
SheetData sd = workSheet2.Elements<SheetData>().FirstOrDefault();
if ( ( sd != null ) ) {
cs = workSheet2.InsertBefore( new Columns(), sd );
}
else {
cs = new Columns();
workSheet2.Append( cs );
}
}
//create a column object to define the width of columns 1 to 3
Column c = new Column
{
Min = (UInt32Value)1U,
Max = (UInt32Value)3U,
Width = 44.33203125,
CustomWidth = true
};
cs.Append( c );
}