excel - 查找 Excel 文件损坏的原因

标签 excel apache-poi

我有一个使用 Apache POI 将内容下载到 xls 文件的功能。大多数情况下它都有效。但是在一个特定的数据库上,生成的文件已损坏并且无法在 Excel 中打开。我收到消息“我们发现 'DownloadFoo.xls' 中的某些内容存在问题。您希望我们尽可能多地恢复吗?如果您信任此工作簿的来源,请单击是。” .单击"is"会导致删除所有格式、数据验证等。另一方面,如果我在 Open Office Calc 中打开文件并保存它,就可以了,以后可以在 Excel 中打开。 (想要使用这些文件的人不允许下载 Open Office Calc,因此这不是可接受的解决方法。)

我尝试缩小范围以查看导致问题的数据,但似乎每当下载 10 个或更多项目时就会发生这种情况,无论它们是哪些项目。 (在其他数据库上,下载 100+ 就可以了)。排除某些列会有所帮助,但它们看起来完全无害(并且几乎与其他很好的列相同),所以这仍然没有让我深入了解它。

有什么技术可以用来找出 Excel 在损坏的电子表格中存在哪些问题?

我无法进行重大更改,例如将其下载到 xlsx,因为此功能将在不久的将来被完全不同的东西所取代,因此我只想专注于手头的问题。

最佳答案

事实证明,该问题的解决方案是更频繁地重置数据验证列表。我的电子表格中的很多单元格都有数据验证。当数据验证列表较长时,它们将存储在隐藏的工作表中。如果多个单元格需要相同的验证,我会尝试让它们引用相同的列表,以免在隐藏表上写出太多内容。然而,当太多单元格引用同一个列表时,Excel 显然不喜欢它——据我所知,这并不违反规则,但无论如何它都不喜欢它。当我将其更改为每 5 个项目重写验证列表时,它开始工作。

这个数据库不同的原因是这些项目的子项目数量异常多,因此它们占据了很多行,即使看起来下载的东西并不多。一些问题列只是进行了真假验证,而不是使用隐藏表上的列表,所以我不知道那是什么,但无论如何重置验证列表都有帮助。

这并不能真正回答我的问题,因为我从未设法从 Excel 中获得任何有关问题所在的信息,或者使用特定技术,这只是一系列巧合的发现。无论如何,我把它放在这里,以防其他人有类似的问题。此外,让我走上正轨的事情是在仔细检查它对 10 多个项目(它没有)没有做任何不同以回应 Andrew Morton 的评论时找到一条旧评论,所以感谢 Andrew!

关于excel - 查找 Excel 文件损坏的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51848887/

相关文章:

c# - 如何在 Excel VBA 中使用 c# 类?

excel - else if 语句默认为最后一个条件 vba

excel - 如何在 EPPlus 中设置 "PrintTitleRows"?

c - 在 linux 中通过 C 访问 excel 表

java - 从 Excel 导入空日期

java - 从 Excel 嵌入式对象到 XML 中的 Base64 字符串

java - 如何加快 apache POI 中列的自动调整大小?

excel - 计算筛选工作表中的可见行数

java - 从 ArrayList 插入项目符号列表 Apache POI XWPF

java - 如何使用 Java 中的 Apache POI 将元数据写入 Excel 工作簿