【发布时间】:2015-09-01 23:01:57
【问题描述】:
我正在尝试使用 NPOI 将文件从 XLS 转换为 XLSX。由于我不知道显式转换,我编写了第一个实现,遍历行和单元格并从一个复制到另一个:
public string ConvertToXlsx(string xlsPath)
{
var oldWorkbook = new HSSFWorkbook(new FileStream(xlsPath, FileMode.Open));
var oldWorkSheet = oldWorkbook.GetSheetAt(0);
var newExcelPath = xlsPath.Replace("xls", "xlsx");
using (var fileStream = new FileStream(newExcelPath, FileMode.Create))
{
var newWorkBook = new XSSFWorkbook();
var newWorkSheet = new XSSFSheet();
newWorkBook.Add(newWorkSheet);
foreach (HSSFRow oldRow in oldWorkSheet)
{
var newRow = newWorkSheet.CreateRow(oldRow.RowNum);
for (int ii = oldRow.FirstCellNum; ii < oldRow.LastCellNum; ii++)
{
var newCell = newRow.CreateCell(ii);
newCell = oldRow.Cells[ii];
}
}
newWorkBook.Write(fileStream);
}
return newExcelPath;
}
然而,在线 var newCell = newRow.CreateCell(ii); NPOI 抛出 NullReferenceException 并带有以下堆栈跟踪:
at NPOI.XSSF.UserModel.XSSFCell..ctor(XSSFRow row, CT_Cell cell)
at NPOI.XSSF.UserModel.XSSFRow.CreateCell(Int32 columnIndex, CellType type)
at NPOI.XSSF.UserModel.XSSFRow.CreateCell(Int32 columnIndex)
at Ing2Ynab.Excel.IngExcelConverter.ConvertToXlsx(String xlsPath)
我不明白为什么会这样,因为 XSSFRow 应该负责创建传递给 XSSFCell 构造函数的 CT_Cell,从我在 NPOI 代码中可以读到的内容。
有没有其他人尝试过这样做和/或已修复它?
谢谢。
【问题讨论】: