如何编写脚本来比较Excel 2013的电子表格?

16

我想将Excel 2013的“查询”插件中的新功能——表格比较函数,加入到VBA脚本中。

计划编写一个宏来自动比较两个预定义名称的电子表格,并将所有差异导出为新的电子表格。

直到现在,还没有成功。

以下是我迄今为止尝试过的:

  1. 通常,要学习如何自动化一些Excel功能,我会使用记录宏。
  2. 如果失败了,我会查看可添加引用的列表,看看是否漏掉了什么明显的东西。

这两种方法在这种情况下都失败了。当我录制宏时,没有任何代码与“表格比较”有关(只有像选择单元格之类的外围内容)。而可添加的引用中没有任何一个类似于“表格比较”的东西。

那么,我该如何从VBA脚本中编写Excel 2013的“表格比较”功能呢?


2
+1 很棒的问题。我会在周末回家并获取 xl13 的访问权限后查看它。 - brettdj
1
由于它是一个COM插件,所以方法调用将可用,因此如果一切失败,您可以使用Visual Studio拆开dll以查看它公开的方法,然后像处理FileSystemObject一样从vba自动化它。如果失败了,那么我所读到的关于Excel插件的所有内容都不可能在正确的XML转换下进行复制。 - James Snell
这是我也用来进行自动化的两种方法。你遇到了什么实际问题?录制宏时代码没有出现?代码出现了但太复杂?在引用中找不到COM添加项? - Nick.McDermaid
@ElectricLlama 感谢您的迅速回复 - 我已经更新了问题并回答了您的问题。 - 410 gone
电子表格比较和链接失效。这是一篇旧文章,但如果您有一组固定的参数,编写起来不会花费太长时间。 - Reverend_Dude
@Reverend_Dude 谢谢,链接已修复。不幸的是,没有固定的参数集。 - 410 gone
3个回答

3
我为自动化.NET应用程序中的电子表格比较工具开了一个类似问题,但我还没有找到除了从命令行执行之外的其他方法。
您可以从VBA插件中执行此操作。您只需要定位可执行文件SPREADSHEETCOMPARE.EXE(通常在C:\ Program Files(x86)\ Microsoft Office \ Office15 \ DCF中),并在命令行中使用指令文件作为输入参数来执行它。
这个指令文件必须是一个ASCII文件,其中包含要比较的两个Excel文件路径,分别写在不同的行中。

我使用指令文件调用SPREADSHEETCOMPARE.EXE,将其指向两个存在差异的Excel文件,但没有输出文件。它在哪里存储任何发现的差异的输出??? - David Pesetsky

1
  1. Create a runCompare.cmd file:

    REM Execute from command line spreadsheetcompare.exe 
    REM 
    cd C:\Program Files (x86)\Microsoft Office 2013\Office15\DCF
    spreadsheetcompare.exe  C:\reportNames.txt
    
  2. In C:\reportNames.txt, save in the same line the .xlsx files you wish to compare:

    C:\fileA.xlsx C:\fileB.xlsx
    
  3. Execute runCompare.cmd.


1
直到我将文件名放在两行上,我才能使其正常工作。 - circlepi314
我使用指令文件调用SPREADSHEETCOMPARE.EXE,并让其比较了两个存在差异的Excel文件,但是它没有生成输出文件。请问它将发现的任何差异存储在哪里呢? - David Pesetsky

1

你做不到。

VBA在这种情况下不包括插件。

电子表格比较是一个第三方插件,被微软吞并了。

如果你需要脚本化的比较,你可以在网上找到那些为每个单元格、每行等进行比较的工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接