使用CarlosAg.ExcelXmlWriter组件向Excel指定行指定列写入文本时SheetCell无法定位的问题
某项目中要使用ExcelXmlWriter组件输出Excel文件,Excel格式模版文件通过
Excel的另存为XML Spreadsheet格式文件功能生成 。
为此编写了个公共方法如下:
// 向Excel中某个Sheet中某行某列写入文本值
public void WriteCellValue(Workbook workBook, string sheetName, int row, int column, string value)
{
if (workBook == null) return;
try
{
foreach (Worksheet workSheet in workBook.Worksheets)
{
if (workSheet.Name == sheetName)
{
WorksheetRow sheetRow = workSheet.Table.Rows[row - 1];
WorksheetCell sheetCell = sheetRow.Cells[column - 1];
sheetCell.Data.Text = value;
sheetCell.Data.Type = DataType.String;
break;
}
}
}
catch(Exception ex)
{
//
}
public void WriteCellValue(Workbook workBook, string sheetName, int row, int column, string value)
{
if (workBook == null) return;
try
{
foreach (Worksheet workSheet in workBook.Worksheets)
{
if (workSheet.Name == sheetName)
{
WorksheetRow sheetRow = workSheet.Table.Rows[row - 1];
WorksheetCell sheetCell = sheetRow.Cells[column - 1];
sheetCell.Data.Text = value;
sheetCell.Data.Type = DataType.String;
break;
}
}
}
catch(Exception ex)
{
//
}
}
实际使用中发现在语句
WorksheetCell sheetCell = sheetRow.Cells[column - 1];
出现索引过界错误。
经研究发现可能是为了缩小xml模版文件尺寸,如果文件中某Cell为空值的话,保存成XML文件的时候,
会从格式中删除此Cell的定义,所以造成了缺少Cell而过界的错误。
解决方法:
在Excel模版文件中需要写入值的Cell都必须预写入默认值。如:EmptyValue,这样保存为XML文件的时候,
就不会从格式文件中删除此Cell的定义了。