Najlepszy sposób na kontrolę wersji dla MS Excel

Jakich systemów kontroli wersji używałeś w MS Excel (2003/2007)? Co polecacie i dlaczego? Jakie ograniczenia znalazłeś w swoim najlepiej ocenianym systemie kontroli wersji?

Aby ująć to w perspektywie, oto kilka przypadków użycia:

  1. Kontrola wersji dla modułów VBA
  2. więcej niż jedna osoba pracuje nad arkuszem kalkulacyjnym Excel i może wprowadzać zmiany w tym samym arkuszu, który chce połączyć i zintegrować. Arkusz ten może mieć wzory, Dane, wykresy itp
  3. użytkownicy nie są zbyt techniczni, a im mniej używanych systemów kontroli wersji, tym lepiej
  4. ograniczenie przestrzeni jest brane pod uwagę. Najlepiej zapisać tylko przyrostowe zmiany, a nie cały arkusz kalkulacyjny Excel.
Author: jeroenh, 2008-09-25

23 answers

Właśnie skonfigurowałem arkusz kalkulacyjny, który używa Bazaar, z ręcznym checkin / out przez TortiseBZR. Biorąc pod uwagę, że temat pomógł mi z częścią save, chciałem opublikować moje rozwiązanie tutaj.

rozwiązaniem dla mnie było stworzenie arkusza kalkulacyjnego, który eksportuje wszystkie moduły na save, oraz usuwa i ponownie importuje Moduły na open. Tak, może to być potencjalnie niebezpieczne dla konwersji istniejących arkuszy kalkulacyjnych.

To pozwala mi edytować makra w modułach za pomocą Emacs (tak, emacs) lub natywnie w Excelu i zatwierdź moje repozytorium BZR po większych zmianach. Ponieważ wszystkie moduły są plikami tekstowymi, standardowe polecenia w stylu diff w BZR działają dla moich źródeł z wyjątkiem samego pliku Excel.

Ustawiłem katalog dla mojego repozytorium BZR, X:\Data\MySheet. W repo są moje Arkusze.xls i 1 .plik vba dla każdego z moich modułów (ie: Module1Macros). W moim arkuszu kalkulacyjnym dodałem jeden moduł, który jest zwolniony z cyklu eksportu / importu o nazwie "VersionControl". Każdy moduł, który ma zostać wyeksportowany i ponownie zaimportowany, musi kończyć się "makrami".

Zawartość modułu "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

Następnie musimy ustawić Hooki zdarzeń dla open / save, aby uruchomić te makra. W przeglądarce kodu kliknij prawym przyciskiem myszy "ThisWorkbook" i wybierz "Wyświetl kod". Być może trzeba będzie pociągnąć w dół pole wyboru u góry okna kodu, aby zmienić widok " (ogólny) "na widok" skoroszyt".

Zawartość widoku "skoroszyt":

Private Sub Workbook_Open()

ImportCodeModules

End Sub

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

SaveCodeModules

End Sub

I ' ll be settling do tego workflow w ciągu najbliższych kilku tygodni, i będę pisać, jeśli będę miał jakieś problemy.

Dzięki za udostępnienie kodu VBComponent!

 58
Author: Demosthenex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-23 21:11:57

TortoiseSVN jest zadziwiająco dobrym klientem Windows dla systemu kontroli wersji Subversion. Jedną z funkcji, którą właśnie odkryłem, jest to, że po kliknięciu, aby uzyskać różnicę między wersjami pliku Excel, otworzy się obie wersje w programie Excel i podświetli (na Czerwono) komórki, które zostały zmienione. Odbywa się to za pomocą magii skryptu vbs, opisanego tutaj .

Może okazać się to przydatne, nawet jeśli nie używasz TortoiseSVN.

 38
Author: mcherm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-07 15:52:46

To zależy od tego, czy mówimy o danych, czy o kodzie zawartym w arkuszu kalkulacyjnym. Chociaż mam silną niechęć do Microsoft Visual Sourcesafe i zwykle nie polecam go, to łatwo integruje się zarówno z Access, jak i Excel i zapewnia kontrolę źródeł modułów.

[w rzeczywistości integracja z Access, zawiera zapytania, raporty i moduły jako pojedyncze obiekty, które mogą być wersjonowane]

Łącze MSDN jest tutaj.

 8
Author: Mitch Wheat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 05:44:58

Nie znam narzędzia, które robi to dobrze, ale widziałem wiele domowych rozwiązań. Ich wspólnym wątkiem jest zminimalizowanie danych binarnych pod kontrolą wersji i zmaksymalizowanie danych tekstowych, aby wykorzystać moc konwencjonalnych systemów scc. Aby to zrobić:

  • traktuj skoroszyt jak każdą inną aplikację. Oddzielenie logiki, konfiguracji i danych.
  • oddziel Kod od skoroszytu.
  • Tworzenie interfejsu użytkownika programowo.
  • Napisz skrypt budowania, aby zrekonstruować skoroszyt.
 7
Author: Hobbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 09:19:09

Pozwól, że podsumuję, co chciałbyś kontrolować wersję i dlaczego:

  1. Co:

    • Code (VBA)
    • Arkusze Kalkulacyjne (Wzory)
    • Arkusze Kalkulacyjne (Wartości)
    • wykresy
    • ...
  2. Dlaczego:

    • Dziennik kontroli
    • Współpraca
    • Porównanie wersji ("różnicowanie")
    • Scalanie

Jak pisali tutaj inni, istnieje kilka rozwiązań oprócz istniejącej kontroli wersji systemy takie jak:

  • Git
  • Mercurial
  • Subversion
  • Bazar

Jeśli jedynym problemem jest kod VBA w swoich skoroszytach, to podejście Demosthenex powyżej proponuje lub VbaGit ( https://github.com/brucemcpherson/VbaGit ) działają bardzo dobrze i są stosunkowo proste do wdrożenia. Zaletą jest to, że możesz polegać na sprawdzonych systemach kontroli wersji i wybrać jeden zgodnie z własnymi potrzebami (zobacz https://help.github.com/articles/what-are-the-differences-between-svn-and-git / dla krótkiego porównania pomiędzy Git i Subversion).

Jeśli nie tylko martwisz się o kod, ale także o dane w arkuszach( wartości "zakodowane na twardo" i wyniki formuły), możesz użyć podobnej strategii: Serializuj zawartość arkuszy do jakiegoś formatu tekstowego (poprzez zakres.Wartość) i korzystać z istniejącego systemu kontroli wersji. Oto bardzo dobry wpis na blogu o tym: https://wiki.ucl.ac.uk/display/~ucftpw2/2013/10/18/Using+git+for+version+control+of+spreadsheet+models+-+part+1+of+3

Jednak porównanie arkusza kalkulacyjnego jest nietrywialnym problemem algorytmicznym. Istnieje kilka narzędzi wokół, takich jak Microsoft arkusz kalkulacyjny porównanie (https://support.office.com/en-us/article/Overview-of-Spreadsheet-Compare-13fafa61-62aa-451b-8674-242ce5f2c986), Exceldiff (http://exceldiff.arstdesign.com / ) i DiffEngineX ( https://www.florencesoft.com/compare-excel-workbooks-differences.html ). ale kolejnym wyzwaniem jest zintegrowanie tych porównań z systemem kontroli wersji, takim jak Git.

Wreszcie, musisz rozliczyć się z workflow, który odpowiada twoim potrzebom. Aby uzyskać prosty, dostosowany do potrzeb przepływ pracy Git dla programu Excel, spójrz na https://www.xltrail.com/blog/git-workflow-for-excel .

 6
Author: Bjoern Stiel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-21 07:04:16

Praca na @ Demosthenex praca, @ Tmdean i @ Jon Crowell bezcenne komentarze! (+1 them)

Zapisuję pliki modułów w git\ dir obok lokalizacji skoroszytu. Zmień to według swoich upodobań.

Nie będzie to śledzić zmian w kodzie skoroszytu. Więc to do ciebie, aby zsynchronizować je.

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

A następnie w module skoroszytu:

Private Sub Workbook_Open()

    ImportCodeModules

End Sub

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

    SaveCodeModules

End Sub
 5
Author: przemo_li,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-01 11:13:53

Biorąc @Demosthenex ' s odpowiedź krok dalej, jeśli chcesz również śledzić kod w obiektach Microsoft Excel i formularzach użytkownika, musisz być trochę trudne.

Najpierw zmieniłem swoją funkcję SaveCodeModules(), aby uwzględnić różne typy kodu, które planuję wyeksportować:

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

Formularze użytkownika mogą być eksportowane i importowane tak jak kod VBA. Jedyną różnicą jest to, że dwa pliki zostaną utworzone po wyeksportowaniu formularza (otrzymasz plik .frm i .frx dla każdego UserForm). Jeden z nich zawiera oprogramowanie, które napisałeś, a drugi jest plikiem binarnym, który (jestem prawie pewien) definiuje układ formularza.

Microsoft Excel Objects (MEOs) (znaczenie Sheet1, Sheet2, ThisWorkbook etc) można wyeksportować jako plik .cls. Jeśli jednak chcesz odzyskać ten kod do skoroszytu, jeśli spróbujesz zaimportować go w taki sam sposób, jak moduł VBA, pojawi się błąd, jeśli ten arkusz już istnieje w skoroszycie.

Aby obejść ten problem, ja postanowiłem nie próbować importować .plik cls do Excela, ale aby odczytać plik .cls do Excela jako ciąg znaków, wklej ten ciąg do pustego MEO. Oto mój 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

W przypadku, gdy jesteś zdezorientowany przez dir wejście do obu tych funkcji, to jest tylko twoje repozytorium kodu! Tak więc funkcje te można nazwać:

SaveCodeModules "C:\...\YourDirectory\Project\source\"
ImportCodeModules "C:\...\YourDirectory\Project\source\"
 5
Author: dslosky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-01 11:37:59

Jedną z rzeczy, które możesz zrobić, to mieć następujący fragment w swoim skoroszycie:

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
Znalazłem ten fragment w Internecie.

Następnie możesz użyć Subversion do utrzymania kontroli wersji. Na przykład poprzez użycie interfejsu wiersza poleceń Subversion z poleceniem 'shell' w VBA. To by wystarczyło. Zastanawiam się nawet nad zrobieniem tego samemu:)

 4
Author: GUI Junkie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-10 18:41:24

Używamgit , a dzisiaj przeportowałemTen (git-xlsx-textconv) do Pythona, ponieważ mój projekt opiera się na kodzie Pythona i współdziała z plikami Excel. To działa przez co najmniej .pliki xlsx , ale myślę, że zadziała dla .xls też. Oto link do Githuba. Napisałem dwie wersje, jedną z każdym wierszem na własnej linii, a drugą, w której każda komórka jest na własnej linii (ta ostatnia została napisana, ponieważ git diff nie lubi zawijać długich linii przez domyślnie, przynajmniej tutaj w Windows).

To jest moje .plik gitconfig (pozwala to na umieszczenie innego skryptu w repo mojego projektu):

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

Jeśli chcesz, aby skrypt był dostępny dla wielu różnych repo, użyj czegoś takiego:

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

Mój .gitattributes plik:

*.xlsx diff=xlsx
 3
Author: nmz787,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-16 08:02:48

Jeśli patrzysz na ustawienia pakietu office ze zwykłymi użytkownikami pakietu Office nietechnicznymi, Sharepoint jest realną alternatywą. Możesz skonfigurować foldery dokumentów z włączoną kontrolą wersji oraz checkins i checkouts. Czyni go bardziej swobodnym dla zwykłych użytkowników biurowych.

 2
Author: mattlant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 05:55:35

Użyj jednego ze standardowych narzędzi kontroli wersji, takich jak SVN lub CVS. Ograniczenia zależałyby od celu. Oprócz niewielkiego wzrostu rozmiaru repozytorium, nie napotkałem żadnych problemów

 1
Author: Dheer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 05:44:40

W odpowiedzi na odpowiedź mattlanta-sharepoint będzie działał dobrze jako kontrola wersji tylko wtedy, gdy funkcja kontroli wersji jest włączona w bibliotece dokumentów. ponadto należy pamiętać, że każdy kod, który wywołuje inne pliki za pomocą ścieżek względnych, nie będzie działał. i na koniec wszelkie łącza do zewnętrznych plików ulegną uszkodzeniu, gdy plik zostanie zapisany w programie sharepoint.

 1
Author: SpyJournal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-29 04:16:55

Powinieneś spróbować DiffEngineX. Może być wywoływany programowo, a także z linii poleceń, pobierając argumenty linii poleceń. Porównuje nie tylko komórki arkuszy kalkulacyjnych Excel, ale także makra Visual Basic osadzone w skoroszytach. Porównuje również nazwy zdefiniowane w Excelu i komentarze, które wiele darmowych narzędzi pomija. Można go pobrać ze strony

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

Jestem pewien, że Twój system kontroli wersji ma opcję lub pole, dzięki czemu możesz automatycznie wywoływać DiffEngineX z oryginalnymi i zmodyfikowanymi skoroszytami Excel.

 1
Author: Marisa Poulian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-04 14:33:38

Ja też się temu przyglądałem. Okazuje się, że najnowszy serwer Team Foundation 2010 może mieć dodatek Excel.

Oto wskazówka:

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

 1
Author: Jim Slavens,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-20 13:43:46

Po długich poszukiwaniach i wypróbowaniu wielu różnych narzędzi, znalazłem odpowiedź na problem kontroli wersji vba tutaj: https://stackoverflow.com/a/25984759/2780179

Jest to prosty dodatek do Excela, dla którego kod można znaleźć tutaj

Po zaimportowaniu nie ma duplikatów modułów. Eksportuje Kod automatycznie, gdy tylko zapiszesz skoroszyt, bez modyfikowania istniejących skoroszytów . Jest w komplecie z kodem vba formatter.

 1
Author: CodeKid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:43

W rzeczywistości istnieje tylko kilka rozwiązań do śledzenia i porównywania zmian w kodzie makra - większość z nich została już tutaj nazwana. Przeglądałem Sieć i natknąłem się na to nowe narzędzie, o którym warto wspomnieć:

XLTools Kontrola wersji dla makr VBA

  • Kontrola wersji arkuszy Excel i modułów VBA
  • podgląd i zmiany różnic przed zatwierdzeniem wersji
  • świetne do współpracy kilku użytkowników na tym samym pliku (utwór, który zmienił co/kiedy / komentarze)
  • porównywanie wersji i zaznaczanie zmian w kodzie linia po linii
  • Dla użytkowników, którzy nie znają się na technologiach lub nie znają się na Excelu]}
  • Historia wersji jest przechowywana w Git-repozytorium na twoim komputerze-każda wersja może być łatwo odzyskana

Wersje kodu VBA obok siebie, zmiany są wizualizowane

 1
Author: eriklind,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-12 17:00:40

Chciałbym polecić świetne narzędzie open-source o nazwie Rubberduck , które ma wbudowaną kontrolę wersji kodu VBA. Spróbuj!

 1
Author: Yuxiang Wang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-09 19:08:15

Być może próbowałeś użyć Microsoft Excel XML w kontenerze zip (.xlsx i .xslm) do kontroli wersji i okazało się, że vba został zapisany w vbaProject.bin (który jest bezużyteczny dla kontroli wersji).

Rozwiązanie jest proste.

  1. Otwórz plik excel za pomocą LibreOffice Calc
  2. W LibreOffice Calc
    1. Plik
    2. Zapisz jako
    3. Zapisz jako typ: arkusz kalkulacyjny ODF (.ods)
  3. Zamknij LibreOffice Calc
  4. Zmień nazwę nowego pliku przedłużenie od .ods do .zip
  5. Utwórz folder dla arkusza kalkulacyjnego w obszarze utrzymywanym przez GIT
  6. rozpakuj zip do folderu GIT
  7. commit to GIT

Gdy powtórzysz to w następnej wersji arkusza kalkulacyjnego, będziesz musiał upewnić się, że pliki folderu dokładnie pasują do plików w kontenerze zip (i nie zostawiaj żadnych usuniętych plików).

 0
Author: Dave Saunders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-06 06:48:22

Istnieje również program o nazwie Beyond Compare, który ma całkiem ładne porównanie plików Excel. Znalazłem zrzut ekranu w języku chińskim, który krótko pokazuje to:

Beyond Compare-porównanie dwóch plików excel (Chiński)
oryginalne źródło obrazu

Na ich stronie

 0
Author: mana,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-01 11:32:54

Moja Firma zajmuje się w znacznym stopniu automatyzacją rozwiązań Microsoft Office, więc napisałem .DLL, który wyeksportuje źródło rozwiązania za każdym razem, gdy szablon zostanie zapisany. Tworzy folder o nazwie Source jako potomek folderu, w którym zapisany jest szablon, a pod Source tworzy folder o tej samej nazwie co projekt VBA. W folderze projektu eksportuje cały kod źródłowy modułów, klas i formularzy użytkownika. Ten układ został wybrany, aby ułatwić Zarządzaj źródłem dużych kolekcji szablonów. Biblioteka DLL może odblokować zablokowane projekty, aby uzyskać dostęp do projektu VBA, jeśli masz dostępny lokalny plik konfiguracyjny lub globalny plik konfiguracyjny. Dzięki temu narzędziu programiści mogą pracować nad szablonami do swojej zawartości serca i używać swojego ulubionego narzędzia kontroli wersji do zarządzania swoją pracą. Używamy Git przede wszystkim w naszym środowisku i przechowujemy pełne pliki binarne szablonów, jak również zasoby VBA pod kontrolą Kontrola.

 0
Author: Chad Knudson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-07 17:21:04

To zależy od tego, jaki poziom integracji chcesz, użyłem Subversion / TortoiseSVN, który wydaje się w porządku dla prostego użycia. Dodałem również słowa kluczowe, ale wydaje się, że istnieje ryzyko uszkodzenia plików. Jest opcja w Subversion, aby substytucje słów kluczowych stały długość i o ile rozumiem, będzie działać, jeśli stała długość jest parzysta, ale nie nieparzysta. W każdym razie nie dostajesz żadnej użytecznej funkcji różnicowania, myślę, że istnieją komercyjne produkty, które zrobią "różnicowanie". Znalazłem coś, co robiło diff na podstawie konwersji rzeczy na zwykły tekst i porównywania tego, ale nie było to zbyt miłe.

 -1
Author: Ian Hopkinson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 05:45:05

Powinien działać z większością VC (w zależności od innych kryteriów można wybrać SVN, CVS, Darcs, TFS, itp.), Jednak w rzeczywistości będzie to kompletny plik (ponieważ jest to format binarny), co oznacza, że pytanie "co się zmieniło" nie jest tak łatwe do odpowiedzi.

Nadal możesz polegać na wiadomościach dziennika , Jeśli ludzie je wypełniają, ale możesz również wypróbować nowe formaty oparte na XML z Office 2007, aby uzyskać większą widoczność (chociaż nadal trudno byłoby przekopać się przez Tony XML, do tego AFAIK plik XML jest spakowany na dysk, więc potrzebujesz haka przed zatwierdzeniem, aby rozpakować go, aby tekst diff działał poprawnie).

 -1
Author: Grey Panther,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-25 05:52:30

Napisałem kontrolowany przez revision arkusz kalkulacyjny za pomocą VBA. Jest nastawiony bardziej na raporty inżynierskie, w których wiele osób pracuje nad listą materiałów lub harmonogramem, a następnie w pewnym momencie chcesz utworzyć przegląd migawek, który pokazuje dodaje, del i aktualizacje z poprzedniej wersji.

Uwaga: jest to skoroszyt z obsługą makr, który musisz zalogować się, aby pobrać z mojej strony (możesz użyć OpenID)

Cały kod jest odblokowany.

Regulacja Obrotów Arkusz kalkulacyjny

 -1
Author: Nate,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-05 06:36:21