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

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

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

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

Ответы [ 21 ]

108 голосов
/ 22 сентября 2008

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

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

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

103 голосов
/ 01 июля 2012

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

12 голосов
/ 22 сентября 2008

В прошлом я много сравнивал книги 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 покажет сравнение в хорошем макете таблицы, и вы сможете скрыть строки и столбцы, которые вам не интересны.

11 голосов
/ 17 октября 2014

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

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

enter image description here

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

9 голосов
/ 05 мая 2010

Я нашел 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 версии 5.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

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

6 голосов
/ 23 сентября 2008

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

5 голосов
/ 22 сентября 2008

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

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

3 голосов
/ 05 августа 2010

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

3 голосов
/ 01 сентября 2017

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

2 голосов
/ 07 февраля 2013

Использование Altova DiffDog

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

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

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

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

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

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

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

...