green_fr: (Default)
green_fr ([personal profile] green_fr) wrote2012-02-14 09:36 am
Entry tags:

CVS Excel

Скажите, а кто-нибудь хранит Excel в CVS (или ему подобных системах)?

Основной вопрос - сравнение двух версий файла. Я согласен на множество упрощений, например полностью отказаться от сравнения форматирования, даже от формул - только данные. Но я порылся в Internet'е, ничего приличногов упор не нахожу. А наши программеры предлагают перейти на Google Docs - при всём моём уважении к этой фирме, мне это пока что кажется опасной утопией.

С другой стороны, последние версии Excel сохраняют файлы в формате XML-ZIP, про который я уже когда-то спрашивал, но для которого тоже пока что решения не нашёл...

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

[identity profile] mopexod.livejournal.com 2012-02-14 08:54 am (UTC)(link)
Если надо только данные - хранить в CSV (comma separated values). Это текстовый формат, эксель его считает более-менее родным.

[identity profile] mopexod.livejournal.com 2012-02-14 08:56 am (UTC)(link)
Пардон, если непонятно из-за похожести аббревиатур: сохранять эксельные данные не в .xls файлах, а в .csv. А их уж и класть в version control, они должны хорошо сравниваться.

[identity profile] green-fr.livejournal.com 2012-02-14 09:02 am (UTC)(link)
Да, я регулярно пытаюсь поправить по этому поводу кашу в головах у коллег :-)
Меня как-то порадовала в документации одного процесса фраза "конвертировать текстовый файл в формат Excel" - на деле надо было переименовать .txt в .xls (даже не .cvs), и Excel действительно подхватывал данные почти что автоматически :-/

[identity profile] mopexod.livejournal.com 2012-02-14 09:09 am (UTC)(link)
Да, компьютерная грамотность - вещь относительная :)

[identity profile] green-fr.livejournal.com 2012-02-14 09:00 am (UTC)(link)
Технически это могло бы пройти, но фактически нет - файлы довольно сложные, с множеством закладок, которые не хочется разрывать. Ну и форматирование всё же есть - я сегласен отказаться от отслеживания изменений в нём, но не от него самого.

[identity profile] mopexod.livejournal.com 2012-02-14 09:10 am (UTC)(link)
Понятно. Буду посматривать комментарии - может чего дельного предложат.

[identity profile] fima.livejournal.com 2012-02-14 09:37 am (UTC)(link)
Единственный способ автоматически учитывать будущие версии экселя - это полностью от него отказаться :-)
Теоретически единственное возможное решение могло бы быть только от майкрософта, т.е его sourcesafe (или как там это нынче называется) мог бы разгребать формат, находить разницу и ее достойно показывать. Для сторонних программ это совершенно нереальная задача, слишком дорога поддержка.
Что касается вроде-как-открытого формата xlsx, то судя по тому, как часто мне приходится править парсер, вытаскивающий данные из него, майкрософт не стоит на месте.
Единственный выход я вижу в использовании csv, как уже написали ранее, но смотреть на его диффы довольно уныло, особенно, если поменяли колонку, а не строку.

[identity profile] aaalex.livejournal.com 2012-02-14 10:38 am (UTC)(link)
Хранить в CVS как бинарные файлы. Сравнивать и мержить сторонними утилитами. В ворде есть compare/merge. В екселе такого нет, но гугл много чего находит. Начиная с

http://superuser.com/questions/18626/how-do-i-compare-two-excel-documents

[identity profile] green-fr.livejournal.com 2012-02-14 12:42 pm (UTC)(link)
Я именно это и хочу сделать, уже поискал в google, перепробовал несколько, теперь вот ищу кого-нибудь, кто бы поделился опытом нормально работающей программы :-)

[identity profile] nikita goncharenko (from livejournal.com) 2012-02-14 01:45 pm (UTC)(link)
Не до конца понятна задача.
Но если нужно сравнить два CSV файла, не учитывая, скажем, каких-то колонок (строчки можно было бы и WinMerge сравнивать), то мы делали так (но это работало для нас, может я неверно понял вашу задачу):
1. Берем LogParser (http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=24659)
2. Пишем запрос, который бы выбросил те колонки, которые хотим выбросить из сравнения. Плюс, если нужно, сортировка
3. Исполняем этот запрос на двух версиях файла, которые нужно сравнить и результат сохраняем в отдельные файлы.
4. Сравниваем эти два результата любой тулзой для сравнения.

Этот метод легко автоматизируется. У нас он бежит по ночам на сотнях файлов.

[identity profile] green-fr.livejournal.com 2012-02-14 01:55 pm (UTC)(link)
Да, не совсем то, что надо.
Во-первых, у меня не текстовый CVS, а бинарный XLS. Во-вторых, не хочется писать ничего, потому что некому потом всё это поддерживать. Нужно какое-то готовое (платное, бесплатное, но живучее) решение. И результат сравнения должен быть по простоте чтения сравним с результатом стандартного diff'а, то есть полоьзователи совсем не программисты, они и diff'а-то пугаются.
В идеале - программа, которая прикручивается к CVS, и которая по клику compare with выдаёт картинку сравнения двух файлов.

[identity profile] green-fr.livejournal.com 2012-02-14 01:56 pm (UTC)(link)
Вот и я опечатался - вместо "текстового CVS" следует читать "текстовый CSV", конечно же :-)