Контроль версий для excel

Контроль версий файлов

Данный инструмент доступен для MS Excel и MS Word в надстройке Macro Tools VBA

Контроль версий файлов

Инструмент “контроль версии файлов” Excel позволяет хранить несколько версий файла Excel. При необходимости возвращаться к более ранним версиям. Определять, кто и когда сделал то или иное изменение.

При нажатии кнопки “Загрузить” – происходит замена текущего файла, выбранным файлом из хранилище. Текущий файл будет перезаписан, файлом из хранилища.

При нажатии кнопки “Открыть” –  открывается выбранный файл из хранилища параллельно с текущим файлом.

При нажатии кнопки “Создать” – создается новая версия файла в хранилище, с автоматическим присвоением номера версии файла и коментария.

Система контроля версий файлов Excel и Word инструмент надстройки Macro Tools VBA

Система контроля версий файлов Excel и Word

Taking @Demosthenex ‘s answer a step further, if you’d like to also keep track of the code in your Microsoft Excel Objects and UserForms you have to get a little bit tricky.

First I altered my SaveCodeModules() function to account for the different types of code I plan to export:

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

The UserForms can be exported and imported just like VBA code. The only difference is that two files will be created when a form is exported (you’ll get a .frm and a .frx file for each UserForm). One of these holds the software you’ve written and the other is a binary file which (I’m pretty sure) defines the layout of the form.

Microsoft Excel Objects (MEOs) (meaning Sheet1, Sheet2, ThisWorkbook etc) can be exported as a .cls file. However, when you want to get this code back into your workbook, if you attempt to import it the same way you would a VBA module, you’ll get an error if that sheet already exists in the workbook.

To get around this issue, I decided not to try to import the .cls file into Excel, but to read the .cls file into excel as a string instead, then paste this string into the empty MEO. Here is my 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

In case you’re confused by the dir input to both of these functions, that is just your code repository! So, you’d call these functions like:

SaveCodeModules "C:...YourDirectoryProjectsource"
ImportCodeModules "C:...YourDirectoryProjectsource"

 

nerv

Пользователь

Сообщений: 3071
Регистрация: 22.12.2012

Цитата
ikki пишет:
заманчиво. тащи и ягодки. чё уж теперь…

я только начал изучать и много чего не знаю. Например, можно отследить всю историю изменений файла. Можно сравнить любое временное состояние с любым (т.е. не только до и после). Можно вести коллективную разработку. Допустим, есть удаленный репозиторий(хранилище). Ты работаешь с проектом на локальной машине, делаешь частые правки, сохраняешь состояния, а на сервер заливаешь это все одним коммитом (состоянием). Возможность комментировать сохраненные состояния. Вообще, очень трудно что-то потерять в Git’е  :)

Цитата
EducatedFool пишет:
nerv, а ты уверен, что система контроля версий всегда (во всех случаях) удобнее?

ну, я сам нехотя на нее переходил, скептически относился поначалу. Даже сказал бы противился   :D   Первое впечатление: да, уверен.

Цитата
EducatedFool пишет:
В любой момент, я могу одним нажатием кнопки открыть в Excel любую из прежних версий

в Git’е практически так же

Цитата
EducatedFool пишет:
Или тот же Git позволит мне сравнивать разные версии кода VBA (даже из запароленных VBA-проектов)?

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

Цитата
EducatedFool пишет:
что мне надо нажать, чтобы текущая версия сохранилась?
Код
$ git add *
$ git commit

изначально Git это консольное приложение, но я работаю преимущество через GUI (одну кнопку). Там все как на ладони.

Цитата
EducatedFool пишет:
я так понимаю, на сервере сохраняется, а не на локальном компе?

храниться на локальной машине. На сервер пушится (push) при коллективной разработке или если ты сам этого захочешь. Вместе с тем, на сервере могут быть приватные и публичные репозитории (в моем примере публичный).

Цитата
EducatedFool пишет:
Сохраняется копия файла XLA целиком, или только код (одного модуля, или все модули)?

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

Цитата
EducatedFool пишет:
Или ты копируешь (экспортируешь) код модуля вручную?

тот пример был первый и сделан вручную. Позже планирую автоматизировать.

Изменено: nerv24.12.2012 15:22:38

Вопрос:

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

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

  • контроль версий для модулей VBA
  • более одного человека работает над электронной таблицей Excel, и они могут вносить изменения в тот же рабочий лист, который они хотят объединить и интегрировать. Этот рабочий лист может содержать формулы, данные, диаграммы и т.д.
  • пользователи не слишком технические, и чем меньше систем управления версиями, тем лучше
  • Ограничение пространства – это соображение. В идеале сохраняются только инкрементные изменения, а не вся электронная таблица Excel.

Лучший ответ:

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

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

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

Я установил каталог для моего репозитория BZR, X:DataMySheet. В репо находятся файлы 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:ToolsMyExcelMacros" & 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:DataMySheet" & ModuleName & ".vba"
           End If
        End If
    Next i
End With

End Sub

Далее, мы должны настроить привязки событий для открытия/сохранения для запуска этих макросов. В средстве просмотра кода щелкните правой кнопкой мыши “ThisWorkbook” и выберите “Просмотреть код”. Вам может потребоваться снять окно выбора в верхней части окна кода, чтобы перейти от представления “(Общий)” к представлению “Рабочая книга”.

Содержание представления “Рабочая книга”:

Private Sub Workbook_Open()

ImportCodeModules

End Sub

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

SaveCodeModules

End Sub

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

Спасибо за обмен кодом VBComponent!

Ответ №1

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

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

Ответ №2

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

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

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

Ответ №3

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

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

Ответ №4

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

  • Что:

    • Код (VBA)
    • Таблицы (формулы)
    • Таблицы (значения)
    • Диаграммы
  • Почему:

    • Журнал аудита
    • Сотрудничество
    • Сравнение версий ( “diffing” )
    • Слияние

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

  • Git
  • Mercurial
  • Subversion
  • Bazaar

Если ваша проблема связана только с кодом VBA в ваших книгах, то предлагаемый выше подход Demosthenex предлагает или VbaGit (https://github.com/brucemcpherson/VbaGit) работает очень хорошо работают и относительно просты в реализации. Преимущества заключаются в том, что вы можете положиться на проверенные системы контроля версий и выбрать один в соответствии с вашими потребностями (посмотрите https://help.github.com/articles/what-are-the-differences-between-svn-and-git/ для краткое сравнение между Git и Subversion).

Если вы не только беспокоитесь о коде, но и о данных в ваших листах ( “жестко закодированные” значения и результаты формулы), вы можете использовать для этого аналогичную стратегию: Сериализировать содержимое ваших листов в некоторый текстовый формат (через Range.) И использовать существующую систему управления версиями. Здесь очень хорошее сообщение в блоге об этом: https://wiki.ucl.ac.uk/display/~ucftpw2/2013/10/18/Using+git+for+version+control+of+spreadsheet+models+-+part+1+of+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.florencesoft.com/compare-excel-workbooks-differences.html). Но это еще одна задача для интеграции этих сравнений с системой управления версиями, например Git.

Наконец, вы должны решить рабочий процесс, который соответствует вашим потребностям. Для простого рабочего процесса Git для Excel просмотрите https://www.xltrail.com/blog/git-workflow-for-excel.

Ответ №5

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

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

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

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

Ответ №6

Принимая @Demosthenex, ответьте на шаг дальше, если вы хотите также отслеживать код в своих объектах Microsoft Excel и UserForms, вам нужно немного запутаться.

Сначала я изменил функцию 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 для каждого UserForm). Один из них содержит написанное вами программное обеспечение, а другой – двоичный файл, который (я уверен) определяет макет формы.

Объекты Microsoft Excel (MEOs) (что означает 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:...YourDirectoryProjectsource"
ImportCodeModules "C:...YourDirectoryProjectsource"

Ответ №7

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

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. Это сделало бы это. Я даже подумываю сделать это сам:)

Ответ №8

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

Это мой файл .gitconfig (это позволяет отличать script от моего проекта-репо):

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

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

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

my .gitattributes:

*.xlsx diff=xlsx

Ответ №9

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

Ответ №10

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

Ответ №11

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

Ответ №12

Ответ №13

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

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

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

Ответ №14

После поиска возрастов и тестирования множества различных инструментов я нашел свой ответ на проблему с управлением версиями vba: qaru.site/questions/42978/…

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

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

Ответ №15

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

Управление версиями XLTools для макросов VBA

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

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

Ответ №16

Существует также программа под названием Beyond Compare, которая имеет неплохое сравнение файлов Excel. Я нашел скриншот на китайском, который на короткое время показывает это:

Beyond Compare - comparing two excel files (Chinese)
Исходный источник изображения

Существует 30-дневная пробная версия на странице

Ответ №17

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

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

  • Откройте файл excel с LibreOffice Calc
  • В LibreOffice Calc
    • Файл
    • Сохранить как
    • Сохранить как тип: ODF Spreadsheet (.ods)
  • Закрыть LibreOffice Calc
  • переименуйте расширение нового файла с .ods на .zip
  • создать папку для электронной таблицы в поддерживаемой области GIT
  • извлеките почтовый индекс в папку GIT
  • передать GIT

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

Ответ №18

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

Ответ №19

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

Ответ №20

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

Ответ №21

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

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

Ответ №22

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

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

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

Rev Controlled Spreadsheet

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

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

  1. контроль версий для модулей VBA
  2. несколько человек работают над электронной таблицей Excel, и они могут вносить изменения в один и тот же рабочий лист, который они хотят объединить и интегрировать. Этот лист может иметь формулы, данные, графики и т. д.
  3. пользователи не слишком технические и чем меньше систем контроля версий используется, тем лучше
  4. ограничение пространства является соображением. В идеале сохраняются только инкрементные изменения, а не вся электронная таблица Excel.

23 ответов


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

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

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

Я настроил каталог для моего репозитория BZR, X:DataMySheet — … В репо 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:ToolsMyExcelMacros" & 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:DataMySheet" & ModuleName & ".vba"
           End If
        End If
    Next i
End With

End Sub

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

содержание Вид «рабочая книга»:

Private Sub Workbook_Open()

ImportCodeModules

End Sub

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

SaveCodeModules

End Sub

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

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


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

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


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

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

ссылка MSDN является здесь.


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

  • рассматривайте книгу как любое другое приложение. Отдельная логика, конфигурация и данные.
  • отдельный код из книги.
  • создайте пользовательский интерфейс программно.
  • написать a построить сценарий для восстановления книги.

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

  1. Что:

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

    • журнал аудита
    • сотрудничество
    • сравнение версий («сравнения»)
    • слияние

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

  • Git
  • ртутный
  • в Subversion
  • базар

Если ваша единственная забота-код VBA в ваших книгах, то подход Demosthenex выше предлагает или VbaGit (https://github.com/brucemcpherson/VbaGit) работа очень хорошо работает и относительно проста в реализации. Преимущества в том, что вы можете положиться на хорошо проверенные системы управления версиями и выбрать один в соответствии с вашими потребностями (посмотрите наhttps://help.github.com/articles/what-are-the-differences-between-svn-and-git/ для краткого сравнения между Git и Subversion).

Если вы не только беспокоитесь о коде, но и о данных в ваших листах («жестко закодированные» значения и результаты формул), вы можете использовать аналогичный стратегия для этого: сериализовать содержимое ваших листов в некоторый текстовый формат(через диапазон.Value) и использовать существующую систему управления версиями. Вот очень хороший пост в блоге об этом: https://wiki.ucl.ac.uk/display/~ucftpw2/2013/10/18/Using+git+for+version+control+of+spreadsheet+models+-+part+1+of+3

однако сравнение электронных таблиц является нетривиальной алгоритмической проблемой. Существует несколько инструментов, таких как сравнение электронных таблиц Microsoft (https://support.office.com/en-us/article/Overview-of-Spreadsheet-Compare-13fafa61-62aa-451b-8674-242ce5f2c986), Exceldiff (http://exceldiff.arstdesign.com/) и DiffEngineX (https://www.florencesoft.com/compare-excel-workbooks-differences.html). Но еще одна проблема-интегрировать это сравнение с системой управления версиями, такой как Git.

наконец, вы должны остановиться на рабочем процессе, который соответствует вашим потребностям. Для простого, с учетом Git для рабочего процесса Excel, посмотрите наhttps://www.xltrail.com/blog/git-workflow-for-excel.


работа над @Demosthenex work, @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

а затем в модуле рабочей книги:

Private Sub Workbook_Open()

    ImportCodeModules

End Sub

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

    SaveCodeModules

End Sub

принимая ответ @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

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

объекты Microsoft Excel (MEOs) (значение Sheet1, Sheet2, ThisWorkbook etc) можно экспортировать как . Однако, если вы хотите вернуть этот код в свою книгу, если вы попытаетесь импортировать его так же, как и модуль 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:...YourDirectoryProjectsource"
ImportCodeModules "C:...YourDirectoryProjectsource"

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

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. Этого достаточно. Я даже думаю сделать это сам:)


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

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

[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

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


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


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


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

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

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



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

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

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


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

управление версиями XLTools для макросов VBA

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

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


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


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

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

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


    существует также программа под названием Beyond Compare у этого есть довольно хороший файл Excel compare. Я нашел скриншот на китайском языке, который кратко выглядит так:

    Beyond Compare - comparing two excel files (Chinese)
    исходный источник изображения

    существует 30-дневная пробная версия на их страница


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


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


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

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


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

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

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

    Rev Контролируемая Электронная Таблица


    Понравилась статья? Поделить с друзьями:

    А вот еще интересные статьи:

  9. Контроль в microsoft excel
  10. Контроль в excel по датам
  11. Контроллер excel 800 honeywell xcl8010a
  12. Контент план шаблоны excel
  13. Контент план образец excel

  14. 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии