所以我可以打开并浏览xls(Excel 97-2003)文件。但问题是当我尝试保存它时。保存后,它成功了,然后我去手动打开Excel文件并收到错误消息,说它无法打开Excel文件并且它已损坏。无论我是否进行任何更改,都会发生这种情况。
我仍然可以在程序中打开excel文件并读取数据。
我正在使用NPOI 2.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);
}
答案 0 :(得分:1)
您是否有多行单元格内容(换行符)?
我刚刚遇到第0行的列标题出现了这样的问题。
Excel通过将其替换为_x000a_
(即line1_x000a_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_"));
}
答案 1 :(得分:0)
尝试类似
的内容String bis = "good";
String cis ="good";
char[] ch = {'g','o','o','d'};
String temp="";
for (char c:ch){
temp=temp+c;
}
System.out.println(temp);
System.out.println(cis==bis); //true
System.out.println(bis==temp); //false