Найкращий спосіб зробити контроль версій для MS Excel


172

Які системи управління версіями ви використовували з MS Excel (2003/2007)? Що б ти порадив і чому? Які обмеження ви знайшли у вашій системі управління версією за рейтингом?

Щоб зробити це перспективним, ось декілька випадків використання:

  1. управління версіями для модулів VBA
  2. більше однієї людини працює над таблицею Excel, і вони можуть вносити зміни до того ж робочого аркуша, який вони хочуть об'єднати та інтегрувати. Цей робочий аркуш може мати формули, дані, графіки тощо
  3. користувачі не надто технічні, і чим менше систем управління версіями, тим краще використовувати
  4. Обмеження у просторі - це врахування. В ідеалі зберігаються лише додаткові зміни, а не вся електронна таблиця Excel.

17
Google Apps / Документи не мають повного функціоналу MS Excel, який вам потрібен для виконання більш досконалої роботи, як моделювання.
TheObserver

25
@Richie Cotton. Якби це було практичним варіантом (тобто, використовуючи матлаб / пітон), то ВСІ фінансові компанії до цього часу змінилися б. Просити людей, які аналізують фінансові моделі, але не є програмістами, бути програмістами, це в цілому загрожує небезпекою і справді недоцільно.
Анонімний тип

1
stackoverflow.com/q/608872/107537 див. подібне запитання тут. Але це не стосується самих робочих аркушів. Тільки код VBA.
Vijay

7
Ті, хто звинувачує моделювання Excel у кризовій кризі, швидше за все, шахраї навмисно продають мотлох як AAA. Вам не потрібна електронна таблиця, щоб сказати, що інвестиція - це лайно. Будучи хлопцем з фінансів, я можу сказати вам, що повна залежність від будь-якої моделі є надійним способом до втрати дупи. Крім того, будь-які моделі є настільки ж хорошими, як і люди, які їх побудували. Якщо ви найнять Морта, щоб виконувати роботу Ейнштейна, вам буде погано провести час.
Eric J

Якщо ви найбільше зацікавлені в тому, щоб просто контролювати версії макросів VBA, дивіться мою відповідь тут: stackoverflow.com/a/38297505/2146688
Chel

Відповіді:


64

Я щойно налаштував електронну таблицю, яка використовує Bazaar, з ручною реєстрацією / виїздом через TortiseBZR. Зважаючи на те, що тема допомогла мені зберегти частину, я хотів опублікувати своє рішення тут.

Рішення для мене полягало в тому, щоб створити електронну таблицю, яка експортує всі модулі на збереження, а також видаляє та повторно імпортує модулі відкрито. Так, це може бути небезпечно для перетворення існуючих електронних таблиць.

Це дозволяє мені редагувати макроси в модулях через Emacs (так, emacs) або вроджене в Excel, а також виконувати своє сховище BZR після великих змін. Оскільки всі модулі є текстовими файлами, стандартні команди різного стилю в 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" і виберіть "Переглянути код". Можливо, вам доведеться зняти поле вибору у верхній частині вікна коду, щоб змінити його з "(загального)" на "робочу книжку".

Зміст перегляду "Робоча книжка":

Private Sub Workbook_Open()

ImportCodeModules

End Sub

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

SaveCodeModules

End Sub

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

Дякуємо, що поділилися кодом VBComponent!


5
Під час повторного імпортування можна також перевірити тип модуля. ThisWorkbook.VBProject.VBComponents.Item (i). Тип 1 для стандартного модуля, 2 для модуля класу, 3 для форми користувача та 100 для модуля документа (або робочої книги, або аркуша).
Джон Кроуелл

4
У коді імпорту є помилка. Оскільки ви видаляєте та імпортуєте модулі, він змінює порядок роботи модулів, тому кожного разу їх не вистачає. Вам потрібно змінити цикл For, щоб повернутися назад через масив. наприклад, для i = .VBComponents.Зайдіть на 1 крок -1
Tmdean

2
У Excel 2013 необхідно включити "Довірений доступ до об'єктної моделі об'єктів проекту VBA" в Центрі довіри, інакше ви отримаєте дуже непосильну помилку 1004, якщо спробуєте запустити цей код.
Робін Грін

8
Цей сценарій вище далеко не ідеальний. Підрозділ importCodeModules () є помилковим і створює повторювані модулі. Крім того, вам потрібно буде відредагувати кожну робочу книжку, щоб додати відкриті та попередні збереження події. Це неприпустимо. Після довгого пошуку в Інтернеті я нарешті знайшов щось, що насправді працює (про що тут йдеться ). У ньому є імпорт, експорт, форматування коду та інше. Експорт відбувається автоматично при збереженні та не потрібно редагувати жодні існуючі робочі книжки.
CodeKid

5
Це відмінна знахідка! Я б запропонував використовувати це, а не мій сценарій вище. Я писав це один раз і деякий час користувався ним, він відповідав моїм потребам. Для тих, хто щодня використовує Excel та VBA, програма чи проект, присвячений цьому експорту, було б набагато доречнішим. Дякую, що поділились!
Demosthenex

42

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

Ви можете вважати це корисним, навіть якщо НЕ використовуєте TortoiseSVN.


3
Настільки дивовижно знати, що TortoiseSVN можна порівняти як вбудовану функцію ^^
Nam G VU

2
Це те ж саме з файлом Word?
Нам Г ВУ

3
Я щойно тестував - це також доступно для файлу Word. Cool ^^
Nam G VU

Схоже, це не працює для коду VB. Будь-яке рішення для цього?
manpreet singh

10

Дозвольте підсумувати, що ви хочете контролювати версії і чому:

  1. Що:

    • Код (VBA)
    • Електронні таблиці (формули)
    • Електронні таблиці (Значення)
    • Діаграми
    • ...
  2. Чому:

    • Журнал аудиту
    • Співпраця
    • Порівняння версій ("відрізняється")
    • Злиття

Як опублікували інші, тут є кілька рішень поверх існуючих систем управління версіями, таких як:

  • Git
  • Меркуріал
  • Підрив
  • Базар

Якщо ви турбуєтесь лише про код 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 ( 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 .


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

9

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

[Насправді інтеграція з Access, включає запити, звіти та модулі як окремі об'єкти, на які можна впорядкувати]

Посилання MSDN тут .


4
Одна з найкраще збережених секретів - я не знав, що VSS може це зробити. +1
Занепокоєння

Я цього не знав. Але все одно, VSS - це одна купа s..t, і я б тримався подалі від цього.
GUI Junkie

Я був схвильований і витратив годину на те, щоб вичистити мережу для цього, але, схоже, MS перестала підтримувати це в Excel 2003. Можливо, вам пощастить, якщо це Access VBA, з яким ви працюєте, але я не дивився.
урожай316

1
можливо, ви зможете використовувати надбудову для розробника Office ?: brandon.fuller.name/archives/2003/11/07/10.26.30
Mitch Wheat

7

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

  • Ставтесь до робочої книги як до будь-якого іншого додатка. Окремі логіка, конфігурація та дані.
  • Відокремлений код від робочої книги.
  • Побудувати інтерфейс програмно.
  • Напишіть сценарій складання для відновлення робочої книги.

Навіщо переживати всю цю дурницю, коли все, що вам потрібно, - це джерело управління, яке обробляє бінарні об'єкти? 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

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

UserForms можна експортувати та імпортувати так само, як код 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\"

Швидке зауваження: мені не пощастило зробити справжній контроль версій з UserForms через двійкові файли. Якщо ви створюєте кілька гілок у своєму git repo, ви, можливо, не зможете їх об'єднати, якщо ви працюєте з UserForms
dslosky

5

Я використовую git , і сьогодні я переніс це (git-xlsx-textconv) на Python, оскільки мій проект заснований на коді Python, і він взаємодіє з файлами Excel. Це працює щонайменше для файлів .xlsx , але я думаю, що він буде працювати і для .xls . Ось посилання github. Я написав дві версії, одну з кожним рядком у власному рядку, а іншу, де кожна комірка знаходиться у своєму рядку (останній був написаний тому, що git diff не любить перетворювати довгі рядки за замовчуванням, принаймні тут, у Windows).

Це мій файл .gitconfig (це дозволяє різному сценарію перебувати в репо- ренентах мого проекту):

[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

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. Це зробило б це. Я навіть думаю про те, щоб зробити це сам :)


Я думаю, що це відмінний підхід. Управління джерелом коду Excel може відбуватися лише при розкладанні. Це також призвело б до побудови підходу. Cleaner Code Cleaner може це зробити, наприклад (безкоштовно я вважаю) appspro.com/Utilities/CodeCleaner.htm, але в рівній мірі ваш код еквівалентний.
поліглот

Я спробував модифікувати це для роботи за допомогою Microsoft® Excel® для Mac 2011 версії 14.4.1. Рядок, що викликає метод експорту тихо, нічого не робить (незалежно від добре сформованих каталогів OS X, якими я користувався).
DA Vincent

3

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


2

Якщо ви дивитесь на офісні установки з постійними офісними не технічними користувачами, то Sharepoint - це цілком можлива альтернатива. Ви можете налаштувати папки документів із увімкненим контролем версій та реєстрацією та оформленням замовлень. Це робить freindlier для постійних користувачів офісу.


2

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


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.


1

Насправді існує лише декілька рішень для відстеження та порівняння змін у макрокоді - більшість із них уже названі тут. Я переглядав Інтернет та натрапив на цей новий інструмент, який варто згадати:

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

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

Версії коду VBA поруч, зміни візуалізуються


0

Можливо, ви спробували використовувати Microsoft Excel XML у контейнері zip (.xlsx та .xslm) для контролю версій, і виявили, що vba зберігається в vbaProject.bin (що не є корисним для контролю версій).

Рішення просте.

  1. Відкрийте файл excel за допомогою LibreOffice Calc
  2. У LibreOffice Calc
    1. Файл
    2. Зберегти як
    3. Зберегти як тип: електронна таблиця ODF (.ods)
  3. Закрити Calc LibreOffice
  4. перейменуйте розширення файлу нового файлу з .ods в .zip
  5. створити папку для електронної таблиці у зоні, де підтримується GIT
  6. витягніть блискавку в папку GIT
  7. зобов’язатися з GIT

Якщо ви повторите це з наступною версією електронної таблиці, вам доведеться переконатися, що файли папки точно збігаються з файлами в zip-контейнері (і не залишайте видалених файлів позаду).


2
Такий підхід загрожує ризиком. Якщо згодом ви скористаєтесь функцією в Excel, яка або не реалізована у Libre, або яка не "відображається" на Libre та назад правильно, такий підхід буде порушений. Це буде працювати, я впевнений, для простих електронних таблиць, але потрібно бути дуже обережним. PW
Phil Whittington


0

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

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

(Знайдено в підручниках Тома , який також охоплює деякі налаштування, які можуть знадобитися для роботи.)

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


-1

Це залежить від того, який рівень інтеграції ви хочете, я використовував Subversion / TortoiseSVN, що здається прекрасним для простого використання. Я також додав ключові слова, але, мабуть, існує ризик пошкодження файлів. У Subversion є можливість зробити заміщення ключових слів фіксованою довжиною, і наскільки я розумію, воно буде працювати, якщо фіксована довжина буде парною, але не непарною. У будь-якому випадку ви не отримаєте корисних функцій diff, я думаю, що існують комерційні продукти, які будуть робити "diff". Я знайшов щось, що було різним на основі перетворення матеріалів у звичайний текст і порівняння цього, але це було не дуже приємно.


-1

Він повинен працювати з більшістю VCS (залежно від інших критеріїв ви можете обрати SVN, CVS, Darcs, TFS тощо), однак він фактично буде повним файлом (оскільки це двійковий формат), що означає, що питання "що змінилося" відповісти не так просто.

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


-1

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

Примітка. Це робоча книжка з макросом, яку потрібно увійти, щоб завантажити з мого сайту (ви можете використовувати OpenID)

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

Електронна таблиця з контролером обертів


-1

Моя компанія робить значну кількість роботи над автоматизацією рішень Microsoft Office, тому я написала .DLL, який буде експортувати джерело рішення кожного разу, коли шаблон зберігається. Він створює папку з назвою Source як дочірню частину папки, в якій зберігається шаблон, а під Source створює папку з тим же ім'ям, що і VBA Project. У папку проекту він експортує весь вихідний код для модулів, класів та форм користувача. Ця композиція була обрана для полегшення управління джерелом для великих колекцій шаблонів. DLL може розблокувати заблоковані проекти, щоб отримати доступ до проекту VBA, якщо у вас є локальний файл конфігурації або глобальний файл конфігурації. Використовуючи цей інструмент, розробники можуть працювати над шаблонами для вмісту їхніх сердець та використовувати улюблений інструмент контролю версій для управління їх роботою.


Чад - рекомендую прочитати цю публікацію, про яку нещодавно мені стало відомо: stackoverflow.com/help/promotion . Здається, ваша відповідь порушує "Не кажи - шоу!" Ви говорите про свою компанію та рішення, яке ви запропонували, і зробите ряд посилань на DLL, але ви не показуєте нам, як це зробили, або навіть надаєте доступ до DLL. Відповідно, ця відповідь не в дусі цього веб-сайту.
Колм Бхандал
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.