Excel Found Unreadable Content - Recover Truncates

时间:2017-10-03 19:57:25

标签: c# excel epplus

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

" Excel在' [filenameHere.xlsx]'中找到了不可读的内容。你想恢复这个工作簿的内容吗?如果您信任此工作簿的来源,请单击是"

当我这样做时,它会返回另一个信息框,说明:

" Excel能够通过修复或删除不可读的内容来打开文件。 修复记录:来自/xl/sharedString.xml部分的字符串属性(字符串)"它提供了一个指向日志文件的链接:

"

  

error178480_01.xmlErrors   在文件中检测到   ' C:[filenamehere] .xlsx'修复记录:字符串   来自/xl/sharedStrings.xml部分的属性   (字符串)的   "   我正在向该领域提取大约3,000条记录,但是当我运行代码并且信息被截断时,只显示大约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"));

1 个答案:

答案 0 :(得分:2)

这里的问题在于Excel每个单元格的字符数限制为32,767个字符。在返回3000个数字时(如果它们与“samplenumber0000”或17个字符的长度相同),您将能够返回每个单元格大约1700个左右的记录。通过将其分成单独的单元格,您可以通过将结果分割以适应字符限制来修复它。这是我如何使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"));

作为数据卫生的一般规则,我建议将这些类型的结果拆分到他们自己的附加工作簿中,如果你要撤回这个数量的结果,那么你应该利用excels更多原始行限制(1,048,576),并将这些结果分开以获得更好的可读性。