Лучший способ сделать контроль версий для MS Excel

172

Какие системы контроля версий вы использовали с MS Excel (2003/2007)? Что бы вы порекомендовали и почему? Какие ограничения вы нашли с вашей системой контроля версий с самым высоким рейтингом?

Чтобы представить это в перспективе, вот несколько вариантов использования:

  1. контроль версий для модулей VBA
  2. над таблицей Excel работают несколько человек, и они могут вносить изменения в одну и ту же таблицу, которую они хотят объединить и интегрировать. Эта таблица может иметь формулы, данные, диаграммы и т. Д.
  3. пользователи не слишком техничны, и чем меньше систем контроля версий, тем лучше
  4. Ограничение пространства является соображением. В идеале сохраняются только инкрементные изменения, а не вся электронная таблица Excel.
Наблюдатель
источник
17
Google Apps / Docs не имеет полной функциональности MS Excel, которая необходима для более сложной работы, такой как моделирование.
TheObserver
25
@Richie Cotton. Если бы это был практический вариант (то есть использование matlab / python), то ВСЕ финансовые компании уже изменились бы. Спрашивать людей, которые анализируют финансовые модели, но не являются программистами, для того, чтобы быть программистами, в целом чревато опасностью и практически неосуществимо.
анонимный тип
1
stackoverflow.com/q/608872/107537 см. аналогичный вопрос здесь. Но это не касается самих листов. Только код VBA.
Виджей
7
Те, кто обвиняет моделирование Excel в кредитном кризисе, скорее всего, являются мошенниками, умышленно продающими мусор как AAA. Вам не нужна таблица, чтобы сказать, что инвестиции - это дерьмо. Будучи финансовым парнем, я могу сказать, что полная зависимость от любой модели - верный способ потерять свою задницу. Кроме того, любые модели хороши только тем, кто их создал. Если ты наймешь Морта для работы Эйнштейна, у тебя будет плохое время.
Eric J
Если вы в основном заинтересованы в управлении версиями в макросах VBA, посмотрите мой ответ здесь: stackoverflow.com/a/38297505/2146688
Чел

Ответы:

64

Я только что установил электронную таблицу, которая использует Bazaar, с ручной регистрацией / выходом через TortiseBZR. Учитывая, что тема помогла мне с сохранением, я хотел опубликовать свое решение здесь.

Для меня было решение создать электронную таблицу, которая экспортирует все модули при сохранении, а также удаляет и повторно импортирует модули при открытии. Да, это может быть потенциально опасно для преобразования существующих электронных таблиц.

Это позволяет мне редактировать макросы в модулях через Emacs (да, emacs) или непосредственно в Excel, а также фиксировать мой BZR-репозиторий после серьезных изменений. Поскольку все модули являются текстовыми файлами, стандартные команды diff-style в BZR работают для моих источников, кроме самого файла Excel.

Я установил каталог для моего репозитория BZR, X: \ Data \ MySheet. В репозитории находятся MySheet.xls и один файл .vba для каждого из моих модулей (то есть: Module1Macros). В свою электронную таблицу я добавил один модуль, который освобожден от цикла экспорта / импорта, который называется «VersionControl». Каждый экспортируемый и реимпортируемый модуль должен заканчиваться на «Макросы».

Содержимое модуля «VersionControl»:

Sub SaveCodeModules()

'This code Exports all VBA modules
Dim i%, sName$

With ThisWorkbook.VBProject
    For i% = 1 To .VBComponents.Count
        If .VBComponents(i%).CodeModule.CountOfLines > 0 Then
            sName$ = .VBComponents(i%).CodeModule.Name
            .VBComponents(i%).Export "X:\Tools\MyExcelMacros\" & sName$ & ".vba"
        End If
    Next i
End With

End Sub

Sub ImportCodeModules()

With ThisWorkbook.VBProject
    For i% = 1 To .VBComponents.Count

        ModuleName = .VBComponents(i%).CodeModule.Name

        If ModuleName <> "VersionControl" Then
            If Right(ModuleName, 6) = "Macros" Then
                .VBComponents.Remove .VBComponents(ModuleName)
                .VBComponents.Import "X:\Data\MySheet\" & ModuleName & ".vba"
           End If
        End If
    Next i
End With

End Sub

Затем мы должны установить перехватчики событий для открытия / сохранения, чтобы запустить эти макросы. В средстве просмотра кода щелкните правой кнопкой мыши «ThisWorkbook» и выберите «View Code». Возможно, вам придется снять поле выбора в верхней части окна кода, чтобы перейти из представления «(Общие) в представление« Рабочая книга ».

Содержание представления «Рабочая тетрадь»:

Private Sub Workbook_Open()

ImportCodeModules

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

SaveCodeModules

End Sub

Я буду работать над этим рабочим процессом в течение следующих нескольких недель, и я отправлю сообщение, если у меня будут какие-либо проблемы.

Спасибо, что поделились кодом VBComponent!

Demosthenex
источник
5
При повторном импорте вы также можете проверить тип модуля. ThisWorkbook.VBProject.VBComponents.Item (i) .Type: 1 для стандартного модуля, 2 для модуля класса, 3 для пользовательской формы и 100 для модуля документа (рабочей книги или листа).
Джон Кроуэлл
4
В коде импорта есть ошибка. Поскольку вы удаляете и импортируете модули, он меняет порядок модулей, поэтому каждый раз вы пропускаете несколько. Вам нужно изменить цикл For, чтобы вернуться назад через массив. например, для i = .VBComponents.Count To 1 Step -1
Tmdean
2
В Excel 2013 необходимо включить «Доверительный доступ к объектной модели проекта VBA» в центре управления безопасностью, в противном случае вы получите очень бесполезную ошибку 1004, если попытаетесь запустить этот код.
Робин Грин
8
Этот сценарий выше далек от совершенства. Подпрограмма importCodeModules () содержит ошибки и создает дубликаты модулей. Более того, вам нужно отредактировать каждую книгу, чтобы добавить события open и before_save. Это неприемлемо. После долгого поиска в Интернете я наконец-то нашел что-то, что на самом деле работает (что упоминается здесь ). Он имеет импорт кода, экспорт, форматирование кода и многое другое. Экспорт происходит автоматически при сохранении, и нет необходимости редактировать существующие книги.
CodeKid
5
Это отличная находка! Я бы предложил использовать это, а не мой сценарий выше. Я написал это однажды и использовал это некоторое время, это встретило мои потребности. Для тех, кто ежедневно использует Excel и VBA, программа или проект, предназначенные для этого экспорта, были бы гораздо более подходящими. Спасибо, что поделился!
Demosthenex
42

TortoiseSVN - удивительно хороший Windows-клиент для системы контроля версий Subversion. Одна функция, которую я только что обнаружил, заключается в том, что когда вы щелкаете, чтобы получить разницу между версиями файла Excel, он открывает обе версии в Excel и выделяет (красным) ячейки, которые были изменены. Это делается с помощью магического сценария VBS, описанного здесь .

Вы можете найти это полезным, даже если НЕ используете TortoiseSVN.

mcherm
источник
3
Так удивительно, что TortoiseSVN можно сравнить как встроенную функцию ^^
Nam G VU
2
Это то же самое с файлом Word?
Нам G VU
3
Я только что проверил - это также доступно для файла Word. Круто ^^
Nam G VU
Кажется, это не работает для кода VB. Любое решение для этого?
Manpreet Singh
10

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

  1. Какой:

    • Код (VBA)
    • Электронные таблицы (формулы)
    • Таблицы (значения)
    • Графики
    • ...
  2. Зачем:

    • Журнал аудита
    • сотрудничество
    • Сравнение версий («дифференцирование»)
    • сращивание

Как уже сообщали другие, есть несколько решений поверх существующих систем контроля версий, таких как:

  • Гит
  • ртутный
  • диверсия
  • базар

Если вас интересует только код 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 .

Бьерн Стил
источник
Обновление 2020: за голосование за ваше предложение xltrail.com/git-xl расширение git с открытым исходным кодом, создающее исходный код vba между коммитами, хотя и ограниченное, спасает меня от подверженных ошибкам импорта и экспорта
chingNotCHing
9

Это зависит от того, говорите ли вы о данных или коде, содержащемся в электронной таблице. Хотя я сильно не люблю Visual Sourcesafe от Microsoft и обычно не рекомендую его, он легко интегрируется как с Access, так и с Excel и обеспечивает контроль над источниками модулей.

[Фактически интеграция с Access включает запросы, отчеты и модули в виде отдельных объектов, которые могут быть версионированы]

Ссылка MSDN здесь .

Митч Пшеничный
источник
4
Один из лучших секретов - я не знал, что VSS сможет это сделать. +1
ConcernedOfTunbridgeWells
Я этого тоже не знал. Но в любом случае, VSS - это одна куча вещей, и я бы держался от этого подальше.
GUI Junkie
Я был взволнован и потратил целый час на поиски в сети, но похоже, что MS перестала поддерживать его в Excel 2003. Возможно, вам повезло, если вы работаете с Access VBA, но я не смотрел.
Урожай
1
Возможно, вы сможете использовать надстройку редакции Office для разработчиков ?: brandon.fuller.name/archives/2003/11/07/10.26.30
Митч Уит
7

Я не знаю инструмент, который делает это хорошо, но я видел множество отечественных решений. Общим для них является минимизация двоичных данных при управлении версиями и максимизация текстовых данных для использования возможностей традиционных систем scc. Сделать это:

  • Относитесь к книге как к любому другому приложению. Отдельная логика, конфиг и данные.
  • Отдельный код из рабочей книги.
  • Построить пользовательский интерфейс программно.
  • Напишите сценарий сборки, чтобы восстановить книгу.
Hobbo
источник
Зачем проходить через всю эту ерунду, когда все, что вам нужно, это контроль исходного кода, который обрабатывает двоичные объекты? SVN может сделать это.
Неизвестный кодер
15
Потому что вы не можете объединить двоичные объекты
igelineau
6

Работая над работой @Demosthenex, @Tmdean и @Jon Crowell бесценные комментарии! (+1 их)

Я сохраняю файлы модулей в git \ dir рядом с местом нахождения книги. Измените это по своему вкусу.

Это НЕ будет отслеживать изменения в коде книги. Так что вам решать синхронизировать их.

Sub SaveCodeModules()

'This code Exports all VBA modules
Dim i As Integer, name As String

With ThisWorkbook.VBProject
    For i = .VBComponents.count To 1 Step -1
        If .VBComponents(i).Type <> vbext_ct_Document Then
            If .VBComponents(i).CodeModule.CountOfLines > 0 Then
                name = .VBComponents(i).CodeModule.name
                .VBComponents(i).Export Application.ThisWorkbook.Path & _
                                            "\git\" & name & ".vba"
            End If
        End If
    Next i
End With

End Sub

Sub ImportCodeModules()
Dim i As Integer
Dim ModuleName As String

With ThisWorkbook.VBProject
    For i = .VBComponents.count To 1 Step -1

        ModuleName = .VBComponents(i).CodeModule.name

        If ModuleName <> "VersionControl" Then
            If .VBComponents(i).Type <> vbext_ct_Document Then
                .VBComponents.Remove .VBComponents(ModuleName)
                .VBComponents.Import Application.ThisWorkbook.Path & _
                                         "\git\" & ModuleName & ".vba"
            End If
        End If
    Next i
End With

End Sub

А затем в модуле Workbook:

Private Sub Workbook_Open()

    ImportCodeModules

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    SaveCodeModules

End Sub
przemo_li
источник
6

Если вы еще больше ответите на вопрос @Demosthenex, то, если вы хотите отслеживать код в ваших объектах Microsoft Excel и пользовательских формах, вам нужно немного усложнить ситуацию.

Сначала я изменил свою SaveCodeModules()функцию для учета различных типов кода, который я планирую экспортировать:

Sub SaveCodeModules(dir As String)

'This code Exports all VBA modules
Dim moduleName As String
Dim vbaType As Integer

With ThisWorkbook.VBProject
    For i = 1 To .VBComponents.count
        If .VBComponents(i).CodeModule.CountOfLines > 0 Then
            moduleName = .VBComponents(i).CodeModule.Name
            vbaType = .VBComponents(i).Type

            If vbaType = 1 Then
                .VBComponents(i).Export dir & moduleName & ".vba"
            ElseIf vbaType = 3 Then
                .VBComponents(i).Export dir & moduleName & ".frm"
            ElseIf vbaType = 100 Then
                .VBComponents(i).Export dir & moduleName & ".cls"
            End If

        End If
    Next i
End With

End Sub

Пользовательские формы можно экспортировать и импортировать так же, как код VBA. Разница лишь в том, что при экспорте формы будут созданы два файла (вы получите файл .frmи .frxфайл для каждой пользовательской формы). Один из них содержит программное обеспечение, которое вы написали, а другой - двоичный файл, который (я почти уверен) определяет макет формы.

Microsoft Excel Objects (СОО) ( это означает Sheet1, Sheet2, и ThisWorkbookт.д.) могут быть экспортированы в .clsфайл. Однако если вы захотите вернуть этот код в свою книгу, если вы попытаетесь импортировать его так же, как в модуле VBA, вы получите сообщение об ошибке, если этот лист уже существует в книге.

Чтобы обойти эту проблему, я решил не пытаться импортировать файл .cls в Excel, а .clsвместо этого прочитать файл в Excel в виде строки, а затем вставить эту строку в пустой MEO. Вот мои ImportCodeModules:

Sub ImportCodeModules(dir As String)

Dim modList(0 To 0) As String
Dim vbaType As Integer

' delete all forms, modules, and code in MEOs
With ThisWorkbook.VBProject
    For Each comp In .VBComponents

        moduleName = comp.CodeModule.Name

        vbaType = .VBComponents(moduleName).Type

        If moduleName <> "DevTools" Then
            If vbaType = 1 Or _
                vbaType = 3 Then

                .VBComponents.Remove .VBComponents(moduleName)

            ElseIf vbaType = 100 Then

                ' we can't simply delete these objects, so instead we empty them
                .VBComponents(moduleName).CodeModule.DeleteLines 1, .VBComponents(moduleName).CodeModule.CountOfLines

            End If
        End If
    Next comp
End With

' make a list of files in the target directory
Set FSO = CreateObject("Scripting.FileSystemObject")
Set dirContents = FSO.getfolder(dir) ' figure out what is in the directory we're importing

' import modules, forms, and MEO code back into workbook
With ThisWorkbook.VBProject
    For Each moduleName In dirContents.Files

        ' I don't want to import the module this script is in
        If moduleName.Name <> "DevTools.vba" Then

            ' if the current code is a module or form
            If Right(moduleName.Name, 4) = ".vba" Or _
                Right(moduleName.Name, 4) = ".frm" Then

                ' just import it normally
                .VBComponents.Import dir & moduleName.Name

            ' if the current code is a microsoft excel object
            ElseIf Right(moduleName.Name, 4) = ".cls" Then
                Dim count As Integer
                Dim fullmoduleString As String
                Open moduleName.Path For Input As #1

                count = 0              ' count which line we're on
                fullmoduleString = ""  ' build the string we want to put into the MEO
                Do Until EOF(1)        ' loop through all the lines in the file

                    Line Input #1, moduleString  ' the current line is moduleString
                    If count > 8 Then            ' skip the junk at the top of the file

                        ' append the current line `to the string we'll insert into the MEO
                        fullmoduleString = fullmoduleString & moduleString & vbNewLine

                    End If
                    count = count + 1
                Loop

                ' insert the lines into the MEO
                .VBComponents(Replace(moduleName.Name, ".cls", "")).CodeModule.InsertLines .VBComponents(Replace(moduleName.Name, ".cls", "")).CodeModule.CountOfLines + 1, fullmoduleString

                Close #1

            End If
        End If

    Next moduleName
End With

End Sub

В случае, если вас смущают dirвходные данные для обеих этих функций, это всего лишь ваш репозиторий кода! Итак, вы бы назвали эти функции как:

SaveCodeModules "C:\...\YourDirectory\Project\source\"
ImportCodeModules "C:\...\YourDirectory\Project\source\"
dslosky
источник
Небольшое примечание: мне не повезло, когда я выполнял настоящий контроль версий с помощью пользовательских форм из-за бинарных файлов. Если вы создаете несколько веток в своем git-репо, вы не сможете объединить их, если работаете с пользовательскими
формами
5

Я использую git , и сегодня я перенес это (git-xlsx-textconv) в Python, поскольку мой проект основан на коде Python и взаимодействует с файлами Excel. Это работает , по крайней мере .xlsx файлов, но я думаю , что он будет работать на .xls тоже. Вот ссылка на GitHub. Я написал две версии, одна с каждой строкой на отдельной строке, а другая - с каждой ячейкой на отдельной строке (последняя была написана потому, что git diff по умолчанию не любит переносить длинные строки, по крайней мере, здесь, в Windows).

Это мой файл .gitconfig (это позволяет сценарию dif находиться в репозитории моего проекта):

[diff "xlsx"]
    binary = true
    textconv = python `git rev-parse --show-toplevel`/src/util/git-xlsx-textconv.py

если вы хотите, чтобы скрипт был доступен для множества различных репозиториев, используйте что-то вроде этого:

[diff "xlsx"]
    binary = true
    textconv = python C:/Python27/Scripts/git-xlsx-textconv.py

мой файл .gitattributes :

*.xlsx diff=xlsx
nmz787
источник
3

Единственное, что вы можете сделать, это включить в свою книгу следующий фрагмент:

Sub SaveCodeModules()

'This code Exports all VBA modules
Dim i%, sName$

    With ThisWorkbook.VBProject
        For i% = 1 To .VBComponents.Count
            If .VBComponents(i%).CodeModule.CountOfLines > 0 Then
                sName$ = .VBComponents(i%).CodeModule.Name
                .VBComponents(i%).Export "C:\Code\" & sName$ & ".vba"
            End If
        Next i
    End With
End Sub

Я нашел этот фрагмент в Интернете.

После этого вы можете использовать Subversion для поддержки контроля версий. Например, используя интерфейс командной строки Subversion с командой 'shell' в VBA. Это сделало бы это. Я даже думаю сделать это сам :)

GUI Junkie
источник
Я думаю, что это отличный подход. Исходный контроль кода Excel может происходить только при декомпозиции. Это также подразумевает подход к сборке. Например, Code Cleaner может сделать это (бесплатное ПО) appspro.com/Utilities/CodeCleaner.htm, но в равной степени ваш код эквивалентен.
полиглот
Я пытался изменить это для работы с использованием Microsoft® Excel® для Mac 2011 версии 14.4.1. Строка, которая вызывает метод Export, тихо ничего не делает (независимо от правильно сформированных каталогов OS X, которые я использовал).
Д.А. Винсент
3

Я хотел бы порекомендовать отличный инструмент с открытым исходным кодом, называемый Rubberduck, в который встроен контроль версий кода VBA. Попробуйте!

Юсян Ван
источник
2

Если вы смотрите на офисные условия с обычными офисными не техническими пользователями, то Sharepoint является жизнеспособной альтернативой. Вы можете настроить папки документов с включенным контролем версий, а также проверками и проверками. Делает это freindlier для постоянных офисных пользователей.

mattlant
источник
2

в ответ на ответ mattlant - sharepoint будет хорошо работать как контроль версий, только если в библиотеке документов включена функция контроля версий. Кроме того, помните, что любой код, который вызывает другие файлы по относительным путям, не будет работать. и, наконец, любые ссылки на внешние файлы будут разорваны, когда файл будет сохранен в sharepoint.

SpyJournal
источник
1

Используйте любой из стандартных инструментов контроля версий, таких как SVN или CVS. Ограничения будут зависеть от цели. Помимо небольшого увеличения размера хранилища, я не столкнулся с какими-либо проблемами

Дер
источник
1

Вы должны попробовать DiffEngineX. Он может быть вызван программно, а также из командной строки, принимая аргументы командной строки. Он сравнивает не только ячейки электронных таблиц Excel, но и макросы Visual Basic, встроенные в рабочие книги. Также сравниваются имена и комментарии, определенные в Excel, которые пропускают многие бесплатные инструменты. Его можно скачать с

http://www.florencesoft.com/excel-differences-download.html

Я уверен, что ваша система контроля версий имеет опцию или поле, чтобы вы могли автоматически вызывать DiffEngineX с вашими оригинальными и измененными рабочими книгами Excel.

Мариса Поулиан
источник
12
В своем ответе вы должны указать, что вы связаны с этим коммерческим продуктом.
Ганс Олссон
1

Я тоже изучал это. Похоже, что последняя версия Team Foundation Server 2010 может иметь надстройку Excel.

Вот подсказка:

http://team-foundation-server.blogspot.com/2009/07/tf84037-there-was-problem-initializing.html

Джим Слэйвенс
источник
TFS интенсивно использует Excel в своих отчетах о рабочих элементах, к сожалению, это не связано с получением файлов Excel в системе контроля версий.
Брэд Р
1

После поиска возрастов и опробования множества различных инструментов я нашел свой ответ на проблему контроля версий vba здесь: https://stackoverflow.com/a/25984759/2780179

Это простой плагин для Excel, код которого можно найти здесь

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

CodeKid
источник
1

На самом деле существует всего несколько решений для отслеживания и сравнения изменений в макросах - большинство из них уже были названы здесь. Я просматривал Интернет и наткнулся на этот новый инструмент, о котором стоит упомянуть:

Контроль версий XLTools для макросов VBA

  • контроль версий для листов Excel и модулей VBA
  • Предварительный просмотр и изменение изменений перед фиксацией версии
  • отлично подходит для совместной работы нескольких пользователей над одним файлом (отслеживать, кто что изменил / когда / комментирует)
  • сравнивать версии и выделять изменения в коде построчно
  • Подходит для пользователей, которые не разбираются в технологиях или Excel
  • История версий хранится в Git-репозитории на вашем компьютере - любая версия может быть легко восстановлена

Версии кода VBA бок о бок, изменения визуализируются

eriklind
источник
0

Возможно, вы пытались использовать Microsoft Excel XML в zip-контейнере (.xlsx и .xslm) для контроля версий и обнаружили, что vba хранится в vbaProject.bin (который бесполезен для контроля версий).

Решение простое.

  1. Откройте файл Excel с LibreOffice Calc
  2. В LibreOffice Calc
    1. файл
    2. Сохранить как
    3. Сохранить как тип: электронная таблица ODF (.ods)
  3. Закрыть LibreOffice Calc
  4. переименуйте расширение файла нового файла из .ods в .zip
  5. создать папку для электронной таблицы в области, поддерживаемой GIT
  6. распакуйте архив в папку GIT
  7. совершить GIT

Когда вы повторите это со следующей версией электронной таблицы, вы должны будете убедиться, что файлы папки точно совпадают с файлами в zip-контейнере (и не оставляйте удаленные файлы позади).

Дейв Сондерс
источник
2
Этот подход чреват риском. Если впоследствии вы используете функцию в Excel, которая либо не реализована в Libre, либо не «сопоставляется» с Libre и верна обратно, этот подход потерпит неудачу. Это будет работать, я уверен, для простых электронных таблиц, но нужно быть очень осторожным. PW
Фил Уиттингтон
0

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

ActiveWorkbook.VBProject.VBComponents("moduleName").Export"C:\Path\To\Spreadsheet\moduleName.txt"

(Обнаружено в «Учебниках Тома» , в которых также описываются некоторые настройки, которые могут вам понадобиться для работы).

Поскольку я всегда запускаю макрос всякий раз, когда работаю над кодом, я гарантирую, что git примет изменения. Единственная раздражающая часть заключается в том, что если мне нужно оформить более раннюю версию, я должен вручную скопировать / вставить ее *.txtв электронную таблицу.

LShaver
источник
-1

Это зависит от того, какой уровень интеграции вы хотите, я использовал Subversion / TortoiseSVN, который подходит для простого использования. Я также добавил в ключевые слова, но есть риск повреждения файла. В Subversion есть возможность сделать подстановку ключевых слов фиксированной длины, и, насколько я понимаю, она будет работать, если фиксированная длина будет четной, но не нечётной. В любом случае вы не получаете никакой полезной функциональности diff, я думаю, что есть коммерческие продукты, которые будут делать diff. Я нашел кое-что, что делало diff, основанное на преобразовании материала в простой текст и сравнении этого, но это было не очень приятно.

Ян Хопкинсон
источник
-1

Он должен работать с большинством VCS (в зависимости от других критериев, которые вы можете выбрать SVN, CVS, Darcs, TFS и т. Д.), Однако на самом деле это будет полный файл (потому что это двоичный формат), то есть вопрос «что изменилось» не так легко ответить.

Вы можете по-прежнему полагаться на сообщения журнала, если люди их заполняют, но вы также можете попробовать новые форматы на основе XML из Office 2007, чтобы получить некоторую наглядность (хотя все равно будет сложно просочиться сквозь тонны XML, плюс AFAIK файл XML находится на диске, поэтому вам понадобится хук перед фиксацией, чтобы разархивировать текст для правильной работы diff).

Серая пантера
источник
-1

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

Примечание: это книга с поддержкой макросов, для загрузки которой необходимо войти с моего сайта (вы можете использовать OpenID)

Весь код разблокирован.

Rev Controlled Spreadsheet

Nate
источник
-1

Моя компания выполняет значительную работу по автоматизации решений Microsoft Office, поэтому я написал файл .DLL, который будет экспортировать источник решения при каждом сохранении шаблона. Он создает папку с именем Source как дочернюю для папки, в которой сохранен шаблон, а под Source создает папку с тем же именем, что и у проекта VBA. В папке проекта он экспортирует весь исходный код для модулей, классов и пользовательских форм. Это расположение было выбрано для упрощения управления источником для больших коллекций шаблонов. DLL может разблокировать заблокированные проекты, чтобы получить доступ к проекту VBA, если у вас есть локальный файл конфигурации или файл глобальной конфигурации. Используя этот инструмент, разработчики могут работать над шаблонами для своего сердца и использовать свой любимый инструмент контроля версий для управления своей работой.

Чед Кнудсон
источник
Чад - я рекомендую прочитать этот пост, о котором мне недавно стало известно: stackoverflow.com/help/promotion . Ваш ответ, кажется, нарушает "Не говори - покажи!" принцип. Вы говорите о своей компании и о решении, которое вы придумали, и делаете несколько ссылок на DLL, но вы не показываете, как вы это сделали, или даже не предоставляете доступ к DLL. Таким образом, этот ответ не соответствует духу этого сайта.
Colm Bhandal