git diff を使用して 2 つのスプレッドシートの読み取り可能な diff を作成するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/114698

質問

ソース コード リポジトリには、大量のスプレッドシート (xls) があります。これらは通常、gnumeric または openoffice.org で編集され、主に単体テスト用のデータベースにデータを取り込むために使用されます。 データベースユニット. 。私が知っている限り、xls ファイルの差分を簡単に実行する方法はなく、マージが非常に面倒でエラーが発生しやすくなります。

スプレッドシートを XML に変換して通常の差分を実行しようとしましたが、これは本当に最後の手段であるべきだと感じました。

との差分(およびマージ)を実行したいと思います git テキストファイルの場合と同じように。これをどうすればいいでしょうか。発行するとき git diff?

役に立ちましたか?

解決

私たちの会社でもまったく同じ問題に直面しました。私たちのテストでは Excel ワークブックを出力しました。バイナリ差分はオプションではありませんでした。そこで、独自のシンプルなコマンド ライン ツールを公開しました。をチェックしてください ExcelCompare プロジェクト. 。実際、これによりテストを非常にうまく自動化できます。パッチ/機能リクエストは大歓迎です!

他のヒント

外部ツールを使用せずにすばやく簡単に実行でき、比較している 2 つのシートが類似している限り正常に機能します。

  • 3 番目のスプレッドシートを作成する
  • タイプ =if(Sheet1!A1 <> Sheet2!A1, "X", "") 左上のセル (または同等のもの:実際のセルをクリックすると、参照が数式に自動的に挿入されます)
  • Ctrl+C (コピー)、 Ctrl+A (すべて選択)、 Ctrl+V (ペースト)してシートを埋めます。

シートが類似している場合、このスプレッドシートは X が含まれるいくつかのセルを除いて空になり、違いが強調表示されます。40% にズームを解除すると、何が違うのかがすぐにわかります。

私は過去に Excel ワークブックを何度も比較してきました。私の手法は、多数のワークシートを含むワークブックでは非常にうまく機能しますが、比較するのはセルの内容のみであり、セルの書式設定やマクロなどは比較しません。また、多少のコーディングが必要ですが、多数の大きなファイルを繰り返し比較する必要がある場合には、それだけの価値があります。仕組みは次のとおりです。

A) すべてのワークシートをステップ実行し、すべてのデータをタブ区切りファイルに保存する単純なダンプ プログラムを作成します。ワークシートごとに 1 つのファイルを作成します (ファイル名としてワークシート名を使用します。例:"MyWorksheet.tsv")、プログラムを実行するたびに、これらのファイル用の新しいフォルダーを作成します。Excel ファイル名に基づいてフォルダーに名前を付け、タイムスタンプを追加します。「20080922-065412-MyExcelFile」。というライブラリを使用してJavaでこれを行いました JExcelAPI. 。それは本当に簡単です。

B) Windows シェル拡張機能を追加して、Excel ファイルを右クリックしたときに手順 A の新しい Java プログラムを実行します。これにより、このプログラムの実行が非常に簡単になります。これを行う方法は Google で調べる必要がありますが、*.reg ファイルを作成するのと同じくらい簡単です。

C) 取得 比較を超えて. 。区切り文字で区切られたデータを素敵な表に表示して比較する非常に優れた機能があります。 スクリーンショットを参照.

D) これで、Excel ファイルを簡単に比較する準備が整いました。Excel ファイル 1 を右クリックし、ダンプ プログラムを実行します。ワークシートごとに 1 つのファイルを含むフォルダーが作成されます。Excel ファイル 2 を右クリックし、ダンプ プログラムを実行します。ワークシートごとに 1 つのファイルを含む 2 番目のフォルダーが作成されます。次に、BeyondCompare (BC) を使用してフォルダーを比較します。各ファイルはワークシートを表すため、ワークシートに違いがある場合、BC はそれを表示し、ドリルダウンしてファイル比較を行うことができます。BC では比較が優れたテーブル レイアウトで表示され、興味のない行や列を非表示にすることができます。

この無料のオンライン ツールを試すことができます - www.cloudyexcel.com/compare-excel/

行の追加、削除、変更などに関して、オンラインで優れた視覚的な出力を提供します。

enter image description here

さらに、何もインストールする必要はありません。

見つけた xdocdiff WinMerge プラグイン. 。WinMerge 用のプラグインです (両方とも オープンソース そして フリーウェア, 、VBA を作成したり、Excel を csv または xml に保存したりする必要はありません)。それはセルドのコンテンツに対してのみ機能します。

このプラグインは以下もサポートしています。

  • .rtf リッチ テキスト
  • .docx/.docm Microsoft WORD 2007(OOXML)
  • .xlsx/.xlsm Microsoft Excel 2007(OOXML)
  • .pptx/.pptm Microsoft PowerPoint 2007(OOXML)
  • .doc Microsoft WORD ver5.0/95/97/2000/XP/2003
  • .xls Microsoft Excel ver5.0/95/97/2000/XP/2003
  • .ppt Microsoft PowerPoint 97/2000/XP/2003
  • .sxw/.sxc/.sxi/.sxd OpenOffice.org
  • .odt/.ods/.odp/.odg ドキュメントを開く
  • .wj2/wj3/wk3/wk4/123 ロータス 123
  • .wri Windows3.1書き込み
  • .pdf Adob​​e PDF
  • .mht ウェブ アーカイブ
  • .eml OutlookExpress からエクスポートされたファイル

よろしく、アンドレス

うーん。Excel メニューから [ウィンドウ] -> [並べて比較] を選択します。

Subversion でコミットと更新を行うために TortoiseSVN を使用していますか?diff ツールはありますが、Excel ファイルの比較はまだ使いやすいものではありません。私の環境 (Win XP、Office 2007) では、並べて比較するために 2 つの Excel ファイルが開きます。

ドキュメントを右クリック > Tortoise SVN > ログの表示 > リビジョンを選択 > 右クリックして [作業コピーと比較] を選択します。

いくつかの回答で、ファイルを CSV またはその他のテキスト形式にエクスポートして比較することを提案していることは承知しています。具体的に言及されているのを見たことがありませんが、Beyond Compare 3 にはサポートされる追加のファイル形式が多数あります。見る 追加のファイル形式. 。Microsoft Excel ファイル形式のいずれかを使用すると、別の形式へのエクスポート オプションを経由せずに 2 つの Excel ファイルを簡単に比較できます。

MS Office の新しいバージョンには、 スプレッドシートの比較, これは GUI でかなり優れた diff を実行します。ほとんどの種類の変更を検出します。

図書館があります ダフ (data diff の略) は、テーブルの比較、差分の概要の作成、およびそのような概要をパッチ ファイルとして使用するのに役立ちます。

Haxe で書かれているため、主要な言語でコンパイルできます。

を作りました Excel 差分ツール このライブラリの助けを借りてJavaScriptで。数値や小さな文字列にはうまく機能しますが、出力は長い文字列には理想的ではありません(例:若干の文字変更を伴う長文)。

使用 アルトバ ディフドッグ

diffdog の XML diff モードとグリッド ビューを使用して、読みやすい表形式で相違点を確認します。テキストの差分処理は、複雑なスプレッドシートでは非常に困難です。このツールを使用すると、さまざまな状況下で少なくとも 2 つの方法が実行可能になります。

  1. .xml として保存

    単純な 1 シートのスプレッドシートの違いを検出するには、比較する Excel スプレッドシートを .xml 拡張子を付けた XML スプレッドシート 2003 として保存します。

  2. .xlsx として保存

    モジュール化されたドキュメント モデル内のほとんどのスプレッドシートの違いを検出するには、比較する Excel スプレッドシートを .xlsx 形式の Excel ワークブックとして保存します。diffdog で差分を行うファイルを開きます。ファイルが ZIP アーカイブであることが通知され、ディレクトリ比較のために開くかどうかを尋ねられます。ディレクトリ比較に同意すると、ドキュメントの論理部分をダブルクリックして差分を取得する(XML 差分モードを使用)という比較的簡単な作業になります。.xslx ドキュメントのほとんどの部分は XML 形式のデータです。グリッドビューは非常に便利です。個々のシートの差分を調べて、変更されたことがわかっている領域に焦点を当てて分析することは簡単です。

Excel では保存するたびに特定の属性名を微調整する傾向があるのは面倒ですが、diffdog の XML の差分機能には、特定の種類の違いをフィルタリングする機能が含まれています。たとえば、XML 形式の Excel スプレッドシートには次のものが含まれます。 row そして c 持っている要素 s 保存するたびに名前が変更される属性 (スタイル)。次のようなフィルターを設定します c:s コンテンツの変更のみを表示するのがはるかに簡単になります。

diffdog には多くの差分機能があります。XML の差分モードを列挙したのは、単に Excel ドキュメントの差分に関してこれより気に入ったツールを他に使ったことがないからです。

差分の実行が重要な場合は、SYLK ファイル形式を使用します。これはテキストベースの形式であるため、バイナリ形式よりも比較が簡単かつコンパクトになります。Excel、Gnumeric、OpenOffice.org とも互換性があるため、3 つのツールはすべてうまく連携できるはずです。SYLKのウィキペディア記事

openofficeマクロを見つけました ここ これは、2 つのファイルに対して openoffice のドキュメント比較機能を呼び出します。残念ながら、openoffice のスプレッドシートの比較は少し不安定なようです。「すべて拒否」ボタンを使用して文書に余分な列を挿入してしまいました。

SVN 用の xdocdiff プラグイン

Javaを使用している場合は、試してみてください シンプルエクセル.

Hamcrest マッチャーを使用してスプレッドシートを比較し、次のような出力を行います。

java.lang.AssertionError:
Expected: entire workbook to be equal
     but: cell at "C14" contained <"bananas"> expected <nothing>,
          cell at "C15" contained <"1,850,000 EUR"> expected <"1,850,000.00 EUR">,
          cell at "D16" contained <nothing> expected <"Tue Sep 04 06:30:00">
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)

私たちがそのツールを作成したことを認定する必要があります(チェックマークが付いた答えが独自にロールされたように)。

TortoiseSVN をお持ちの場合は、次のことができます。 CTRL Windows エクスプローラーで 2 つのファイルをクリックして選択し、右クリックして [TortoiseSVN]、[Diff] の順にクリックします。

これは、大規模なデータセットの小さな変更を探している場合に特に効果的です。

私もあなたと同じように問題を抱えているので、それを解決するための小さなツールを作成することにしました。チェックしてください ExcelDiff_ツール. 。これにはいくつかの重要なポイントがあります。

  • xls、xlsx、xlsmをサポートします。
  • 数式セル付き。式と値の両方を比較します。
  • 次のコマンドを使用して、UI を標準の差分テキスト ビューアのように見せようとします。変更、削除、追加、未変更のステータス。例として以下の画像をご覧ください。enter image description here

差分ドキュメント あなたが探しているものかもしれません。

  • MS Word (DOC、DOCX など)、Excel、PDF、リッチ テキスト (RTF)、テキスト、HTML、XML、PowerPoint、または Wordperfect のドキュメントを比較し、書式設定を保持します
  • 任意のドキュメント (ファイル) の任意の部分を選択し、同じまたは異なるドキュメント (ファイル) の任意の部分と比較します。

ツールについては知りませんが、思い浮かぶ解決策は 2 つあります。どちらも Excel が必要です。

  1. 2 つのワークブックの各ワークシート、行、列、セルをステップ実行して相違点を報告する VBA コードを作成できます。

  2. Excel 2007 を使用している場合は、ワークブックを Open-XML (*.xlsx) 形式で保存し、XML を抽出して差分を行うことができます。Open-XML ファイルは、本質的には .xml ファイルとマニフェストの単なる .zip ファイルです。

どちらの場合でも、スプレッドシートが最初から構造的に「緊密」でない場合、多くの「ノイズ」が発生することになります。

CVS に変換してからバージョン管理システムにアップロードし、高度なバージョン管理差分ツールで差分を取得します。perforce を使用していたときは、素晴らしい diff ツールがありましたが、その名前を忘れてしまいました。

私は、無料のオープンソース Git 拡張機能の共同作成者です。

https://github.com/ZoomerAnalytics/git-xltrail

これにより、回避策なしで Git があらゆる Excel ワークブック ファイル形式で動作できるようになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top