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


168

ソースコードリポジトリには多数のスプレッドシート(​​xls)があります。これらは通常、gnumericまたはopenoffice.orgで編集され、主にdbUnitを使用した単体テスト用のデータベースを作成するために使用されます。私が知っているxlsファイルでdiffを実行する簡単な方法はありません。これにより、マージが非常に面倒でエラーが発生しやすくなります。

スプレッドシートをxmlに変換して通常のdiffを実行しようとしましたが、それが最後の手段であるように本当に感じています。

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


4
タグunit-testingとdbunitがここで誤って適用されていると思います。問題は、特定のファイル形式のファイル比較に関するものであり、単体テストとは何の関係もありません。
Hamish Smith

1
ない答え(それはExcelを必要と&商用製品である)が、GooBinghooによってここにもたらした人々のために- formulasoft.com/excel-compare.html私に適しています。
CADブローク2014

1
このPythonスクリプトを使用して、チェックインするExcelとgitを比較します。:私は、Pythonに(Perlのから移植された)このGOコード移植github.com/tokuhirom/git-xlsx-textconv#see-also それはあなたが使用することを可能にするgit diffgitk
nmz787


簡単な方法は、両方のスプレッドシートのデータをCSV /テキストとしてエクスポートし、通常のdiffを実行することです(優先するエディターまたはdiffファイルを使用)
PPC

回答:


109

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


2
@KimStacks yesは、すべてのxls、xlsx、odsで機能します。また、いずれかのタイプを他のタイプと比較することもできます(例:xls v / s xlsx)。
na_ka_na 2014年

1
優れたツールですが、完全に有効な一部のxlsファイルに対して、「Diff failed:Failed to read as excel file:」と表示されます。(他のすべての観点から見ると、はるかに貧しい)代替案を探している人のために:github.com/toobaz/xlrd_diffを
ピエトロバッティストン

2
@PietroBattiston plsがgithubでチケットをログに記録し、それを確認します。
na_ka_na

@na_ka_naこのツールを作成していただき、ありがとうございます。
jgpawletko 2016年

111

外部ツールなしですばやく簡単に、比較する2つのシートが類似している限り、うまく機能します。

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

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


6
これはセルごとの比較ではありませんか?つまり、左側の上部に1つの追加の行がある場合、残りのすべての行(およびセル)が異なります。そのような場合、それはあまり役に立ちません。
Hammad Khan

1
@Thecrocodilehunter:上部の行をいつでも削除して、残りを比較できます。違いがはるかに複雑な場合は、もちろん別のツールが必要です。これは、Excelでスプレッドシートを変更したと言われ、誤ってフィールドを編集したと心配する場合など、すばやく1回限りの比較に役立ちます。
iconoclast 2012年

1
私はこれが好きだった。Xを実行する代わりに、「1」を実行し、最初の行と列としてSUMを使用することもできます。最初のフィールドにsomを追加すると、異なるフィールドの数がすぐにわかります。
Konerak 2013

5
数式を少し変更したので、正確な違いを調べる必要はありませんでした。= IF(Sheet1!A1 <> Sheet2!A1、CONCATENATE( "Sheet 1 ="、Sheet1!A1、 "Sheet 2 ="、Sheet2!A1)、 "")
Martyn

1
入力するだけです=Sheet1!A1=Sheet2!A1。これはTRUEまたはFALSEを出力します。その後、条件付き書式設定などを行うことができ=countif(A1:B2, FALSE)ます。
user2023861 2014

12

私は過去にExcelワークブックの比較を数多く行ってきました。私のテクニックは、多くのワークシートを含むワークブックで非常にうまく機能しますが、セルの内容やセルのフォーマットやマクロなどではなく、比較するだけです。また、いくつかのコーディングが必要ですが、多数の大きなファイルを繰り返し比較する必要がある場合は、それだけの価値があります。仕組みは次のとおりです。

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

B)Windowsシェル拡張を追加して、Excelファイルを右クリックしたときにステップAから新しいJavaプログラムを実行します。これにより、このプログラムの実行が非常に簡単になります。これを行うにはGoogleに必要ですが、*。regファイルを書くのと同じくらい簡単です。

C)BeyondCompareを取得します。区切られたデータを素敵な表に表示して比較するための非常にクールな機能があります。スクリーンショットを参照してください。。

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


12

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

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

ここに画像の説明を入力してください

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


残念ながら、それは2MB未満のファイルに対してのみ機能します。とにかく、それは他の誰かのために働くことができました。
MikeVelazco 2017

10

xdocdiff WinMerge Pluginを見つけました。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 Lotus 123
  • .wri Windows3.1書き込み
  • .pdf Adob​​e PDF
  • .mht Webアーカイブ
  • .eml OutlookExpressからエクスポートされたファイル

よろしく、アンドレス


1
残念ながら、解凍したファイルへの変更を保存することはできないため、マージには役立ちません。それは無料です。
Sogger 2012年

6

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


+1は適切に機能しますが、Office 2007の違いを際立たせません。古いバージョンでは+1を行うと思います。視覚的に比較するにはまだ非常に良いです。
Hammad Khan

2
そう、強調表示はないので、唯一の利点は同期スクロールです。
Sogger、2012年

5

TortoiseSVNを使用して、subversionでコミットと更新を行っていますか?差分ツールがありますが、Excelファイルの比較はまだユーザーフレンドリーではありません。私の環境(Win XP、Office 2007)では、2つのExcelファイルを開いて並べて比較します。

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


4

MS Officeの新しいバージョンには、スプレッドシート比較が付属しています。これは、GUIでかなり素晴らしい差分を実行します。ほとんどの種類の変更を検出します。


この回答はおそらくコマンドラインベースのdiffマージでのOPの状況には役立ちませんが、このスプレッドシート比較ツールは私の目的にぴったりでした(OpenXMLオートメーション出力とExcel COMオートメーション出力の違いを確認する)。
ErrCode

注:私はこのツールを使って自動化を検討しようとしましたが、それは私のための作業(単にクラッシュ保持具)しませんでした:stackoverflow.com/a/35905262/7270462
ERRCODE

4

ライブラリのdaff(データdiffの略)があり、テーブルの比較、diffの要約の作成、およびそのような要約のパッチファイルとしての使用に役立ちます。

Haxeで記述されているため、主要言語でコンパイルできます。

このライブラリを利用して、JavaScriptでExcel Diffツールを作成しました。数字と小さな文字列でうまく機能しますが、出力は長い文字列(たとえば、小さな文字の変更を伴う長い文)には理想的ではありません。


3

ファイルをcsvまたは他のテキスト形式にエクスポートしてから、それらを比較することを提案している応答がいくつかあります。私はそれが具体的に言及されているのを見たことはありませんが、Beyond Compare 3には、サポートする追加のファイル形式がいくつかあります。追加のファイル形式を参照してください。Microsoft Excelファイル形式の1つを使用すると、別の形式のオプションにエクスポートすることなく、2つのExcelファイルを簡単に比較できます。


2

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


これは、Excelファイル(およびその他のファイル)でgitを頻繁に使用する環境で一般的な方法として採用する必要がある優れたソリューションです。これは間違いなく "git"に対応しており(ただしdiffは人間が読める形式ではありません)、 "最新の" Excel(現在は2019年)を超える追加のツールを必要としません。また、「双方向」です。つまり、他のユーザーはExcelスプレッドシートを.slk(SYLK)形式で保存し、必要に応じてすべての適切な形式などでExcelで開くことができます。
D.ウッズ

2

Altova DiffDogを使用する

diffdogのXML diffモードとグリッドビューを使用して、読みやすい表形式で違いを確認します。テキストの比較は、どんな複雑なスプレッドシートにとってもはるかに困難です。このツールを使用すると、さまざまな状況で少なくとも2つの方法を実行できます。

  1. .xmlとして保存

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

  2. .xlsxとして保存

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

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

diffdogには、さまざまな比較機能があります。私は、Excel文書の比較に関して私がより好む別のツールを使用していないという理由だけで、XML差分モードをリストしました。


1

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


1

SVNのxdocdiffプラグイン


xdocdiffは見栄えは良いですが、TortioseSVNが必要なようです
neu242

xdocdiffにはWinMergeプラグインもあります。どちらも舞台裏でxdoc2txtを使用します
Sogger

1

Javaを使用している場合は、simple-excelを試すことができます。

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)

私たちはそのツールを書いたことを認めるべきです(チェックされた回答が独自に転がしたように)。


2
回答を投稿していただきありがとうございます。セルフプロモーションに関するFAQをよくお読みください。また、独自のサイト/製品にリンクするたびに免責事項を投稿する必要があることにも注意してください。
Andrew Barber

1

TortoiseSVNをお持ちの場合は、 CTRL、Windowsエクスプローラーで2つのファイルをクリックして選択し、TortoiseSVN-> Diffを右クリックします。

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


ただし、これはExcelのXLS形式などのバイナリファイルでは特にうまく機能しませ
Charles Wood

1
@CharlesWood-実際に特にうまくいきます。TortoiseはExcel自体を使用して差分を提供し、さまざまなセルを赤で強調表示します。私は試したことはありませんが、Wordの.docファイルと.docxファイルでも同じように動作するはずです(diffビューアとしてWordを使用)。
Chris B

わあ!鉱山はそれをしません。それは新機能ですか、それともプラグインをインストールしましたか?
Charles Wood

:-D TortoiseSVN 1.7.12を入手しましたが、そのまま使用できます。ヘルプファイルには、これをサポートしていると記載されています-tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-diff.html。スクリプトを使用して、私のマシンではC:\ Program Files \ TortoiseSVN \ Diff-Scripts \ diff-xls.jsであるファイルを比較します。スクリプトを無効にしているマシンにグループポリシーがある可能性はありますか?
Chris B

1

私はあなたのような問題を抱えていたので、私を助けるための小さなツールを書くことにしました。ExcelDiff_Toolsを確認してください。これにはいくつかの重要なポイントがあります。

  • xls、xlsx、xlsmをサポートします。
  • 数式セル付き。数式と値の両方を比較します。
  • 変更、削除、追加、変更されていない状態で、UIを標準の差分テキストビューアーのように見せようとしています。たとえば、以下の画像をご覧ください。 ここに画像の説明を入力してください


0

Diff Docはあなたが探しているものかもしれません。

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

2
Diff DocはWindows専用のクローズドソースであり、実際には私のニーズに適合しません。
neu242 2008

0

ツールは知りませんが、2つの独自のソリューションが思い浮かびます。どちらもExcelが必要です。

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

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

いずれの場合も、スプレッドシートが構造的に「近い」状態でないと、どちらの場合も多くの「ノイズ」が発生します。


Excel 2002以降では、xlsxファイルを処理するよりも簡単な「XMLスプレッドシート」形式で保存することもできます。
サムワーウィック

0

cvsに変換してからバージョン管理システムにアップロードしてから、高度なバージョン管理のdiffツールで比較します。perforceを使用したとき、それはすばらしいdiffツールを備えていましたが、その名前を忘れていました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.