プラグイン紹介
WinMerge で Excel、Word、PowerPoint のファイルを比較するためのプラグインを作成しました。
WinMerge にも「CompareMSExcelFiles.sct」「CompareMSWordFiles.sct」「CompareMSPowerPointFiles.sct」が付属していますが、今回作成したものは、ファイルの読み取りに hishida 様の xdoc2txt.exe を使用しています。
S.Kohno 様の xdocdiff WinMerge Plugin、来栖光明 様の xdocdiffPlugin64 を元に、スクリプトレットに移植してみました。
元は出力されるテキストが Shift_JIS だったのを、UTF-8 で出力されるように修正しています。
ライセンスは WinMerge と同じくGPL2です。
不具合に対処してみた経緯(2020/08/31)
問題の内容:
- ネットワーク上のExcelファイルを比較すると、「ファイルに書き込みできません」というエラーが出たり出なかったりする。
- 問題の位置でメッセージボックスを出すと、エラーが出なくなる。
対処:
- Excelの内容を吐き出す先のファイルとして、空のファイルを生成しておいてから先に進むようにした。
ファイルの書き込み・読み出しのタイミングによってエラーが起きるようなので、Sleep を入れられればよかったのですが、スクリプトレットで WScript オブジェクトが使用できず、Sleep する方法が不明でした。
今のところエラーメッセージなしで動作しているので、これで様子を見ようと思います。
使い方
- xdoc2txt.exe は、WinMerge本体(WinMergeU.exe)と同じフォルダに配置してください。
- 下記のソースを、xdocdiffU.sct の名前でローカルに保存します。
- WinMerge をインストールしたフォルダの MergePlugins フォルダに xdocdiffU.sct を配置してください。
- WinMerge のメニューから「プラグイン」-「プラグインの設定」を実行すると、xdocdiffU.sct が列挙されているはずです。
- amb_xdocdiffplugin.dll(xdocdiffPlugin64 の本体)をすでにご利用の方は、amb_xdocdiffplugin.dllのチェックを外してください。
- xdocdiffU.sct の設定オプションはありません。
#ソース
xdocdiffU.sct
<scriptlet>
<implements type="Automation" id="dispatcher">
<property name="PluginEvent">
<get/>
</property>
<property name="PluginDescription">
<get/>
</property>
<property name="PluginFileFilters">
<get/>
</property>
<property name="PluginIsAutomatic">
<get/>
</property>
<method name="UnpackFile"/>
<method name="PackFile"/>
<method name="ShowSettingsDialog"/>
</implements>
<script language="VBS">
'/////////////////////////////////////////////////////////////////////////////
' This is a plugin for WinMerge.
' Copyright (C) 2020 stonee
'
' Original:
' xdocdiff WinMerge Plugin http://freemind.s57.xrea.com/xdocdiffPlugin/
' xdocdiffPlugin64 http://crus.mydns.jp/xdocdiffPlugin64/
'
' This program is free software; you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation; either version 2 of the License, or
' (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.
'
' You should have received a copy of the GNU General Public License
' along with this program; if not, write to the Free Software
' Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
'
Option Explicit
Dim fso: Set fso = CreateObject("Scripting.FileSystemObject")
Dim wsh: Set wsh = CreateObject("WScript.Shell")
Function get_PluginEvent()
get_PluginEvent = "FILE_PACK_UNPACK"
End Function
Function get_PluginDescription()
get_PluginDescription = "Display the text content of MS Word, Excel, PowerPoint and pdf files. (via xdoc2txt)"
End Function
Function get_PluginFileFilters()
get_PluginFileFilters = "\.sxw;\.sxc;\.sxi;\.sxd;\.odt;\.ods;\.odp;\.odg;\.docx;\.docm;\.xlsx;\.xlsm;\.pptx;\.pptm;\.doc;\.xls;\.ppt;\.rtf;\.jaw;\.jtw;\.jbw;\.juw;\.jfw;\.jvw;\.jtd;\.jtt;\.oas;\.oa2;\.oa3;\.bun;\.wj2;\.wj3;\.wk3;\.wk4;\.123;\.wri;\.pdf;\.mht;\.eml$"
End Function
Function get_PluginIsAutomatic()
get_PluginIsAutomatic = True
End Function
Function UnpackFile(fileSrc, fileDst, pbChanged, pSubcode)
Dim objFile: Set objFile = fso.CreateTextFile(fileDst)
objFile.WriteLine ""
objFile.Close
Set objFile = Nothing
Dim cmd: cmd = "cmd /c xdoc2txt.exe -i -8 """ & fileSrc & """ > """ & fileDst & """"
wsh.run cmd, 0, True
pbChanged = True
pSubcode = 0
UnpackFile = True
End Function
Function PackFile(fileSrc, fileDst, pbChanged, pSubcode)
PackFile = False
End Function
Function ShowSettingsDialog()
MsgBox "No options."
End Function
</script>
</scriptlet>