Bagaimana cara membuat diff dari dua spreadsheet yang dapat dibaca menggunakan git diff?

168

Kami memiliki banyak spreadsheet (xls) di repositori kode sumber kami. Ini biasanya diedit dengan gnumeric atau openoffice.org, dan sebagian besar digunakan untuk mengisi basis data untuk pengujian unit dengan dbUnit . Tidak ada cara mudah untuk melakukan diff pada file xls yang saya ketahui, dan ini membuat penggabungan yang sangat membosankan dan rawan kesalahan.

Saya sudah mencoba mengubah spreadsheet menjadi xml dan melakukan diff biasa, tetapi rasanya seperti itu harus menjadi pilihan terakhir.

Saya ingin melakukan pembedaan (dan penggabungan) dengan yang gitsaya lakukan dengan file teks. Bagaimana saya melakukan ini, misalnya saat menerbitkan git diff?

neu242
sumber
4
Saya pikir tag unit-testing dan dbunit tidak diterapkan dengan benar di sini. Pertanyaannya adalah tentang membandingkan file untuk format file tertentu dan tidak ada hubungannya dengan pengujian unit.
Hamish Smith
1
Bukan jawaban (ini membutuhkan Excel & adalah produk komersial) tetapi bagi orang-orang yang dibawa ke sini oleh GooBinghoo - formulasoft.com/excel-compare.html bekerja dengan baik untuk saya.
CAD cowok
1
Saya menggunakan skrip Python ini untuk membedakan Excel yang kami laporkan ke git. Saya porting kode GO ini (yang porting dari Perl) ke Python: github.com/tokuhirom/git-xlsx-textconv#see-also. Ini memungkinkan Anda untuk menggunakan git diffdangitk
nmz787
Cara mudah untuk pergi adalah dengan mengekspor data kedua spreadsheet sebagai CSV / teks dan melakukan diff reguler (dengan editor atau file diff pilihan Anda)
PPC

Jawaban:

109

Kami menghadapi masalah yang sama persis di perusahaan kami. Hasil tes kami unggul dalam buku kerja. Biner diff bukan pilihan. Jadi kami meluncurkan alat baris perintah sederhana kami sendiri. Lihat proyek ExcelCompare . Infact ini memungkinkan kita untuk mengotomatisasi pengujian kita dengan cukup baik. Permintaan tambalan / fitur cukup disambut!

na_ka_na
sumber
2
@ KimStacks ya bekerja untuk semua xls, xlsx, ods. Dan bahkan dapat membandingkan satu jenis dengan yang lain, misalnya xls v / s xlsx.
na_ka_na
1
Alat hebat ... tetapi dikatakan "Diff gagal: Gagal membaca sebagai file excel:" untuk beberapa file xls yang benar-benar valid. Untuk siapa pun yang mencari alternatif (jauh lebih miskin, dari semua sudut pandang lain): lihat github.com/toobaz/xlrd_diff
Pietro Battiston
2
@PietroBattiston, tolong login tiket di github dan saya akan melihatnya.
na_ka_na
@na_ka_na Terima kasih telah membuat alat ini!
jgpawletko
111

Cepat dan mudah tanpa alat eksternal, berfungsi dengan baik selama dua lembar yang Anda bandingkan serupa:

  • Buat spreadsheet ketiga
  • Ketik =if(Sheet1!A1 <> Sheet2!A1, "X", "")sel kiri atas (atau setara: klik pada sel yang sebenarnya untuk secara otomatis memasukkan referensi ke dalam rumus)
  • Ctrl+C(salin), Ctrl+A(pilih semua), Ctrl+V(tempel) untuk mengisi lembar.

Jika lembar serupa, spreadsheet ini akan kosong kecuali untuk beberapa sel dengan X di dalamnya, menyoroti perbedaan. Unzoom ke 40% untuk dengan cepat melihat apa yang berbeda.

Laurent
sumber
6
Bukankah ini perbandingan sel dengan sel? Maksud saya jika sisi kiri memiliki satu baris tambahan di atas, itu akan memberikan semua baris yang tersisa (dan sel) berbeda. Jika memang seperti itu, itu tidak terlalu berguna.
Hammad Khan
1
@Thecrocodilehunter: Anda selalu dapat menghapus baris itu di atas dan kemudian membandingkan sisanya. Jika perbedaannya jauh lebih kompleks, maka tentu saja Anda memerlukan alat yang berbeda. Ini berguna untuk perbandingan sekali saja, seperti ketika Excel mengatakan Anda mengubah spreadsheet dan Anda takut Anda tidak sengaja mengedit bidang.
iconoclast
1
Saya suka yang ini. Alih-alih melakukan X, Anda juga dapat melakukan "1", dan memiliki SUM sebagai baris & kolom pertama. Tambahkan beberapa pada bidang pertama dan Anda akan dengan cepat melihat berapa banyak bidang berbeda.
Konerak
5
Saya sedikit mengubah formula jadi saya tidak perlu melihat perbedaan yang sebenarnya. = JIKA (Sheet1! A1 <> Sheet2! A1, CONCATENATE ("Sheet 1 =", Sheet1! A1, "Sheet 2 =", Sheet2! A1), "")
Martyn
1
Anda cukup mengetik =Sheet1!A1=Sheet2!A1. Ini akan mencetak BENAR atau SALAH. Anda kemudian dapat melakukan pemformatan bersyarat atau =countif(A1:B2, FALSE)atau yang serupa.
user2023861
12

Saya telah melakukan banyak pembandingan buku kerja Excel di masa lalu. Teknik saya bekerja sangat baik untuk buku kerja dengan banyak lembar kerja, tetapi hanya membandingkan konten sel, tidak memformat sel, makro, dll. Juga, ada beberapa pengkodean yang terlibat tetapi ada baiknya jika Anda harus membandingkan banyak file besar berulang kali. Begini cara kerjanya:

A) Tulis program dump sederhana yang melangkah melalui semua lembar kerja dan menyimpan semua data ke file yang dipisahkan dengan tab. Buat satu file per lembar kerja (gunakan nama lembar kerja sebagai nama file, misalnya "MyWorksheet.tsv"), dan buat folder baru untuk file ini setiap kali Anda menjalankan program. Beri nama folder setelah nama file excel dan tambahkan stempel waktu, mis. "20080922-065412-MyExcelFile". Saya melakukan ini di Jawa menggunakan perpustakaan yang disebut JExcelAPI . Ini sangat mudah.

B) Tambahkan ekstensi shell Windows untuk menjalankan program Java baru Anda dari langkah A ketika mengklik kanan pada file Excel. Ini membuatnya sangat mudah untuk menjalankan program ini. Anda perlu Google cara melakukan ini, tetapi semudah menulis file * .reg.

C) Dapatkan BeyondCompare . Ini memiliki fitur yang sangat keren untuk membandingkan data yang dibatasi dengan menunjukkannya dalam tabel yang bagus, lihat tangkapan layar .

D) Anda sekarang siap untuk membandingkan file Excel dengan mudah. Klik kanan pada file Excel 1 dan jalankan program dump Anda. Ini akan membuat folder dengan satu file per lembar kerja. Klik kanan pada file Excel 2 dan jalankan program dump Anda. Ini akan membuat folder kedua dengan satu file per lembar kerja. Sekarang gunakan BeyondCompare (BC) untuk membandingkan folder. Setiap file mewakili lembar kerja, jadi jika ada perbedaan dalam lembar kerja BC akan menunjukkan ini dan Anda dapat menelusuri dan melakukan perbandingan file. BC akan menampilkan perbandingan dalam tata letak tabel yang bagus, dan Anda dapat menyembunyikan baris dan kolom yang tidak Anda minati.

thvo
sumber
12

Anda dapat mencoba alat online gratis ini - www.cloudyexcel.com/compare-excel/

Ini memberikan output visual yang bagus secara online, dalam hal baris ditambahkan, dihapus, diubah dll.

masukkan deskripsi gambar di sini

Plus Anda tidak perlu menginstal apa pun.

Shashank Singla
sumber
Sayangnya itu hanya berfungsi untuk file <2MB. Bagaimanapun, itu bisa bekerja untuk orang lain.
MikeVelazco
10

Saya telah menemukan Plugin xdocdiff WinMerge . Ini adalah plugin untuk WinMerge (baik OpenSource dan Freeware , Anda tidak perlu menulis VBA atau menyimpan excel ke csv atau xml). Ini berfungsi hanya untuk isi celd.

Plugin ini juga mendukung:

  • .rtf Teks Kaya
  • .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 Buka Dokumen
  • .wj2 / wj3 / wk3 / wk4 / 123 Lotus 123
  • .wri Windows3.1 Menulis
  • .pdf Adobe PDF
  • .mht Arsip Web
  • .eml File yang diekspor dari OutlookExpress

Salam, Andres

Andres
sumber
1
Sayangnya, ini tidak memungkinkan menyimpan perubahan pada file yang sudah dibuka, sehingga tidak berguna untuk menggabungkan. Ini gratis.
Sogger
6

Hmmm. Dari menu Excel pilih Window -> Bandingkan berdampingan?


sumber
+1 berfungsi dengan baik tetapi tidak menyoroti perbedaan di kantor 2007. Saya kira dalam versi yang lebih lama itu berfungsi. Masih sangat bagus untuk perbandingan visual.
Hammad Khan
2
ya, tidak ada penyorotan, jadi satu-satunya manfaat adalah bergulir secara sinkron.
Sogger
5

Apakah Anda menggunakan TortoiseSVN untuk melakukan komit dan pembaruan dalam subversi? Ini memiliki alat diff, namun membandingkan file Excel masih belum benar-benar user friendly Di lingkungan saya (Win XP, Office 2007), ini membuka dua file excel untuk perbandingan berdampingan.

Klik kanan dokumen> Tortoise SVN> Tampilkan Log> pilih revisi> klik kanan untuk "Bandingkan dengan copy pekerjaan".

Casper
sumber
4

Versi MS Office yang lebih baru hadir dengan Spreadsheet Compare , yang melakukan perbedaan cukup bagus dalam GUI. Mendeteksi sebagian besar jenis perubahan.

GREMLIN
sumber
Walaupun jawaban ini mungkin tidak akan membantu situasi OP dengan diffpenggabungan berbasis baris perintah , alat Spreadsheet Compare ini sempurna untuk tujuan saya (memeriksa perbedaan antara output otomatisasi OpenXML vs output otomatisasi Excel COM).
ErrCode
Catatan: Saya memang mencoba menyelidiki otomatisasi menggunakan alat ini, tetapi itu tidak berhasil bagi saya (alat terus mogok): stackoverflow.com/a/35905262/7270462
ErrCode
4

Ada perpustakaan daff (kependekan dari data diff) yang membantu dalam membandingkan tabel, menghasilkan ringkasan dari perbedaan mereka, dan menggunakan ringkasan seperti itu sebagai file tambalan.

Itu ditulis dalam bahasa Haxe, sehingga dapat dikompilasi dalam bahasa utama.

Saya telah membuat Alat Excel Diff dalam Javascript dengan bantuan perpustakaan ini. Ini berfungsi baik dengan angka & string kecil tetapi outputnya tidak ideal untuk string panjang (misalnya kalimat panjang dengan perubahan karakter minor).

shubhu
sumber
3

Saya tahu beberapa tanggapan menyarankan mengekspor file ke csv atau format teks lain, dan kemudian membandingkannya. Saya belum melihatnya disebutkan secara spesifik, tetapi Beyond Compare 3 memiliki sejumlah format file tambahan yang didukungnya. Lihat Format File Tambahan . Dengan menggunakan salah satu Format File Microsoft Excel Anda dapat dengan mudah membandingkan dua file Excel tanpa melalui ekspor ke opsi format lain.

mattsmith321
sumber
2

Saya akan menggunakan format file SYLK jika melakukan diff penting. Ini adalah format berbasis teks, yang seharusnya membuat perbandingan lebih mudah dan lebih kompak daripada format biner. Ini kompatibel dengan Excel, Gnumeric, dan OpenOffice.org juga, jadi ketiga alat ini harus dapat bekerja dengan baik bersama. Artikel Wikipedia SYLK

Adam Hawkes
sumber
Ini adalah solusi hebat yang harus diadopsi sebagai praktik umum di lingkungan yang sering menggunakan git dengan file Excel (dan file lainnya). Ini jelas "git" ramah (meskipun diff tidak dapat dibaca manusia super) dan tidak memerlukan alat tambahan di luar Excel "modern" (sekarang 2019). Ini juga "dua arah" yang berarti bahwa pengguna lain dapat menyimpan lembar kerja Excel mereka dalam format .slk (SYLK) dan kemudian mereka membuka dengan semua format yang tepat, dll. Di Excel saat diperlukan.
D. Woods
2

Gunakan Altova DiffDog

Gunakan mode difdog's XML dan Grid View untuk meninjau perbedaan dalam format tabel yang mudah dibaca. Perbedaan teks adalah JAUH LEBIH KERAS untuk spreadsheet dengan kompleksitas apa pun. Dengan alat ini, setidaknya dua metode dapat digunakan dalam berbagai keadaan.

  1. Simpan Sebagai .xml

    Untuk mendeteksi perbedaan spreadsheet sederhana, satu lembar, simpan lembar kerja Excel untuk dibandingkan sebagai XML Spreadsheet 2003 dengan ekstensi .xml.

  2. Simpan Sebagai .xlsx

    Untuk mendeteksi perbedaan sebagian besar spreadsheet dalam model dokumen termodulasi, simpan lembar kerja Excel untuk dibandingkan sebagai Buku Kerja Excel dalam bentuk .xlsx. Buka file untuk diff dengan diffdog. Ini memberi tahu Anda bahwa file tersebut adalah arsip ZIP, dan menanyakan apakah Anda ingin membukanya untuk perbandingan direktori. Setelah menyetujui perbandingan direktori, ini menjadi masalah yang relatif sederhana yaitu mengklik dua kali bagian logis dari dokumen untuk membuatnya berbeda (dengan mode XML diff). Sebagian besar dokumen .xslx adalah data berformat XML. Tampilan Grid sangat berguna. Adalah sepele untuk membedakan lembar-lembar individual untuk memfokuskan analisis pada bidang-bidang yang diketahui telah berubah.

Kecenderungan Excel untuk mengutak-atik nama atribut tertentu dengan setiap penyimpanan menjengkelkan, tetapi kemampuan diffdog XML diffdog mencakup kemampuan untuk menyaring beberapa jenis perbedaan. Misalnya, lembar bentang Excel dalam formulir XML berisi rowdan celemen yang memiliki satribut (gaya) yang diganti namanya dengan setiap penyimpanan. Menyiapkan filter seperti c:smembuatnya lebih mudah untuk melihat hanya perubahan konten.

diffdog memiliki banyak kemampuan diff'ing. Saya telah mendaftar mode XML diff hanya karena saya belum menggunakan alat lain yang saya sukai lebih baik ketika datang untuk membedakan dokumen Excel.

kbulgrien
sumber
1

Saya menemukan makro openoffice di sini yang akan menjalankan fungsi bandingkan dokumen openoffice pada dua file. Sayangnya, perbandingan spreadsheet openoffice nampak sedikit serpihan; Saya baru saja tombol 'Tolak Semua' memasukkan kolom yang berlebihan di dokumen saya.


sumber
1

Plugin xdocdiff untuk SVN

kematian
sumber
xdocdiff terlihat bagus, tetapi tampaknya membutuhkan TortioseSVN
neu242
xdocdiff juga memiliki plugin WinMerge, keduanya menggunakan xdoc2txt di belakang layar
Sogger
1

Jika Anda menggunakan Java, Anda dapat mencoba excel sederhana .

Ini akan membedakan spreadsheet menggunakan pencocokan Hamcrest dan menghasilkan sesuatu seperti ini.

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)

Saya harus memenuhi syarat bahwa kami menulis alat itu (seperti jawaban yang dicentang menggulung sendiri).

Toby
sumber
2
Terima kasih telah mengirim jawaban Anda! Pastikan untuk membaca FAQ tentang Promosi Diri dengan cermat. Juga mencatat bahwa itu diperlukan bahwa Anda memasukkan disclaimer setiap kali Anda link ke situs Anda sendiri / produk.
Andrew Barber
1

Jika Anda memiliki TortoiseSVN maka Anda dapat CTRLmengklik dua file untuk memilihnya di Windows Explorer dan kemudian klik kanan, TortoiseSVN-> Diff.

Ini bekerja sangat baik jika Anda mencari perubahan kecil dalam kumpulan data besar.

Chris B
sumber
Ini tidak bekerja dengan baik, bagaimanapun, untuk file biner seperti format XLS Excel.
Charles Wood
1
@CharlesWood - sebenarnya ini bekerja dengan sangat baik. Tortoise menggunakan Excel sendiri untuk memberikan perbedaan dan menyoroti sel-sel yang berbeda dengan warna merah. Saya belum mencobanya tetapi saya cukup yakin itu juga melakukan hal yang sama untuk file .doc dan .docx Word (menggunakan Word yang sebagai penampil diff).
Chris B
Whaaat! Milik saya tidak melakukan itu. Apakah ini fitur baru atau Anda menginstal plugin?
Charles Wood
:-D Saya punya TortoiseSVN 1.7.12 dan ia melakukannya di luar kotak. File bantuan menyatakan bahwa ia memiliki dukungan untuk ini - tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-diff.html . Itu menggunakan skrip untuk diff file yang pada mesin saya adalah C: \ Program Files \ TortoiseSVN \ Diff-Scripts \ diff-xls.js. Apakah mungkin Anda memiliki kebijakan grup pada mesin Anda yang telah menonaktifkan scripting?
Chris B
1

Saya punya masalah seperti Anda, jadi saya memutuskan untuk menulis alat kecil untuk membantu saya. Silakan periksa ExcelDiff_Tools . Itu datang dengan beberapa poin utama:

  • Mendukung xls, xlsx, xlsm.
  • Dengan sel formula. Ini akan membandingkan rumus dan nilai.
  • Saya mencoba untuk membuat UI terlihat seperti penampil teks standar dengan: dimodifikasi, dihapus, ditambahkan, status tidak berubah. Silakan lihat dengan gambar di bawah ini misalnya: masukkan deskripsi gambar di sini
kokichi88
sumber
1

Saya adalah penulis bersama ekstensi Git gratis dan sumber terbuka:

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

Itu membuat Git bekerja dengan format file buku kerja Excel apa pun tanpa penyelesaian apa pun.

Bjoern Stiel
sumber
0

Diff Doc mungkin yang Anda cari.

  • Bandingkan dokumen MS Word (DOC, DOCX dll), Excel, PDF, Rich Text (RTF), Teks, HTML, XML, PowerPoint, atau Wordperfect dan mempertahankan format
  • Pilih bagian mana pun dari dokumen (file) apa pun dan bandingkan dengan bagian mana pun dari dokumen (file) yang sama atau berbeda.
ConroyP
sumber
2
Diff Doc adalah windows-only dan sumber tertutup, itu benar-benar tidak sesuai dengan kebutuhan saya.
neu242
0

Saya tidak tahu alat apa pun, tetapi ada dua solusi roll-your-sendiri yang muncul dalam pikiran, keduanya membutuhkan Excel:

  1. Anda bisa menulis beberapa kode VBA yang melangkah melalui setiap Lembar Kerja, Baris, Kolom dan Sel dari dua Buku Kerja, melaporkan perbedaan.

  2. Jika Anda menggunakan Excel 2007, Anda bisa menyimpan Workbooks sebagai format Open-XML (* .xlsx), ekstrak XML dan diff itu. File Open-XML pada dasarnya hanyalah file .zip dari file .xml dan manifes.

Anda akan berakhir dengan banyak "noise" dalam kedua kasus tersebut jika spreadsheet Anda secara struktural tidak "dekat" untuk memulai.

lesscode
sumber
Dari Excel 2002 dan seterusnya Anda juga dapat menyimpan dalam format 'XML Spreadsheet' yang lebih sederhana daripada berurusan dengan file xlsx.
Sam Warwick
0

Konversikan ke cvs lalu unggah ke sistem kontrol versi lalu buktikan dengan alat kontrol versi lanjutan. Ketika saya menggunakan terpaksa, ia memiliki alat diff yang hebat, tapi saya lupa namanya.

patrick
sumber