Как создать читабельный diff из двух электронных таблиц, используя git diff?

168

У нас есть много электронных таблиц (xls) в нашем хранилище исходного кода. Они обычно редактируются с помощью gnumeric или openoffice.org и в основном используются для заполнения баз данных для модульного тестирования с помощью dbUnit . Я не знаю простых способов создания различий в файлах xls, и это делает объединение чрезвычайно утомительным и подверженным ошибкам.

Я пытался конвертировать электронные таблицы в xml и делать регулярные сравнения, но мне кажется, что это должно быть последнее средство.

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

neu242
источник
4
Я думаю, что теги unit-testing и dbunit здесь неправильно применяются. Вопрос заключается в сравнении файлов для определенного формата файла и не имеет ничего общего с модульным тестированием.
Хэмиш Смит
1
Не ответ (для этого требуется Excel & является коммерческим продуктом), но для людей, привезенных сюда GooBinghoo - formulasoft.com/excel-compare.html хорошо работает для меня.
САПР bloke
1
Я использую этот скрипт на Python для ознакомления с Excel, который мы регистрируем в git. Я перенес этот код GO (который был перенесен из Perl) в Python: github.com/tokuhirom/git-xlsx-textconv#see-also Он позволяет использовать git diffиgitk
nmz787
Вне всякого сравнения? scootersoftware.com/features.php?zz=features_multifaceted
Нишант Шарма
Проще всего было бы экспортировать данные обеих электронных таблиц в виде CSV / текста и выполнять обычные сравнения (с вашим предпочитаемым редактором или файлами сравнения)
PPC

Ответы:

109

Мы столкнулись с точно такой же проблемой в нашей компании. Наши тесты показывают превосходные рабочие тетради. Бинарный дифференциал не был вариантом. Таким образом, мы развернули наш собственный простой инструмент командной строки. Проверьте проект ExcelCompare . Фактически это позволяет нам довольно хорошо автоматизировать наши тесты. Запросы патчей / функций приветствуются!

na_ka_na
источник
2
@KimStacks yes работает для всех xls, xlsx, ods. И может даже сравнить любой один тип с другим, например, xls v / s xlsx.
na_ka_na
1
Отличный инструмент ... но он говорит "Diff fail: не удалось прочитать как файл Excel:" для некоторых совершенно корректных файлов xls. Для тех, кто ищет альтернативу (гораздо худшую, со всех других точек зрения): см. Github.com/toobaz/xlrd_diff
Пьетро Баттистон
2
@PietroBattiston пожалуйста, зарегистрируйте тикет в github, и я посмотрю на него.
na_ka_na
@na_ka_na Спасибо за создание этого инструмента!
jgpawletko
111

Быстро и легко без внешних инструментов, работает хорошо, если сравнивать два листа:

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

Если листы похожи, эта таблица будет пустой, за исключением нескольких ячеек с X, подчеркивающих различия. Увеличьте масштаб до 40%, чтобы быстро увидеть, что отличается.

Laurent
источник
6
Разве это не делает сравнение клеток за ячейкой? Я имею в виду, что если на левой стороне есть одна дополнительная строка сверху, все остальные строки (и ячейки) будут различаться. Если это так, это не очень полезно.
Хаммад Хан
1
@Thecrocodilehunter: вы всегда можете удалить эту строку вверху, а затем сравнить остальные. Если различия намного сложнее, то, конечно, вам нужен другой инструмент. Это полезно для быстрого одноразового сравнения, например, когда Excel говорит, что вы изменили электронную таблицу, и вы боитесь, что случайно отредактировали поле.
иконоборчество
1
Мне понравился этот. Вместо того, чтобы делать X, вы также можете сделать «1» и иметь SUM в качестве первых строк и столбцов. Добавьте сом в самом первом поле, и вы быстро увидите, сколько полей отличаются.
Конерак
5
Я немного изменил формулу, поэтому мне не нужно было смотреть, какие именно различия были. = IF (Sheet1! A1 <> Sheet2! A1, CONCATENATE ("Sheet 1 =", Sheet1! A1, "Sheet 2 =", Sheet2! A1), "")
Martyn
1
Вы можете просто напечатать =Sheet1!A1=Sheet2!A1. Это напечатает ИСТИНА или ЛОЖЬ. Затем вы можете сделать условное форматирование =countif(A1:B2, FALSE)или что-то подобное.
user2023861
12

Я много сравнивал книги Excel в прошлом. Моя методика очень хорошо работает для рабочих книг со многими рабочими листами, но она сравнивает только содержимое ячеек, а не форматирование ячеек, макросы и т. Д. Кроме того, требуется некоторое кодирование, но оно того стоит, если вам приходится многократно сравнивать большое количество больших файлов. Вот как это работает:

A) Напишите простую программу дампа, которая просматривает все таблицы и сохраняет все данные в разделенных табуляцией файлах. Создайте один файл для каждого листа (используйте имя листа в качестве имени файла, например, «MyWorksheet.tsv») и создайте новую папку для этих файлов при каждом запуске программы. Назовите папку после имени файла Excel и добавьте метку времени, например, «20080922-065412-MyExcelFile». Я сделал это в Java, используя библиотеку под названием JExcelAPI . Это действительно довольно легко.

B) Добавьте расширение оболочки Windows, чтобы запустить новую программу Java с шага A, если щелкнуть правой кнопкой мыши файл Excel. Это позволяет очень легко запустить эту программу. Вам нужно Google, как это сделать, но это так же просто, как написать файл * .reg.

C) Получить BeyondCompare . Он имеет очень классную функцию для сравнения данных с разделителями, показывая их в красивой таблице, см. Скриншот .

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

thvo
источник
12

Вы можете попробовать этот бесплатный онлайн-инструмент - www.cloudyexcel.com/compare-excel/

Он дает хороший визуальный вывод в режиме онлайн с точки зрения добавления, удаления, изменения строк и т. Д.

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

Кроме того, вам не нужно ничего устанавливать.

Шашанк Сингла
источник
К сожалению, это работает только для файлов <2MB. Во всяком случае, это может работать для кого-то еще.
MikeVelazco
10

Я нашел xdocdiff плагин WinMerge . Это плагин для WinMerge (как OpenSource, так и Freeware , вам не нужно ни писать VBA, ни сохранять Excel в CSV или XML). Это работает только для Celd's содержит.

Этот плагин также поддерживает:

  • .rtf Rich Text
  • .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 Adobe PDF
  • Веб-архив .mht
  • .eml Экспортированные файлы из OutlookExpress

С уважением, Андрес

Andres
источник
1
К сожалению, он не позволяет сохранять изменения в распакованных файлах, поэтому он бесполезен для объединения. Это бесплатно, хотя.
Соггер
6

Хммм. В меню Excel выберите Окно -> Сравнить рядом?


источник
+1 работает хорошо, но не выделяет различия в Office 2007. Я думаю, в старых версиях это так. Все еще очень хорошо для визуального сравнения.
Хаммад Хан
2
да, подсветка отсутствует, поэтому единственное преимущество - синхронная прокрутка.
Соггер
5

Используете ли вы TortoiseSVN для коммитов и обновлений в Subversion? Он имеет инструмент сравнения, однако сравнение файлов Excel по-прежнему не очень удобно для пользователя. В моей среде (Win XP, Office 2007) он открывает два файла Excel для сравнения друг с другом.

Щелкните правой кнопкой мыши документ> SVN Tortoise> Показать журнал> выберите редакцию> щелкните правой кнопкой мыши «Сравнить с рабочей копией».

Casper
источник
4

Более новые версии MS Office поставляются с Spreadsheet Compare , который выполняет довольно приятную разницу в графическом интерфейсе. Он обнаруживает большинство видов изменений.

гремлин
источник
Хотя этот ответ, вероятно, не поможет ситуации OP с diffобъединением на основе командной строки , этот инструмент сравнения электронных таблиц идеально подошел для моих целей (проверка различий между выводом автоматизации OpenXML и выводом автоматизации COM COM).
ErrCode
Примечание: я пытался исследовать автоматизацию с помощью этого инструмента, но он не работал для меня (инструмент просто продолжал
падать
4

Существует библиотека daff (сокращение от diff для данных), которая помогает сравнивать таблицы, создавать сводку их различий и использовать такую ​​сводку в качестве файла исправления.

Он написан на Haxe, поэтому его можно скомпилировать на основных языках.

Я сделал Excel Diff Tool в Javascript с помощью этой библиотеки. Он хорошо работает с числами и небольшими строками, но вывод не идеален для длинных строк (например, длинное предложение с небольшим изменением символов).

shubhu
источник
3

Я знаю, что в нескольких ответах предлагалось экспортировать файл в csv или другой текстовый формат, а затем сравнивать их. Я не видел, чтобы это упоминалось специально, но Beyond Compare 3 имеет ряд дополнительных форматов файлов, которые он поддерживает. Смотрите Дополнительные форматы файлов . Используя один из форматов файлов Microsoft Excel, вы можете легко сравнить два файла Excel, не проходя экспорт в другой формат.

mattsmith321
источник
2

Я бы использовал формат файла SYLK, если важно выполнить diff. Это текстовый формат, который должен сделать сравнения проще и компактнее, чем двоичный формат. Он также совместим с Excel, Gnumeric и OpenOffice.org, поэтому все три инструмента должны хорошо работать вместе. SYLK Статья в Википедии

Адам Хоукс
источник
Это отличное решение, которое должно быть принято в качестве обычной практики в средах, где часто используются git с файлами Excel (и другими файлами). Это определенно "git" дружественный (хотя diff-файлы не очень удобочитаемы для человека) и не требует никаких дополнительных инструментов, кроме "современного" Excel (сейчас 2019). Он также «двусторонний», что означает, что другие пользователи могут сохранять свои электронные таблицы Excel в формате .slk (SYLK), а затем при необходимости открывать их в надлежащем форматировании и т. Д. В Excel.
Д. Вудс
2

Используйте Altova DiffDog

Используйте XML-режим diffdog и Grid View, чтобы просмотреть различия в удобном для чтения табличном формате. Различия в текстах намного сложнее для электронных таблиц любой сложности. С этим инструментом, по крайней мере, два метода являются жизнеспособными при различных обстоятельствах.

  1. Сохранить как .xml

    Чтобы обнаружить отличия простой электронной таблицы на один лист, сохраните электронные таблицы Excel для сравнения в виде электронной таблицы XML 2003 с расширением .xml.

  2. Сохранить как .xlsx

    Чтобы обнаружить различия большинства электронных таблиц в модульной модели документов, сохраните электронные таблицы Excel для сравнения в виде рабочей книги Excel в формате .xlsx. Откройте файлы для сравнения с diffdog. Он сообщает вам, что файл является ZIP-архивом, и спрашивает, хотите ли вы открыть его для сравнения каталогов. Согласившись на сравнение каталогов, достаточно просто дважды щелкнуть логические части документа для их сравнения (в режиме XML diff). Большинство частей документа .xslx представляют собой данные в формате XML. Вид сетки чрезвычайно полезен. Различать отдельные листы тривиально, чтобы сосредоточить анализ на областях, которые, как известно, изменились.

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

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

kbulgrien
источник
1

Я нашел макрос openoffice здесь, который будет вызывать функцию сравнения документов openoffice для двух файлов. К сожалению, сравнение электронных таблиц openoffice кажется немного странным; Я только что с помощью кнопки «Отклонить все» вставил лишний столбец в свой документ.


источник
1

Плагин xdocdiff для SVN

graveDust
источник
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, который используется для просмотра различий).
Крис Б.
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.
  • С формулой ячейки. Он будет сравнивать как формулу, так и значение.
  • Я пытаюсь сделать пользовательский интерфейс похожим на стандартное средство просмотра текста diff с измененным, удаленным, добавленным, неизменным статусом. Пожалуйста, посмотрите на изображение ниже, например: введите описание изображения здесь
kokichi88
источник
1

Я являюсь соавтором бесплатного расширения Git с открытым исходным кодом:

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

Это позволяет Git работать с любым форматом файла книги Excel без каких-либо обходных путей.

Бьерн Стил
источник
0

Diff Doc может быть то, что вы ищете.

  • Сравните документы MS Word (DOC, DOCX и т. Д.), Excel, PDF, Rich Text (RTF), текста, HTML, XML, PowerPoint или Wordperfect и сохраните форматирование
  • Выберите любую часть любого документа (файла) и сравните ее с любой частью того же или другого документа (файла).
ConroyP
источник
2
Diff Doc предназначен только для Windows и с закрытым исходным кодом, он действительно не соответствует моим потребностям.
neu242
0

Я не знаю ни одного инструмента, но на ум приходят два решения по принципу «сделай сам», оба требуют Excel:

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

  2. Если вы используете Excel 2007, вы можете сохранить рабочие книги в формате Open-XML (* .xlsx), извлечь XML-файл и проверить его. Файл Open-XML - это, по сути, просто ZIP-файл с XML-файлами и манифестами.

В любом случае у вас будет много «шума», если ваши таблицы не являются структурно «близкими» для начала.

lesscode
источник
Начиная с Excel 2002, вы также можете сохранять в формате «XML Spreadsheet», что проще, чем работа с файлами xlsx.
Сэм Уорик
0

Конвертируйте в cvs, затем загружайте в систему управления версиями, затем diff с помощью расширенного инструмента сравнения версий. Когда я использовал перформанс, у него был отличный инструмент сравнения, но я забыл его название.

Патрик
источник