Как создать читаемый diff двух таблиц с помощью git diff?

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

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

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

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

Я нашел xdocdiff WinMerge Plugin. Это плагин для WinMerge (как OpenSource и Freeware, вам не нужно писать VBA и не сохранять excel в csv или xml). Он работает только для содержания celd.

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

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

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

Ответ 5

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

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

enter image description here

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

Ответ 9

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

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

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

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

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

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

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

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

Ответ 10

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

Ответ 11

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

Ответ 12

плагин xdocdiff для SVN

Ответ 13

Если вы используете 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)

Я должен подтвердить, что мы написали этот инструмент (например, тикаемый ответ развернулся).

Ответ 14

Если у вас есть TortoiseSVN, вы можете CTRL щелкнуть два файла, чтобы выбрать их в Проводнике Windows, а затем щелкните правой кнопкой мыши, TortoiseSVN- > Diff.

Это работает особенно хорошо, если вы ищете небольшое изменение в большом наборе данных.

Ответ 15

Новые версии MS Office поставляются с "Сравнение электронных таблиц" , который выполняет довольно приятный diff в графическом интерфейсе. Он обнаруживает большинство изменений.

Ответ 16

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

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

Ответ 17

Я не знаю каких-либо инструментов, но на ум приходят два рулонных решения, оба требуют Excel:

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

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

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

Ответ 18

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

Ответ 19

У меня возникла такая проблема, как вы, поэтому я решил написать небольшой инструмент, чтобы помочь мне. Проверьте ExcelDiff_Tools. Он имеет несколько ключевых моментов:

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