Z jakich systemów kontroli wersji korzystałeś w programie MS Excel (2003/2007)? Co byś polecił i dlaczego? Jakie ograniczenia napotkałeś w swoim najlepiej ocenianym systemie kontroli wersji?
Aby spojrzeć na to z perspektywy, oto kilka przypadków użycia:
- kontrola wersji dla modułów VBA
- więcej niż jedna osoba pracuje nad arkuszem kalkulacyjnym Excel i może wprowadzać zmiany w tym samym arkuszu, który chce scalić i zintegrować. Ten arkusz może zawierać formuły, dane, wykresy itp
- użytkownicy nie są zbyt techniczni, a im mniej systemów kontroli wersji jest używanych, tym lepiej
- Należy wziąć pod uwagę ograniczenie przestrzeni. W idealnym przypadku zapisywane są tylko zmiany przyrostowe, a nie cały arkusz kalkulacyjny programu Excel.
excel
version-control
Obserwator
źródło
źródło
Odpowiedzi:
Właśnie skonfigurowałem arkusz kalkulacyjny, który używa Bazaar, z ręcznym zameldowaniem / wymeldowaniem przez TortiseBZR. Biorąc pod uwagę, że temat pomógł mi z częścią oszczędzania, chciałem zamieścić tutaj moje rozwiązanie.
Rozwiązaniem dla mnie było utworzenie arkusza kalkulacyjnego, który eksportuje wszystkie moduły przy zapisywaniu i usuwa i ponownie importuje moduły przy otwieraniu. Tak, może to być potencjalnie niebezpieczne w przypadku konwersji istniejących arkuszy kalkulacyjnych.
To pozwala mi edytować makra w modułach za pośrednictwem Emacsa (tak, emacs) lub natywnie w Excelu i zatwierdzać moje repozytorium BZR po dużych 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.
Skonfigurowałem katalog dla mojego repozytorium BZR, X: \ Data \ MySheet. W repozytorium znajdują się MySheet.xls i jeden plik .vba dla każdego z moich modułów (np. 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ę napisem „Makra”.
Zawartość modułu „VersionControl”:
Następnie musimy ustawić punkty zaczepienia zdarzeń dla otwierania / zapisywania, aby uruchomić te makra. W przeglądarce kodu kliknij prawym przyciskiem myszy „ThisWorkbook” i wybierz „View Code”. Może być konieczne rozwinięcie pola wyboru u góry okna kodu, aby zmienić widok z widoku „(Ogólne)” na „Skoroszyt”.
Zawartość widoku „Skoroszyt”:
W ciągu następnych kilku tygodni będę dostosowywać się do tego przepływu pracy i opublikuję, jeśli mam jakiekolwiek problemy.
Dziękujemy za udostępnienie kodu VBComponent!
źródło
TortoiseSVN to zadziwiająco dobry klient Windows dla systemu kontroli wersji Subversion. Jedną z funkcji, którą właśnie odkryłem, jest to, że kiedy klikniesz, aby uzyskać różnicę między wersjami pliku Excel, otworzy 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 ci się to przydać, nawet jeśli NIE używasz TortoiseSVN.
źródło
Pozwólcie, że podsumuję, co chcielibyście kontrolować wersji i dlaczego:
Co:
Czemu:
Jak napisali tutaj inni, istnieje kilka rozwiązań oprócz istniejących systemów kontroli wersji, takich jak:
Jeśli Twoim jedynym zmartwieniem jest kod VBA w skoroszytach, to podejście, które proponuje Demosthenex, lub VbaGit ( https://github.com/brucemcpherson/VbaGit ) działa bardzo dobrze i jest stosunkowo proste do wdrożenia. Zaletą jest to, że możesz polegać na sprawdzonych systemach kontroli wersji i wybrać taki zgodnie ze swoimi potrzebami (zajrzyj na https://help.github.com/articles/what-are-the-differences-between-svn-and -git / dla krótkiego porównania między Git i Subversion).
Jeśli martwisz się nie tylko o kod, ale także o dane w arkuszach (wartości „zakodowane na stałe” i wyniki formuł), możesz zastosować podobną strategię: Serializuj zawartość arkuszy do jakiegoś formatu tekstowego (za pośrednictwem Range.Value) i użyj istniejącego systemu kontroli wersji. Oto bardzo dobry wpis na blogu na ten temat: https://wiki.ucl.ac.uk/display/~ucftpw2/2013/10/18/Using+git+for+version+control+of+spreadsheet+models+-+part + 1 + z + 3
Jednak porównanie arkuszy kalkulacyjnych jest nietrywialnym problemem algorytmicznym. Istnieje kilka narzędzi, takich jak porównanie arkuszy kalkulacyjnych firmy Microsoft ( 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.floreailabilityoft.com/compare-excel-workbooks-differences.html ). Ale kolejnym wyzwaniem jest zintegrowanie tego porównania z systemem kontroli wersji, takim jak Git.
Wreszcie, musisz zdecydować się na przepływ pracy, który odpowiada Twoim potrzebom. Aby zapoznać się z prostym, dostosowanym przepływem pracy Git for Excel, zajrzyj na https://www.xltrail.com/blog/git-workflow-for-excel .
źródło
Zależy to od tego, czy mówisz o danych, czy o kodzie zawartym w arkuszu kalkulacyjnym. Chociaż mam silną niechęć do Visual Sourcesafe firmy Microsoft i normalnie nie polecałbym go, łatwo integruje się zarówno z Access, jak i Excelem, i zapewnia kontrolę źródła modułów.
[W rzeczywistości integracja z Access obejmuje zapytania, raporty i moduły jako pojedyncze obiekty, które można wersjonować]
Link MSDN jest tutaj .
źródło
Nie znam narzędzia, które robi to dobrze, ale widziałem wiele własnych rozwiązań. Ich wspólnym wątkiem jest minimalizacja danych binarnych pod kontrolą wersji i maksymalizacja danych tekstowych w celu wykorzystania możliwości konwencjonalnych systemów scc. Aby to zrobić:
źródło
Praca nad dziełem @Demosthenex, nieocenione komentarze @Tmdean i @Jon Crowell! (Daj im +1)
Zapisuję pliki modułów w git \ dir obok lokalizacji skoroszytu. Zmień to według własnych upodobań.
NIE spowoduje to śledzenia zmian w kodzie skoroszytu. Więc to do Ciebie należy ich synchronizacja.
A następnie w module skoroszyt:
źródło
Idąc o krok dalej z odpowiedzią @Demosthenex, jeśli chcesz również śledzić kod w swoich obiektach Microsoft Excel i formularzach użytkownika, musisz trochę skomplikować.
Najpierw zmieniłem
SaveCodeModules()
funkcję, aby uwzględnić różne typy kodu, które planuję wyeksportować:Formularze użytkownika można eksportować i importować, podobnie jak kod VBA. Jedyną różnicą jest to, że po wyeksportowaniu formularza zostaną utworzone dwa pliki (otrzymasz
.frm
i.frx
plik dla każdego UserForm). Jeden z nich zawiera napisane przez Ciebie oprogramowanie, a drugi to plik binarny, który (jestem prawie pewien) definiuje układ formularza.Microsoft Excel Objects (meos) (w rozumieniu
Sheet1
,Sheet2
,ThisWorkbook
etc) mogą być eksportowane w postaci.cls
pliku. Jednak jeśli chcesz odzyskać ten kod w skoroszycie, jeśli spróbujesz zaimportować go w taki sam sposób, jak w przypadku modułu VBA, pojawi się błąd, jeśli ten arkusz już istnieje w skoroszycie.Aby obejść ten problem, postanowiłem nie próbować importować pliku .cls do programu Excel, ale
.cls
zamiast tego wczytać plik do programu Excel jako ciąg znaków, a następnie wkleić ten ciąg do pustego MEO. Oto moje ImportCodeModules:Jeśli jesteś zdezorientowany danymi
dir
wejściowymi do obu tych funkcji, jest to tylko repozytorium kodu! Tak więc nazwałbyś te funkcje:źródło
Używam git , a dziś przeportowałem to (git-xlsx-textconv) do Pythona, ponieważ mój projekt jest oparty na kodzie Pythona i współdziała z plikami Excel. Działa to przynajmniej z plikami .xlsx , ale myślę, że będzie działać również dla plików .xls . Oto link do github. Napisałem dwie wersje, jedną z każdym wierszem w osobnym wierszu i drugą, w której każda komórka znajduje się w osobnym wierszu (ta ostatnia została napisana, ponieważ git diff nie lubi domyślnie zawijać długich linii, przynajmniej tutaj w systemie Windows).
To jest mój plik .gitconfig (umożliwia to umieszczenie skryptu Different w repozytorium mojego projektu):
jeśli chcesz, aby skrypt był dostępny dla wielu różnych repozytoriów, użyj czegoś takiego:
mój plik .gitattributes :
źródło
Jedną z rzeczy, które możesz zrobić, to mieć następujący fragment kodu w swoim skoroszycie:
Znalazłem ten fragment w Internecie.
Później możesz użyć Subversion do utrzymania kontroli wersji. Na przykład używając interfejsu wiersza poleceń Subversion z poleceniem „powłoka” w VBA. To wystarczy. Myślę nawet o zrobieniu tego samodzielnie :)
źródło
Chciałbym polecić świetne narzędzie open source o nazwie Rubberduck, które ma wbudowaną kontrolę wersji kodu VBA. Wypróbuj!
źródło
Jeśli szukasz miejsca w biurze ze zwykłymi użytkownikami, którzy nie mają wiedzy technicznej, Sharepoint jest realną alternatywą. Możesz skonfigurować foldery dokumentów z włączoną kontrolą wersji oraz checkins i checkouts. Sprawia, że jest bardziej przyjazny dla zwykłych użytkowników biurowych.
źródło
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 zadziała. i wreszcie wszelkie łącza do plików zewnętrznych zostaną zerwane, gdy plik zostanie zapisany w programie SharePoint.
źródło
Użyj dowolnego ze standardowych narzędzi do kontroli wersji, takich jak SVN lub CVS. Ograniczenia zależałyby od celu. Oprócz niewielkiego zwiększenia rozmiaru repozytorium nie napotkałem żadnych problemów
źródło
Powinieneś wypróbować DiffEngineX. Można go wywołać programowo, a także z wiersza poleceń, pobierając argumenty wiersza poleceń. Porównuje nie tylko komórki arkuszy kalkulacyjnych programu Excel, ale także makra języka Visual Basic osadzone w skoroszytach. Porównuje również nazwy i komentarze zdefiniowane w programie Excel, których wiele bezpłatnych narzędzi pomija. Można go pobrać z
http://www.floreimentsoft.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 programu Excel.
źródło
Też się temu przyjrzałem. Wygląda na to, że najnowszy Team Foundation Server 2010 może mieć dodatek programu Excel.
Oto wskazówka:
http://team-foundation-server.blogspot.com/2009/07/tf84037-there-was-problem-initializing.html
źródło
Po wyszukaniu grup wiekowych i wypróbowaniu wielu różnych narzędzi, znalazłem odpowiedź na problem z kontrolą wersji vba tutaj: https://stackoverflow.com/a/25984759/2780179
To prosty dodatek do programu Excel, którego kod można znaleźć tutaj
Po zaimportowaniu nie ma zduplikowanych modułów. Eksportuje kod automatycznie, gdy tylko zapiszesz skoroszyt, bez modyfikowania istniejących skoroszytów . Jest dołączany do programu formatującego kod VBA.
źródło
W rzeczywistości istnieje tylko kilka rozwiązań do śledzenia i porównywania zmian w kodzie makr - większość z nich została już tutaj wymieniona. Przeglądałem sieć i natknąłem się na to nowe narzędzie, o którym warto wspomnieć:
Kontrola wersji XLTools dla makr VBA
Wersje kodu VBA obok siebie, zmiany są wizualizowane
źródło
Być może próbowałeś użyć Microsoft Excel XML w kontenerze zip (.xlsx i .xslm) do kontroli wersji i odkryłeś, że vba jest przechowywany w vbaProject.bin (który jest bezużyteczny do kontroli wersji).
Rozwiązanie jest proste.
Gdy powtórzysz to z następną wersją arkusza kalkulacyjnego, będziesz musiał upewnić się, że pliki folderu są dokładnie zgodne z tymi w kontenerze zip (i nie zostawiaj żadnych usuniętych plików w tyle).
źródło
Istnieje również program o nazwie Beyond Compare, który ma całkiem niezłe porównanie plików Excel. Znalazłem zrzut ekranu w języku chińskim, który krótko pokazuje to:
Oryginalne źródło obrazu
Na ich stronie jest 30-dniowy okres próbny
źródło
Znalazłem bardzo proste rozwiązanie tego pytania, które odpowiada moim potrzebom. Dodaję jedną linię na dole wszystkich moich makr, która eksportuje
*.txt
plik z całym kodem makra za każdym razem, gdy jest uruchamiany. Kod:(Znalezione w samouczkach Toma , które obejmują również niektóre konfiguracje, których możesz potrzebować, aby to działało).
Ponieważ zawsze będę uruchamiał makro, gdy pracuję nad kodem, mam gwarancję, że git wykryje zmiany. Jedyną irytującą częścią jest to, że jeśli muszę pobrać wcześniejszą wersję, muszę ręcznie skopiować / wkleić z
*.txt
arkusza do arkusza kalkulacyjnego.źródło
To zależy od tego, jaki poziom integracji chcesz, użyłem Subversion / TortoiseSVN, który wydaje się być w porządku do prostego użycia. Dodałem również słowa kluczowe, ale wydaje się, że istnieje ryzyko uszkodzenia plików. W Subversion istnieje opcja, aby podstawiać słowa kluczowe o stałej długości i, o ile rozumiem, będzie działać, jeśli stała długość jest parzysta, ale nie dziwna. W każdym razie nie dostaniesz żadnej użytecznej funkcji porównywania, myślę, że są produkty komercyjne, które zrobią 'diff'. Znalazłem coś, co robiło różnicę, polegające na konwersji rzeczy do zwykłego tekstu i porównaniu tego, ale nie było to zbyt przyjemne.
źródło
Powinien działać z większością VCS (w zależności od innych kryteriów możesz 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” brzmi nie tak łatwo odpowiedzieć.
Nadal możesz polegać na komunikatach dziennika, jeśli ludzie je wypełnią, ale możesz również wypróbować nowe formaty oparte na XML z pakietu Office 2007, aby uzyskać większą widoczność (chociaż nadal byłoby trudno przefiltrować tony XML, a także AFAIK plik XML jest spakowany na dysku, więc do jego rozpakowania potrzebny byłby punkt zaczepienia przed zatwierdzeniem, aby różnica tekstowa działała poprawnie).
źródło
Napisałem arkusz kalkulacyjny z kontrolą wersji przy użyciu VBA. Jest bardziej nastawiony na raporty inżynieryjne, w których wiele osób pracuje nad wykazem materiałów lub harmonogramem, a następnie w pewnym momencie chcesz utworzyć wersję migawki, która pokazuje dodania, usunięcia i aktualizacje z poprzedniej wersji.
Uwaga: jest to skoroszyt z obsługą makr, który musisz zalogować się, aby pobrać z mojej witryny (możesz użyć OpenID)
Cały kod jest odblokowany.
Rev Controlled Spreadsheet
źródło
Moja firma wykonuje znaczną pracę w zakresie automatyzacji rozwiązań Microsoft Office, dlatego napisałem .DLL, który będzie eksportował źródło rozwiązania za każdym razem, gdy zapisywany jest szablon. Tworzy folder o nazwie Source jako element podrzędny folderu, w którym zapisano szablon, a pod źródłem 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. To ustawienie zostało wybrane, aby ułatwić zarządzanie źródłem dużych zbiorów szablonów. Biblioteka DLL może odblokować zablokowane projekty, aby uzyskać dostęp do projektu VBA, jeśli masz lokalny plik konfiguracyjny lub globalny plik konfiguracyjny. Dzięki temu narzędziu programiści mogą pracować nad szablonami według ich treści i używać swojego ulubionego narzędzia do kontroli wersji do zarządzania swoją pracą.
źródło