it-swarm.com.ru

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

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

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

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

162
neu242

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

103
na_ka_na

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

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

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

108
Laurent

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

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

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

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

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

12
thvo

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

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

enter image description here

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

11
Shashank Singla

Я нашел 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

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

9
Andres

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

6
Luke

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

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

5
Casper

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

3
mattsmith321

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

3
Gremlin

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

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

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

2
shubhu

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

Используйте XML-режим diffdog и 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.

2
kbulgrien

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

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

1
Toby

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

1
Adam Hawkes

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

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

плагин xdocdiff для SVN

1
graveDust

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

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

1
Chris B

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

1
_mike

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

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

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

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

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

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

0
lesscode

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

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

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

0
Bjoern Stiel

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

0
astronought