Как создать читаемую разницу между двумя электронными таблицами с помощью git diff?

StackOverflow https://stackoverflow.com/questions/114698

Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

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

В) Получить Вне всякого сравнения.У него есть очень интересная функция для сравнения данных с разделителями, отображая их в красивой таблице. см. скриншот.

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

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

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

enter image description here

Плюс вам не нужно ничего устанавливать.

я нашел Плагин xdocdiff WinMerge.Это плагин для WinMerge (оба Открытый источник и Бесплатное ПО, вам не нужно писать VBA или сохранять Excel в CSV или XML).Это работает только для содержимого celd.

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

  • .rtf форматированный текст
  • .docx/.docm Microsoft WORD 2007 (OOXML)
  • .xlsx/.xlsm Microsoft Excel 2007 (OOXML)
  • .pptx/.pptm Microsoft PowerPoint 2007 (OOXML)
  • .doc Microsoft WORD версии 5.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

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

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

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

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

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

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

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

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

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

Использовать Альтова ДиффДог

Используйте режим сравнения XML diffdog и представление сетки, чтобы просмотреть различия в удобном для чтения табличном формате.Различие текста НАМНОГО СЛОЖНЕЕ для электронных таблиц любой сложности.С помощью этого инструмента при различных обстоятельствах жизнеспособны как минимум два метода.

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

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

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

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

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

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

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

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

плагин xdocdiff для SVN

Если вы используете Java, вы можете попробовать простой 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)

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

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

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

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

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

Разница в документе может быть то, что вы ищете.

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top