C# Npoi xls文件保存会损坏excel文件

C# Npoi xls文件保存会损坏excel文件,c#,excel,xls,excel-2003,npoi,C#,Excel,Xls,Excel 2003,Npoi,因此,我能够打开并挖掘xls(Excel 97-2003)文件。然而,问题是当我试图保存它时。保存并成功后,我会手动打开Excel文件,并得到一个错误,说明它无法打开Excel文件,并且该文件已损坏。无论我是否做出任何更改,这种情况都会发生 我仍然能够在程序中打开excel文件并读取数据 我使用的是NPOI2.2.1和2.3.0(我是通过Nuget安装的)。两个版本的结果相同 string excelLocation = settings.GetExcelDirectory() + week.E

因此,我能够打开并挖掘xls(Excel 97-2003)文件。然而,问题是当我试图保存它时。保存并成功后,我会手动打开Excel文件,并得到一个错误,说明它无法打开Excel文件,并且该文件已损坏。无论我是否做出任何更改,这种情况都会发生

我仍然能够在程序中打开excel文件并读取数据

我使用的是NPOI2.2.1和2.3.0(我是通过Nuget安装的)。两个版本的结果相同

string excelLocation = settings.GetExcelDirectory() + week.ExcelLocation;
HSSFWorkbook wbXLS;

// Try to open and read existing workbook
using (FileStream stream = new FileStream(excelLocation, FileMode.Open, FileAccess.Read))
{
    wbXLS = new HSSFWorkbook(stream);
}

ISheet sheet = wbXLS.GetSheet("Schedule");
using (FileStream stream = new FileStream(excelLocation, FileMode.Create, FileAccess.Write))
{
    wbXLS.Write(stream);
}
试试像这样的东西

     FileStream sw = File.Create(excelLocation);

     wbXLS.Write(sw);

     sw.Close();

是否有多行单元格内容(换行)?
我在第0行的列标题中遇到了这样的问题。 Excel通过将换行符替换为
\u x000a\u
(即
line1\u x000a\u line2
)来对换行符进行编码,NPOI不会这样做。
尝试使用nuget 2.3.0和xlsx文件,但对您的情况可能也有帮助

在保存之前,我通过更换换行符解决了(并验证了原因):

// Encode LineFeeds in column headers (row 0)
IRow rowColHeaders = sheet.GetRow(0);
foreach (ICell cell in rowColHeaders.Cells)
{
    string content = cell.StringCellValue;
    if (content.Contains("\n"))
        cell.SetCellValue(content.Replace("\n", "_x000a_"));
}

您的代码在我看来是正确的,它对我来说运行良好(当我打开文件时,Excel不会抱怨)。