Excel发现不可读的内容 – 恢复截断

我用EPPLus在Visual Studio 2017中构buildExcel报表,我的一个要求是将所有与特定ID链接的数字附加到单个字段,但是当我尝试时出现以下错误:

“Excel在”[filenameHere.xlsx]“中发现了不可读的内容。是否要恢复此工作簿的内容?如果您信任此工作簿的源,请单击”

当我这样做时,它返回另一个信息框,指出:

“Excel能够通过修复或删除不可读的内容来打开文件。修复logging:从/xl/sharedString.xml部分(string)的string属性”,它提供了一个日志文件的链接,其内容如下:

error178480_01.xml在文件'C:[filenamehere] .xlsx'中检测到错误'Repaired Records:来自/xl/sharedStrings.xml部分的string属性(string)“我将大约3000条logging放入字段,但只有大约1800运行代码,信息被截断,这里是一个例子:

StringBuilder groupString = new StringBuilder(); for (int i = 0; i <= 3000;i++) { groupString.Append("sampleNumber "+i.ToString()+","); } ExcelPackage exclPck = new ExcelPackage(); ExcelWorksheet exclWs = exclPck.Workbook.Worksheets.Add("example"); exclWs.Cells["A2"].Value= groupString.ToString(); exclPck.SaveAs(new System.IO.FileInfo("C:\\filenamehere.xlsx")); 

这里的问题在于,Excel每个单元的字符数限制为32,767个字符。 在返回3000个数字(如果它们的长度与“samplenumber0000”或17个字符相同),那么每个单元格可以返回大约1700个左右的logging。 通过将其分成单独的单元格,您可以通过分割结果来适应字符限制。 这里是我如何使Excel的行为的一个例子:

 ExcelPackage exclPck = new ExcelPackage(); ExcelWorksheet exclWs = exclPck.Workbook.Worksheets.Add("example"); StringBuilder groupString = new StringBuilder(); StringBuilder groupString2 = new StringBuilder(); for (int i = 0; i <= 3000;i++) { if (groupString.Length <= 31740) { groupString.Append("sampleNumber" + i.ToString() + ","); } else { groupString2.Append("sampleNumber" + i.ToString() + ","); } } exclWs.Cells["A2"].Value= groupString.ToString(); exclWs.Cells["A3"].Value = groupString2.ToString(); exclPck.SaveAs(new System.IO.FileInfo("filenameHere.xlsx")); 

作为一个数据卫生的一般规则,我build议将这些types的结果分成他们自己附加的工作簿,并在另一列中添加上述关联的ID,如果您要将这些结果拉回来,则应该使用excel更宽容总行数限制(1,048,576),并将这些结果分开以提高可读性。