Какие системы контроля версий вы использовали с MS Excel (2003/2007)? Что бы вы порекомендовали и почему? Какие ограничения вы нашли с вашей системой контроля версий с самым высоким рейтингом?
Чтобы представить это в перспективе, вот несколько вариантов использования:
- контроль версий для модулей VBA
- над таблицей Excel работают несколько человек, и они могут вносить изменения в одну и ту же таблицу, которую они хотят объединить и интегрировать. Эта таблица может иметь формулы, данные, диаграммы и т. Д.
- пользователи не слишком техничны, и чем меньше систем контроля версий, тем лучше
- Ограничение пространства является соображением. В идеале сохраняются только инкрементные изменения, а не вся электронная таблица Excel.
excel
version-control
Наблюдатель
источник
источник
Ответы:
Я только что установил электронную таблицу, которая использует Bazaar, с ручной регистрацией / выходом через TortiseBZR. Учитывая, что тема помогла мне с сохранением, я хотел опубликовать свое решение здесь.
Для меня было решение создать электронную таблицу, которая экспортирует все модули при сохранении, а также удаляет и повторно импортирует модули при открытии. Да, это может быть потенциально опасно для преобразования существующих электронных таблиц.
Это позволяет мне редактировать макросы в модулях через Emacs (да, emacs) или непосредственно в Excel, а также фиксировать мой BZR-репозиторий после серьезных изменений. Поскольку все модули являются текстовыми файлами, стандартные команды diff-style в BZR работают для моих источников, кроме самого файла Excel.
Я установил каталог для моего репозитория BZR, X: \ Data \ MySheet. В репозитории находятся MySheet.xls и один файл .vba для каждого из моих модулей (то есть: Module1Macros). В свою электронную таблицу я добавил один модуль, который освобожден от цикла экспорта / импорта, который называется «VersionControl». Каждый экспортируемый и реимпортируемый модуль должен заканчиваться на «Макросы».
Содержимое модуля «VersionControl»:
Затем мы должны установить перехватчики событий для открытия / сохранения, чтобы запустить эти макросы. В средстве просмотра кода щелкните правой кнопкой мыши «ThisWorkbook» и выберите «View Code». Возможно, вам придется снять поле выбора в верхней части окна кода, чтобы перейти из представления «(Общие) в представление« Рабочая книга ».
Содержание представления «Рабочая тетрадь»:
Я буду работать над этим рабочим процессом в течение следующих нескольких недель, и я отправлю сообщение, если у меня будут какие-либо проблемы.
Спасибо, что поделились кодом VBComponent!
источник
TortoiseSVN - удивительно хороший Windows-клиент для системы контроля версий Subversion. Одна функция, которую я только что обнаружил, заключается в том, что когда вы щелкаете, чтобы получить разницу между версиями файла Excel, он открывает обе версии в Excel и выделяет (красным) ячейки, которые были изменены. Это делается с помощью магического сценария VBS, описанного здесь .
Вы можете найти это полезным, даже если НЕ используете TortoiseSVN.
источник
Позвольте мне резюмировать, что вы хотели бы для контроля версий и почему:
Какой:
Зачем:
Как уже сообщали другие, есть несколько решений поверх существующих систем контроля версий, таких как:
Если вас интересует только код VBA в ваших книгах, то предложенный выше подход Demosthenex или VbaGit ( https://github.com/brucemcpherson/VbaGit ) работают очень хорошо и относительно просты в реализации. Преимущества заключаются в том, что вы можете положиться на хорошо зарекомендовавшие себя системы контроля версий и выбрать одну в соответствии с вашими потребностями (см. Https://help.github.com/articles/what-are-the-differences-between-svn-and -git / для краткого сравнения между Git и Subversion).
Если вы беспокоитесь не только о коде, но и о данных на ваших листах («жестко закодированные» значения и результаты формул), вы можете использовать аналогичную стратегию для этого: сериализовать содержимое ваших листов в некоторый текстовый формат (через Range.Value) и использовать существующую систему контроля версий. Вот очень хороший пост в блоге об этом: https://wiki.ucl.ac.uk/display/~ucftpw2/2013/10/18/Using+git+for+version+control+of+spreadsheet+models+-+part + 1 + 3 + из
Тем не менее, сравнение электронных таблиц является нетривиальной алгоритмической проблемой. Есть несколько инструментов, таких как Microsoft Spreadsheet Compare ( https://support.office.com/en-us/article/Overview-of-Spreadsheet-Compare-13fafa61-62aa-451b-8674-242ce5f2c986 ), Exceldiff ( http://exceldiff.arstdesign.com/ ) и DiffEngineX ( https://www.floferencesoft.com/compare-excel-workbooks-differences.html ). Но это еще одна проблема - интегрировать это сравнение с системой контроля версий, такой как Git.
Наконец, вы должны выбрать рабочий процесс, который соответствует вашим потребностям. Простой, адаптированный рабочий процесс Git для Excel можно найти по адресу https://www.xltrail.com/blog/git-workflow-for-excel .
источник
Это зависит от того, говорите ли вы о данных или коде, содержащемся в электронной таблице. Хотя я сильно не люблю Visual Sourcesafe от Microsoft и обычно не рекомендую его, он легко интегрируется как с Access, так и с Excel и обеспечивает контроль над источниками модулей.
[Фактически интеграция с Access включает запросы, отчеты и модули в виде отдельных объектов, которые могут быть версионированы]
Ссылка MSDN здесь .
источник
Я не знаю инструмент, который делает это хорошо, но я видел множество отечественных решений. Общим для них является минимизация двоичных данных при управлении версиями и максимизация текстовых данных для использования возможностей традиционных систем scc. Сделать это:
источник
Работая над работой @Demosthenex, @Tmdean и @Jon Crowell бесценные комментарии! (+1 их)
Я сохраняю файлы модулей в git \ dir рядом с местом нахождения книги. Измените это по своему вкусу.
Это НЕ будет отслеживать изменения в коде книги. Так что вам решать синхронизировать их.
А затем в модуле Workbook:
источник
Если вы еще больше ответите на вопрос @Demosthenex, то, если вы хотите отслеживать код в ваших объектах Microsoft Excel и пользовательских формах, вам нужно немного усложнить ситуацию.
Сначала я изменил свою
SaveCodeModules()
функцию для учета различных типов кода, который я планирую экспортировать:Пользовательские формы можно экспортировать и импортировать так же, как код VBA. Разница лишь в том, что при экспорте формы будут созданы два файла (вы получите файл
.frm
и.frx
файл для каждой пользовательской формы). Один из них содержит программное обеспечение, которое вы написали, а другой - двоичный файл, который (я почти уверен) определяет макет формы.Microsoft Excel Objects (СОО) ( это означает
Sheet1
,Sheet2
, иThisWorkbook
т.д.) могут быть экспортированы в.cls
файл. Однако если вы захотите вернуть этот код в свою книгу, если вы попытаетесь импортировать его так же, как в модуле VBA, вы получите сообщение об ошибке, если этот лист уже существует в книге.Чтобы обойти эту проблему, я решил не пытаться импортировать файл .cls в Excel, а
.cls
вместо этого прочитать файл в Excel в виде строки, а затем вставить эту строку в пустой MEO. Вот мои ImportCodeModules:В случае, если вас смущают
dir
входные данные для обеих этих функций, это всего лишь ваш репозиторий кода! Итак, вы бы назвали эти функции как:источник
Я использую git , и сегодня я перенес это (git-xlsx-textconv) в Python, поскольку мой проект основан на коде Python и взаимодействует с файлами Excel. Это работает , по крайней мере .xlsx файлов, но я думаю , что он будет работать на .xls тоже. Вот ссылка на GitHub. Я написал две версии, одна с каждой строкой на отдельной строке, а другая - с каждой ячейкой на отдельной строке (последняя была написана потому, что git diff по умолчанию не любит переносить длинные строки, по крайней мере, здесь, в Windows).
Это мой файл .gitconfig (это позволяет сценарию dif находиться в репозитории моего проекта):
если вы хотите, чтобы скрипт был доступен для множества различных репозиториев, используйте что-то вроде этого:
мой файл .gitattributes :
источник
Единственное, что вы можете сделать, это включить в свою книгу следующий фрагмент:
Я нашел этот фрагмент в Интернете.
После этого вы можете использовать Subversion для поддержки контроля версий. Например, используя интерфейс командной строки Subversion с командой 'shell' в VBA. Это сделало бы это. Я даже думаю сделать это сам :)
источник
Я хотел бы порекомендовать отличный инструмент с открытым исходным кодом, называемый Rubberduck, в который встроен контроль версий кода VBA. Попробуйте!
источник
Если вы смотрите на офисные условия с обычными офисными не техническими пользователями, то Sharepoint является жизнеспособной альтернативой. Вы можете настроить папки документов с включенным контролем версий, а также проверками и проверками. Делает это freindlier для постоянных офисных пользователей.
источник
в ответ на ответ mattlant - sharepoint будет хорошо работать как контроль версий, только если в библиотеке документов включена функция контроля версий. Кроме того, помните, что любой код, который вызывает другие файлы по относительным путям, не будет работать. и, наконец, любые ссылки на внешние файлы будут разорваны, когда файл будет сохранен в sharepoint.
источник
Используйте любой из стандартных инструментов контроля версий, таких как SVN или CVS. Ограничения будут зависеть от цели. Помимо небольшого увеличения размера хранилища, я не столкнулся с какими-либо проблемами
источник
Вы должны попробовать DiffEngineX. Он может быть вызван программно, а также из командной строки, принимая аргументы командной строки. Он сравнивает не только ячейки электронных таблиц Excel, но и макросы Visual Basic, встроенные в рабочие книги. Также сравниваются имена и комментарии, определенные в Excel, которые пропускают многие бесплатные инструменты. Его можно скачать с
http://www.florencesoft.com/excel-differences-download.html
Я уверен, что ваша система контроля версий имеет опцию или поле, чтобы вы могли автоматически вызывать DiffEngineX с вашими оригинальными и измененными рабочими книгами Excel.
источник
Я тоже изучал это. Похоже, что последняя версия Team Foundation Server 2010 может иметь надстройку Excel.
Вот подсказка:
http://team-foundation-server.blogspot.com/2009/07/tf84037-there-was-problem-initializing.html
источник
После поиска возрастов и опробования множества различных инструментов я нашел свой ответ на проблему контроля версий vba здесь: https://stackoverflow.com/a/25984759/2780179
Это простой плагин для Excel, код которого можно найти здесь
После импорта нет дублирующих модулей. Он экспортирует ваш код автоматически, как только вы сохраните свою книгу, без изменения существующих книг . Он поставляется вместе с форматером кода VBA.
источник
На самом деле существует всего несколько решений для отслеживания и сравнения изменений в макросах - большинство из них уже были названы здесь. Я просматривал Интернет и наткнулся на этот новый инструмент, о котором стоит упомянуть:
Контроль версий XLTools для макросов VBA
Версии кода VBA бок о бок, изменения визуализируются
источник
Возможно, вы пытались использовать Microsoft Excel XML в zip-контейнере (.xlsx и .xslm) для контроля версий и обнаружили, что vba хранится в vbaProject.bin (который бесполезен для контроля версий).
Решение простое.
Когда вы повторите это со следующей версией электронной таблицы, вы должны будете убедиться, что файлы папки точно совпадают с файлами в zip-контейнере (и не оставляйте удаленные файлы позади).
источник
Существует также программа Beyond Compare, которая имеет довольно хорошее сравнение файлов Excel. Я нашел скриншот на китайском языке, который кратко показывает это:
Исходный источник изображения
На их странице есть 30-дневная пробная версия
источник
Я нашел очень простое решение этого вопроса, которое отвечает моим потребностям. Я добавляю одну строку в конец всех моих макросов, которые экспортируют
*.txt
файл со всем кодом макроса при каждом запуске. Код:(Обнаружено в «Учебниках Тома» , в которых также описываются некоторые настройки, которые могут вам понадобиться для работы).
Поскольку я всегда запускаю макрос всякий раз, когда работаю над кодом, я гарантирую, что git примет изменения. Единственная раздражающая часть заключается в том, что если мне нужно оформить более раннюю версию, я должен вручную скопировать / вставить ее
*.txt
в электронную таблицу.источник
Это зависит от того, какой уровень интеграции вы хотите, я использовал Subversion / TortoiseSVN, который подходит для простого использования. Я также добавил в ключевые слова, но есть риск повреждения файла. В Subversion есть возможность сделать подстановку ключевых слов фиксированной длины, и, насколько я понимаю, она будет работать, если фиксированная длина будет четной, но не нечётной. В любом случае вы не получаете никакой полезной функциональности diff, я думаю, что есть коммерческие продукты, которые будут делать diff. Я нашел кое-что, что делало diff, основанное на преобразовании материала в простой текст и сравнении этого, но это было не очень приятно.
источник
Он должен работать с большинством VCS (в зависимости от других критериев, которые вы можете выбрать SVN, CVS, Darcs, TFS и т. Д.), Однако на самом деле это будет полный файл (потому что это двоичный формат), то есть вопрос «что изменилось» не так легко ответить.
Вы можете по-прежнему полагаться на сообщения журнала, если люди их заполняют, но вы также можете попробовать новые форматы на основе XML из Office 2007, чтобы получить некоторую наглядность (хотя все равно будет сложно просочиться сквозь тонны XML, плюс AFAIK файл XML находится на диске, поэтому вам понадобится хук перед фиксацией, чтобы разархивировать текст для правильной работы diff).
источник
Я написал таблицу с контролем версий, используя VBA. Он больше подходит для инженерных отчетов, когда над спецификацией или расписанием работают несколько человек, а затем в какой-то момент вы хотите создать ревизию моментального снимка, которая показывает добавления, изменения и обновления из предыдущей версии.
Примечание: это книга с поддержкой макросов, для загрузки которой необходимо войти с моего сайта (вы можете использовать OpenID)
Весь код разблокирован.
Rev Controlled Spreadsheet
источник
Моя компания выполняет значительную работу по автоматизации решений Microsoft Office, поэтому я написал файл .DLL, который будет экспортировать источник решения при каждом сохранении шаблона. Он создает папку с именем Source как дочернюю для папки, в которой сохранен шаблон, а под Source создает папку с тем же именем, что и у проекта VBA. В папке проекта он экспортирует весь исходный код для модулей, классов и пользовательских форм. Это расположение было выбрано для упрощения управления источником для больших коллекций шаблонов. DLL может разблокировать заблокированные проекты, чтобы получить доступ к проекту VBA, если у вас есть локальный файл конфигурации или файл глобальной конфигурации. Используя этот инструмент, разработчики могут работать над шаблонами для своего сердца и использовать свой любимый инструмент контроля версий для управления своей работой.
источник