Як створити читабельну диференцію з двох електронних таблиць за допомогою git diff?


168

У нашому сховищі вихідного коду є маса електронних таблиць (xls). Зазвичай вони редагуються за допомогою gnumeric або openoffice.org і в основному використовуються для заповнення баз даних для тестування одиниць за допомогою dbUnit . Існує не простий спосіб зробити різні файли для файлів xls, про які я знаю, і це робить об'єднання надзвичайно виснажливим та схильним до помилок.

Я намагався перетворити електронні таблиці в xml і робити регулярні розбіжності, але мені здається, що це має бути в крайньому випадку.

Я хотів би виконати відмінність (і злиття) gitз текстовими файлами. Як би я це зробив, наприклад, при видачі git diff?


4
Я думаю, що тут тестування блоків тегів та dbunit неправильно застосовані. Питання стосується порівняння файлів для конкретного формату файлу і не має нічого спільного з тестуванням одиниць.
Гаміш Сміт,

1
Не відповідь (це вимагає Excel & є комерційним продуктом), але для людей, які привели сюди GooBinghoo - formulasoft.com/excel-compare.html добре працює для мене.
CAD заблокували

1
Я використовую цей скрипт Python для того, щоб відрізняти Excel, який ми реєструємося, щоб отримати git. Я переніс цей код GO (який був перенесений з Perl) на Python: github.com/tokuhirom/git-xlsx-textconv#see-also Він дозволяє використовувати git diffтаgitk
nmz787


Найпростішим способом є експорт даних обох електронних таблиць у формат CSV / текст та звичайний розбіг (із бажаним редактором або файлами diff)
КПП

Відповіді:


109

Ми стикалися з точно таким же питанням у нашому співпраці. Наші тести виходять із відмінних робочих зошитів. Бінарний розріз не був варіантом. Тож ми розгорнули власний простий інструмент командного рядка. Ознайомтеся з проектом ExcelCompare . Це означає, що ми можемо досить добре автоматизувати свої тести. Патчі / запити щодо функцій цілком вітаються!


2
@KimStacks так працює для всіх xls, xlsx, ods. І навіть можна порівняти будь-який один тип з іншим, наприклад xls v / s xlsx.
na_ka_na

1
Чудовий інструмент ... але в ньому написано "Diff failed: Failed to read as excel file:" for some perfect valid xls files. Для тих, хто шукає альтернативу (набагато біднішу
Pietro

2
@PietroBattiston pls запишіть квиток у github, і я перегляну його.
na_ka_na

@na_ka_na Дякуємо, що створили цей інструмент!
jgpawletko

111

Швидкий і простий без зовнішніх інструментів, працює добре, якщо два аркуші, які ви порівнюєте, схожі:

  • Створіть третю електронну таблицю
  • Введіть =if(Sheet1!A1 <> Sheet2!A1, "X", "")у верхній лівій комірці (або еквівалент: натисніть на фактичні комірки, щоб автоматично вставити посилання у формулу)
  • Ctrl+C(копія), Ctrl+A(виділити все), Ctrl+V(вставити), щоб заповнити аркуш.

Якщо аркуші схожі, ця електронна таблиця буде порожньою, за винятком кількох комірок із символом X, що підкреслює відмінності. Зняти зум до 40%, щоб швидко побачити, що відрізняється.


6
Чи це не робить порівняння клітин за клітинами? Я маю на увазі, якщо ліва сторона має один додатковий рядок вгорі, це дасть всі інші рядки (і комірки) різними. Якщо це так, це не дуже корисно.
Хаммад Хан

1
@Thecrocodilehunter: ви завжди можете видалити цей рядок у верхній частині, а потім порівняти решту. Якщо відмінності набагато складніші, то, звичайно, вам потрібен інший інструмент. Це корисно для швидких одноразових порівнянь, наприклад, коли Excel каже, що ви змінили електронну таблицю, і ви боїтеся, що випадково відредагували поле.
іконоборство

1
Мені це сподобалось. Замість того, щоб робити X, ви також можете зробити "1" і мати SUM як перші рядки та стовпці. Додайте сом у перше поле, і ви швидко побачите, скільки полів відрізняється.
Конерак

5
Я трохи змінив формулу, тому мені не довелося дивитись на точні відмінності. = ЯКЩО (Sheet1! A1 <> Sheet2! A1, CONCATENATE ("Sheet 1 =", Sheet1! A1, "Sheet 2 =", Sheet2! A1), "")
Martyn

1
Ви можете просто ввести =Sheet1!A1=Sheet2!A1. Це надрукує правду чи помилково. Потім ви можете зробити умовне форматування =countif(A1:B2, FALSE)або щось подібне.
користувач2023861

12

У минулому я багато порівнював робочі зошити Excel. Моя техніка дуже добре працює для робочих зошитів з багатьма робочими аркушами, але вона порівнює лише вміст комірок, а не форматування комірок, макросів тощо. Також є якесь кодування, але воно того варте того, якщо вам доведеться багато разів порівнювати багато великих файлів. Ось як це працює:

A) Напишіть просту дамп-програму, яка перегляне всі робочі таблиці та зберігає всі дані у файли, розділені на вкладки. Створіть один файл на робочому аркуші (використовуйте ім’я робочого аркуша як ім'я файлу, наприклад, "MyWorksheet.tsv") та створюйте нову папку для цих файлів щоразу, коли ви запускаєте програму. Назвіть папку після імені файлу excel та додайте часову позначку, наприклад, "20080922-065412-MyExcelFile". Я зробив це на Java, використовуючи бібліотеку під назвою JExcelAPI . Це дійсно досить просто.

B) Додайте розширення оболонки Windows, щоб запустити нову програму Java з кроку A, клацнувши правою кнопкою миші на файл Excel. Це дозволяє дуже легко запустити цю програму. Потрібно Google, як це зробити, але це так просто, як написати * .reg файл.

В) Отриматись поза компанією . Він має дуже цікаву функцію для порівняння розділених даних, показуючи їх у приємній таблиці, дивіться на скріншоті .

D) Тепер ви готові легко порівняти файли Excel. Клацніть правою кнопкою миші файл Excel 1 і запустіть свою дамп-програму. Він створить папку з одним файлом на робочому аркуші. Клацніть правою кнопкою миші файл Excel 2 і запустіть дамп-програму. Він створить другу папку з одним файлом на робочому аркуші. Тепер для порівняння папок використовуйте BeyondCompare (BC). Кожен файл являє собою робочий аркуш, тому, якщо є відмінності в робочому аркуші BC, це покаже це, і ви можете розгорнути дані та зробити порівняння файлів. BC покаже порівняння в приємному макеті таблиці, і ви можете приховати рядки та стовпці, які вас не цікавлять.


12

Ви можете спробувати цей безкоштовний онлайн-інструмент - www.cloudyexcel.com/compare-excel/

Це дає хороший візуальний вихід в Інтернеті з точки зору додавання рядків, видалення, зміни тощо.

введіть тут опис зображення

Плюс вам нічого не доведеться встановлювати.


На жаль, він працює лише для <2МБ файлів. У будь-якому випадку, це може працювати для когось іншого.
MikeVelazco

10

Я знайшов плагін xdocdiff WinMerge . Це плагін для WinMerge (і OpenSource, і Freeware , вам не потрібно писати 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 Write
  • .pdf Adobe PDF
  • .mht Веб-архів
  • .eml Експортуються файли з OutlookExpress

З повагою, Андрес


1
На жаль, він не дозволяє зберігати зміни в розпакованих файлах, тому не є корисним для об'єднання. Це безкоштовно.
Соггер

6

Хммм. У меню Excel виберіть Вікно -> Порівняти поруч?


+1 працює добре, але не підкреслює відмінності в офісі 2007 року. Я думаю, що в старих версіях він є. Ще дуже добре для візуального порівняння.
Хаммад Хан

2
так, виділення немає, тому єдиною перевагою є синхронне прокручування.
Соггер

5

Чи використовуєте ви TortoiseSVN для виконання завдань та оновлень у підривній роботі? Він має різний інструмент, однак порівняння файлів Excel все ще не дуже зручно для користувачів. У моєму середовищі (Win XP, Office 2007) він відкриває два файли Excel для порівняння.

Клацніть правою кнопкою миші документ> Tortoise SVN> Показати журнал> виберіть перегляд> клацніть правою кнопкою миші для «Порівняти з робочою копією».


4

Більш новіші версії MS Office поставляються із Spreadsheet Compare , яка відрізняється графічним інтерфейсом. Він виявляє більшість видів змін.


Хоча ця відповідь, ймовірно, не допоможе ситуації з ОП із diffоб'єднанням на основі командного рядка , цей інструмент порівняння електронних таблиць був ідеальним для моїх цілей (перевірка відмінностей між результатами автоматизації OpenXML від результатів автоматизації Excel COM).
ErrCode

Примітка: Я намагаюся досліджувати автоматизації з допомогою цього інструменту, але це не робота для мене (інструмент продовжував Гуркіт): stackoverflow.com/a/35905262/7270462
ERRCODE

4

Існує даф бібліотеки (короткий для розходження даних), який допомагає порівнювати таблиці, створювати резюме їх відмінностей та використовувати такий резюме як файл виправлення.

Він написаний Haxe, тому його можна скласти основними мовами.

Я створив Excel Diff Tool у Javascript за допомогою цієї бібліотеки. Він добре працює з числами та малими рядками, але вихід не ідеальний для довгих рядків (наприклад, довге речення з незначною зміною символів).


3

Я знаю, що декілька відповідей пропонували експортувати файл у формат csv чи інший текстовий формат, а потім порівняти їх. Я цього не бачив конкретно, але Beyond Compare 3 має ряд додаткових форматів файлів, які він підтримує. Див. Додаткові формати файлів . Використовуючи один із форматів файлів Microsoft Excel, ви можете легко порівняти два файли Excel, не переходячи до експорту в інший варіант формату.


2

Я б використовував формат файлу SYLK, якщо важливо виконувати відмінності. Це текстовий формат, який повинен зробити порівняння простішим і більш компактним, ніж двійковий формат. Він сумісний і з Excel, Gnumeric і OpenOffice.org, тому всі три інструменти повинні мати можливість добре працювати разом. Стаття Вікіпедії SYLK


Це чудове рішення, яке повинно бути прийнятим як звичайна практика в середовищах, які часто використовують git з файлами Excel (та іншими файлами). Це, безумовно, "git" доброзичливий (хоча розрізнення не надто зручні для читання) і не потребують додаткових інструментів поза "сучасним" Excel (це вже 2019 рік). Це також "двосторонній", що означає, що інші користувачі можуть зберігати свої таблиці Excel у форматі .slk (SYLK), а потім вони відкриваються з усім належним форматуванням тощо в Excel, коли це потрібно.
Д. Вудс

2

Використовуйте Altova DiffDog

Використовуйте диференціальний режим XML diffdog та Grid View для перегляду відмінностей у простому для читання табличному форматі. Текст відрізняється набагато важче для електронних таблиць будь-якої складності. За допомогою цього інструменту принаймні два методи є життєздатними за різних обставин.

  1. Зберегти як .xml

    Щоб виявити відмінності простої електронної таблиці на одному аркуші, збережіть таблиці Excel для порівняння як XML Spreadsheet 2003 з розширенням .xml.

  2. Зберегти як .xlsx

    Щоб виявити відмінності більшості електронних таблиць у модульованій моделі документа, збережіть таблиці Excel для порівняння як робочу книжку Excel у форматі .xlsx. Відкрийте файли для розрізнення з diffdog. Він повідомляє вам, що файл є архівом ZIP, і запитує, чи хочете ви відкрити його для порівняння каталогів. Погодившись на порівняння каталогів, стає відносно простою справою подвійного клацання логічних частин документа для їх розрізнення (у режимі різниці XML). Більшість частин .xslx документа - це дані у форматі XML. Перегляд сітки надзвичайно корисний. Тривіально відрізняти окремі аркуші, щоб зосередити аналіз на областях, які, як відомо, змінилися.

Схильність Excel до налаштування певних імен атрибутів із кожним збереженням викликає роздратування, проте можливості XML, що відрізняються від дифдога, включають можливість фільтрації певних типів відмінностей. Наприклад, електронні таблиці Excel у формі XML містять rowі cелементи, які мають sатрибути (стиль), які перейменовують при кожному збереженні. Налаштування подібного фільтра c:sзначно полегшує перегляд лише змін вмісту.

diffdog має багато різних можливостей. Я перерахував різні режими XML лише тому, що не використовував інший інструмент, який мені подобався краще, коли справа стосується розмежування документів Excel.


1

Я знайшов OpenOffice макросу тут , що буде викликати порівняння документів OpenOffice в функціонувати на два файлах. На жаль, порівняння електронних таблиць openoffice здається трохи неохайним; Я просто мав на кнопці "Відхилити всіх" вставити зайвий стовпчик у мій документ.


1

xdocdiff плагін для SVN


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 щодо самореклами . Також зауважте, що Ви зобов’язуєтесь публікувати відмову щоразу, коли Ви посилаєтесь на власний сайт / продукт.
Ендрю Барбер

1

Якщо у вас є TortoiseSVN, ви можете CTRL натиснути два файли, щоб вибрати їх у Провіднику Windows, а потім клацніть правою кнопкою миші, TortoiseSVN-> Diff.

Це особливо добре працює, якщо ви шукаєте невелику зміну великого набору даних.


Однак це не дуже добре працює для двійкових файлів, таких як XLS-формат Excel.
Чарльз Вуд

1
@CharlesWood - на самому ділі це робить роботу особливо добре. Черепаха використовує Excel, щоб забезпечити різницю та виділити різні клітини червоним кольором. Я не пробував цього, але я впевнений, що він робить те ж саме для файлів Word .doc та .docx (використовуючи Word, який є переглядачем diff).
Кріс Б

Whaaat! Моя не робить цього. Це нова функція чи ви встановили плагін?
Чарльз Вуд

:-D У мене є TortoiseSVN 1.7.12, і він робить це поза коробкою. У файлі довідки зазначено, що він підтримує це - tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-diff.html . Він використовує скрипт для розмежування файлів, які на моїй машині є C: \ Program Files \ TortoiseSVN \ Diff-Scripts \ diff-xls.js. Чи можливо у вас є групова політика на вашому комп'ютері, яка вимкнула сценарій?
Кріс Б

1

У мене така проблема, як у вас, тому я вирішу написати невеликий інструмент, щоб допомогти мені. Перевірте ExcelDiff_Tools . Він має декілька ключових моментів:

  • Підтримка xls, xlsx, xlsm.
  • З коміркою формули. Він буде порівнювати і формулу, і значення.
  • Я намагаюся зробити так, щоб інтерфейс користувача виглядав як стандартний переглядач різного тексту зі зміненим, видаленим, доданим, незмінним статусом. Ознайомтесь із прикладом нижче, наприклад: введіть тут опис зображення


0

Diff Doc може бути тим, що ви шукаєте.

  • Порівняйте документи MS Word (DOC, DOCX тощо), Excel, PDF, Rich Text (RTF), Text, HTML, XML, PowerPoint або Wordperfect та збережіть форматування
  • Виберіть будь-яку частину будь-якого документа (файлу) та порівняйте його з будь-якою частиною того ж чи іншого документа (файлу).

2
Diff Doc - це лише вікно та закрите джерело, воно дійсно не відповідає моїм потребам.
neu242

0

Я не знаю жодних інструментів, але приходять у голову два власні рішення, які вимагають Excel:

  1. Ви можете написати код VBA, який проходить через кожен робочий аркуш, рядок, стовпець і клітинку двох робочих книжок, повідомляючи про різниці.

  2. Якщо ви використовуєте Excel 2007, ви можете зберегти Робочі книжки у форматі Open-XML (* .xlsx), витягнути XML і відрізняти це. Файл Open-XML по суті є лише .zip-файлом .xml-файлів та маніфестів.

У будь-якому випадку у вас виникне багато "шуму", якщо ваші електронні таблиці структурно не будуть "закритими" для початку.


З Excel 2002 року ви також можете зберегти у форматі «Електронна таблиця XML», який простіший, ніж працювати з файлами xlsx.
Сем Уорвік

0

Перетворити в резюме, а потім завантажити в систему управління версіями, а потім відрізнятись із розширеним інструментом управління версіями. Коли я використовував perforce, він мав чудовий інструмент різниці, але я забуваю його назву.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.