【问题标题】:Compare 2 identical excel/ppt/csv files in nodejs比较 nodejs 中的 2 个相同的 excel/ppt/csv 文件
【发布时间】:2024-01-24 11:02:02
【问题描述】:

我有一个要求,我想比较 2 个相同的 excel/ppt/csv 文件,这些文件可能具有完全相同的内容,但可能在不同的时间点创建。

我只想使用任何 nodejs 包以任何可能的方式比较文件内容。

但我无法弄清楚如何通过流比较甚至缓冲区比较以更简单的方式完成它也无济于事。

我做了更多的研究,但没有太大的成功,我只是想知道如何在进行比较时忽略某些东西,例如时间戳和任何其他元数据,而只考虑匹配的内容。

我已经尝试过 stream-compare、stream-equal、file-compare、buff1.equals(buff2) 和其他几个,但其中九个似乎满足了我的要求。

但我没有在网上找到任何符合我要求的节点包。

关于如何实现它的任何见解或建议?

在此先感谢您的任何帮助。

【问题讨论】:

  • 搜索计算文档散列值的包(例如 sha256)并比较两个文档。
  • @Illia Popov,我不确定这是否真的有帮助,因为我相信在散列时它也会考虑文件创建/修改日期和内容。尽管我考虑过这种方法,但由于我过去在散列方面的经验,我没有尝试这种方法,原因是我在上面的评论中提到的。无论如何,我会试一试。感谢您的回复??????
  • 如果您引用文件系统元数据(文件创建/更新时间),那么它不会存储在内容流中,您最好使用散列。如果元数据存储在文件本身(公司/作者...)中,那么我认为没有一种简单的方法可以比较它们。我想到的一件事是将 doc 转换为通用格式(例如打印为 pdf)并匹配结果。 pandoc.org 可能对这种情况有用。

标签: node.js file stream comparison


【解决方案1】:

搜索计算文档哈希的包,例如crypto,计算 2 个文档的哈希 (sha256) 并比较它们。如果哈希匹配,则文档内容将相同(仍然存在哈希冲突的可能性,但这取决于您使用的哈希算法,sha256 会让您确信文档是相同的)。查看此线程以获取更多详细信息:Obtaining the hash of a file using the stream capabilities of crypto module (ie: without hash.update and hash.digest)

【讨论】:

  • Popopv,这对我正在查看的解决方案没有帮助。我按照建议尝试了 Crypto 模块,但它仍然为文件提供了不同的哈希值并且比较失败。
  • 即使复制文件,哈希值也不同?如果哈希不同,则内容不同,如何认为它们相同?如果您将 2 个文件附加到您的问题中,这将非常有帮助,以便我们更好地理解问题。
  • 我想我自己找到了解决方案,方法是使用我自己的自定义逻辑并使用另一个名为 dir-compare 的节点包,它解决了 pptx、excel 的用例,但对于 pdf,我采取了稍微不同的方法我自己的自定义事物并再次使用 dir-compare。一旦我完全确定修复,我将尝试发布解决方案。感谢您迄今为止的支持?
  • 我检查了包裹,很高兴它对您有所帮助。不幸的是,我不太了解您试图解决的问题,所以不知道为什么 Dir-compare 有效和散列 - 不要。请要求在您的帖子中提供文件或复制说明。
  • 嗨@Fenixil,测试或重现的场景非常简单,您可以尝试创建两个 excel 文件并尝试在单个或多个工作表中添加相同的内容 n 尝试对内容和您的哈希值进行散列get 应该相似,以确保 excel 文件具有相同的内容,但哈希值不一样。虽然在我的情况下,excel表会有更多的表,并且图像也作为它们的一部分嵌入,当我比较时,哈希似乎不同,尽管内容是相同的。通常在我的情况下,两张纸是在不同的时间点创建的。
最近更新 更多