[[tipsやちょっとしたスクリプト]] >> ExcelTableCmp * 概要 [#c840c8cb] Excelの二つのブックを比較します。 テーブル内のデータを指定されたカラムをキーにして比較します。行やカラムの順番が入れ替わっていても対応するキーとカラム名によって対象のセルを決定して比較します。 GUIで相違をわかりやすく表示したりするものではなく、テスト等の一括処理などに使うコンソールアプリケーションです。 windows7 professionalおよびwindows8 上でのoffice2010と.NET Framework 4を対象に動作確認しています。 「Creative Commons 表示 2.1 日本」の元でライセンスまたはパブリックドメインとします。 #ref(tablecmp2.png) * 説明 [#ddab2da3] ** コマンドライン引数 [#j733093a] > foo1 sourceile.xls targetfile.xls 比較する二つのファイルをコマンド行引数としてしています。ここでは最初に指定した方法ソース、二つ目のファイルをターゲットと呼ぶことにします。 比較するデータは以下の書式です。左がソース、右がターゲットです。 #ref(tablecmp.png) :A|連続した非ブランクセルで比較対象のレコードがあることを示します。ソースの場合はそのレコードを無視する指示やそのレコードがターゲットに存在した場合に比較を失敗させる指示なども含みます。 :B|比較対象となる領域です。 :C|比較対象となるカラム方向の範囲と名前を示します。1つ以上が必要です。 :D|比較の対象を決定するためのカラムの扱いを示します。ソースだけに存在します。'K'はそのカラムがそのレコードを決めるキー項目であることをしめします。'C'は値として比較の対象となるセルです。 ** 終了値 [#y287865c] 比較した結果相違が見つからないときは終了コードは0です。 相違が見つかったときはそれ以外です。 * 配布 [#a9c22dc3] プログラムソースのダウンロードは以下のURLから。バイナリの配布はありません。 http://gqg.jp/files/Try1_24.zip $ gpg --fingerprint --print-md sha1 Try1_24.zip Try1_24.zip: 9F87 9A99 25C4 DF24 114F 6F57 D6E8 2EAF BBFF 26FD $ gpg --fingerprint --print-md md5 Try1_24.zip Try1_24.zip: 7C A0 09 F6 7E 0F 48 43 82 5F 19 31 BB 9D 0C 9B * おことわり [#l7584a6f] サンプルアプリレベルですのでドキュメントやソース中のコメントは不十分です。 例外のキャッチも不十分なので指定されたファイルが開けなかったときなどは.NET Frameworkのランタイムがだすダイアログが表示されたりします。 正しくは例外をキャッチしてエラーコードをもって終了すべきです。 Mainの1メソッドだけなのもちょっとしたチャレンジで、普段このような書き方のプログラムをしているわけではありません。 同じキーを持つレコードの重複やカラム名の重複などもチェックしていません。 * 類似ツール [#x155b3f1] "excel 比較 レコード キー"で検索したところ以下のようなソフトがあるようです。 :AiperDiffex(Excel比較ツール)|http://aiper.info/AiperDiffex/index.html :A5:SQL Mk-2|http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/ excelとの連携は[[単体・結合テストのデータベースエビデンスを簡単に作る:http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/tips/sql_evidence/]]に例があります。 :A5:SQL Mk-2|http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/ excelとの連携は[[単体・結合テストのデータベースエビデンスを簡単に作る:http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/tips/sql_evidence/]]や[[SQLの比較実行:http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/help2.6/SQLEditor/compareSql.html]]に例があります。