Sistem kontrol versi apa yang telah Anda gunakan dengan MS Excel (2003/2007)? Apa yang akan Anda rekomendasikan dan Mengapa? Keterbatasan apa yang Anda temukan dengan sistem kontrol versi teratas?
Untuk menempatkan ini dalam perspektif, berikut adalah beberapa kasus penggunaan:
- kontrol versi untuk modul VBA
- lebih dari satu orang sedang mengerjakan lembar kerja Excel dan mereka mungkin membuat perubahan pada lembar kerja yang sama, yang mereka ingin gabungkan dan integrasikan. Lembar kerja ini mungkin memiliki rumus, data, bagan, dll
- para pengguna tidak terlalu teknis dan semakin sedikit sistem kontrol versi yang digunakan, semakin baik
- Kendala ruang adalah pertimbangan. Idealnya hanya perubahan bertahap yang disimpan daripada seluruh spreadsheet Excel.
excel
version-control
Pengamat
sumber
sumber
Jawaban:
Saya baru saja menyiapkan spreadsheet yang menggunakan Bazaar, dengan checkin / keluar manual melalui TortiseBZR. Mengingat bahwa topik tersebut membantu saya dengan porsi penyimpanan, saya ingin memposting solusi saya di sini.
Solusi bagi saya adalah membuat spreadsheet yang mengekspor semua modul pada penyimpanan, dan menghapus dan mengimpor kembali modul pada saat terbuka. Ya, ini bisa berpotensi berbahaya untuk mengonversi spreadsheet yang ada.
Ini memungkinkan saya untuk mengedit makro dalam modul melalui Emacs (ya, emacs) atau asli di Excel, dan melakukan repositori BZR saya setelah perubahan besar. Karena semua modul adalah file teks, perintah gaya-diff standar dalam BZR berfungsi untuk sumber saya kecuali file Excel itu sendiri.
Saya telah menyiapkan direktori untuk repositori BZR saya, X: \ Data \ MySheet. Dalam repo adalah MySheet.xls dan satu file .vba untuk masing-masing modul saya (yaitu: Module1Macros). Dalam spreadsheet saya, saya telah menambahkan satu modul yang dikecualikan dari siklus ekspor / impor yang disebut "VersionControl". Setiap modul yang akan diekspor dan diimpor kembali harus diakhiri dengan "Makro".
Isi modul "VersionControl":
Selanjutnya, kita harus mengatur kait acara untuk buka / simpan untuk menjalankan makro ini. Di penampil kode, klik kanan pada "ThisWorkbook" dan pilih "View Code". Anda mungkin harus menarik ke bawah kotak pilih di bagian atas jendela kode untuk berubah dari tampilan "(Umum)" ke tampilan "Buku Kerja".
Isi tampilan "Buku Kerja":
Saya akan menyelesaikan alur kerja ini selama beberapa minggu ke depan, dan saya akan memposting jika saya memiliki masalah.
Terima kasih telah berbagi kode VBComponent!
sumber
TortoiseSVN adalah klien Windows yang sangat baik untuk sistem kontrol versi Subversion. Satu fitur yang baru saja saya temukan yang dimilikinya adalah ketika Anda mengklik untuk mendapatkan perbedaan antara versi file Excel, itu akan membuka kedua versi di Excel dan menyorot (merah) sel-sel yang diubah. Ini dilakukan melalui keajaiban skrip vbs, yang dijelaskan di sini .
Anda mungkin menemukan ini berguna bahkan jika TIDAK menggunakan TortoiseSVN.
sumber
Biarkan saya meringkas apa yang ingin Anda kontrol versi dan mengapa:
Apa:
Mengapa:
Seperti yang telah diposting orang lain di sini, ada beberapa solusi di atas sistem kontrol versi yang ada seperti:
Jika satu-satunya masalah Anda adalah kode VBA di buku kerja Anda, maka pendekatan yang diusulkan Demosthenex di atas atau VbaGit ( https://github.com/brucemcpherson/VbaGit ) berfungsi dengan sangat baik dan relatif mudah diterapkan. Keuntungannya adalah bahwa Anda dapat mengandalkan sistem kontrol versi yang telah terbukti dan memilih satu sesuai dengan kebutuhan Anda (lihat di https://help.github.com/articles/what-are-the-the-differences-between-svn-and -git / untuk perbandingan singkat antara Git dan Subversion).
Jika Anda tidak hanya khawatir tentang kode tetapi juga tentang data di sheet Anda (nilai-nilai "hardcoded" dan hasil rumus), Anda dapat menggunakan strategi serupa untuk itu: Serialise konten sheet Anda ke dalam beberapa format teks (melalui Range.Value) dan menggunakan sistem kontrol versi yang ada. Berikut ini adalah posting blog yang sangat bagus tentang ini: https://wiki.ucl.ac.uk/display/~ucftpw2/2013/10/18/Menggunakan+git+untuk versiversion+control+ of+ spreadsheet+models+-+part + 1 + dari + 3
Namun, perbandingan spreadsheet adalah masalah algoritme non-sepele. Ada beberapa alat di sekitar, seperti Microsoft's Spreadsheet Compare ( https://support.office.com/en-us/article/Overview-of-S spreadsheet-Compare- 13fafa61-62aa-451b-8674-242ce5f2c986), Exceldiff ( http://exceldiff.arstdesign.com/ ) dan DiffEngineX ( https://www.florencesoft.com/compare-excel-workbooks-differences.html ). Tapi itu tantangan lain untuk mengintegrasikan perbandingan ini dengan sistem kontrol versi seperti Git.
Akhirnya, Anda harus puas dengan alur kerja yang sesuai dengan kebutuhan Anda. Untuk alur kerja Git untuk Excel yang sederhana dan disesuaikan, lihat di https://www.xltrail.com/blog/git-workflow-for-excel .
sumber
Itu tergantung apakah Anda berbicara tentang data, atau kode yang terkandung dalam spreadsheet. Meskipun saya sangat tidak menyukai Visual Sourcesafe dari Microsoft dan biasanya tidak akan merekomendasikannya, itu memang terintegrasi dengan baik dengan Access dan Excel, dan menyediakan kontrol sumber modul.
[Sebenarnya integrasi dengan Access, termasuk permintaan, laporan, dan modul sebagai objek individual yang dapat diversi]
Tautan MSDN ada di sini .
sumber
Saya tidak mengetahui alat yang melakukan ini dengan baik, tetapi saya telah melihat berbagai solusi buatan sendiri. Utas umum dari ini adalah untuk meminimalkan data biner di bawah kontrol versi dan memaksimalkan data tekstual untuk meningkatkan kekuatan sistem scc konvensional. Untuk melakukan ini:
sumber
Mengerjakan komentar @Demosthenex, @Tmdean dan @Jon Crowell komentar yang sangat berharga! (Memberi +1 pada mereka)
Saya menyimpan file modul di git \ dir di sebelah lokasi buku kerja. Ubah itu sesuai keinginan Anda.
Ini TIDAK akan melacak perubahan pada kode Buku Kerja. Jadi terserah Anda untuk menyinkronkannya.
Dan kemudian dalam modul Workbook:
sumber
Mengambil jawaban @Demosthenex selangkah lebih maju, jika Anda juga ingin melacak kode di Microsoft Excel Objects dan UserForms Anda harus sedikit rumit.
Pertama saya mengubah
SaveCodeModules()
fungsi saya untuk menjelaskan berbagai jenis kode yang saya rencanakan untuk diekspor:UserForms dapat diekspor dan diimpor seperti kode VBA. Satu-satunya perbedaan adalah bahwa dua file akan dibuat ketika formulir diekspor (Anda akan mendapatkan
.frm
dan.frx
file untuk setiap UserForm). Salah satunya memegang perangkat lunak yang Anda tulis dan yang lainnya adalah file biner yang (saya cukup yakin) mendefinisikan tata letak formulir.Microsoft Excel Objects (Meos) (artinya
Sheet1
,Sheet2
,ThisWorkbook
dll) dapat diekspor sebagai.cls
file yang. Namun, saat Anda ingin mendapatkan kode ini kembali ke buku kerja Anda, jika Anda mencoba untuk mengimpornya dengan cara yang sama Anda akan modul VBA, Anda akan mendapatkan kesalahan jika lembar itu sudah ada di buku kerja.Untuk mengatasi masalah ini, saya memutuskan untuk tidak mencoba mengimpor file .cls ke Excel, tetapi untuk membaca
.cls
file menjadi excel sebagai string, kemudian tempelkan string ini ke MEO kosong. Inilah ImportCodeModules saya:Jika Anda bingung dengan
dir
input kedua fungsi ini, itu hanyalah repositori kode Anda! Jadi, Anda akan memanggil fungsi-fungsi ini seperti:sumber
Saya menggunakan git , dan hari ini saya porting ini (git-xlsx-textconv) ke Python, karena proyek saya didasarkan pada kode Python, dan itu berinteraksi dengan file Excel. Ini berfungsi setidaknya untuk file .xlsx , tapi saya pikir ini juga akan berfungsi untuk .xls . Inilah tautan github. Saya menulis dua versi, satu dengan setiap baris pada barisnya masing-masing, dan yang lain di mana setiap sel pada barisnya sendiri (yang terakhir ditulis karena git beda tidak suka untuk membungkus garis panjang secara default, setidaknya di sini di Windows).
Ini adalah file .gitconfig saya (ini memungkinkan skrip yang berbeda berada di repo proyek saya):
jika Anda ingin skrip tersedia untuk banyak repo yang berbeda, maka gunakan sesuatu seperti ini:
.gitattributes sayafile :
sumber
Satu hal yang dapat Anda lakukan adalah memiliki cuplikan berikut di Buku Kerja Anda:
Saya menemukan cuplikan ini di Internet.
Setelah itu, Anda bisa menggunakan Subversion untuk mempertahankan kontrol versi. Misalnya dengan menggunakan antarmuka baris perintah Subversion dengan perintah 'shell' dalam VBA. Itu akan berhasil. Saya bahkan berpikir untuk melakukan ini sendiri :)
sumber
Saya ingin merekomendasikan alat open-source yang hebat yang disebut Rubberduck yang memiliki kontrol versi kode VBA built in. Cobalah!
sumber
Jika Anda melihat pengaturan kantor dengan pengguna kantor biasa non teknis daripada Sharepoint adalah alternatif yang layak. Anda dapat mengatur folder dokumen dengan kontrol versi diaktifkan dan checkin dan checkout. Jadikan freindlier untuk pengguna kantor biasa.
sumber
sebagai respons terhadap balasan mattlant - sharepoint akan berfungsi dengan baik sebagai kontrol versi hanya jika fitur kontrol versi dihidupkan di pustaka dokumen. juga perlu diperhatikan bahwa kode apa pun yang memanggil file lain dengan jalur relatif tidak akan berfungsi. dan akhirnya semua tautan ke file eksternal akan terputus ketika file disimpan di sharepoint.
sumber
Gunakan alat kontrol versi standar seperti SVN atau CVS. Keterbatasan akan tergantung pada apa tujuannya. Terlepas dari peningkatan kecil dalam ukuran repositori, saya tidak menghadapi masalah apa pun
sumber
Anda harus mencoba DiffEngineX. Ia dapat dipanggil secara terprogram dan juga dari baris perintah dengan argumen baris perintah. Itu tidak hanya membandingkan sel-sel lembar kerja Excel, tetapi juga makro Visual Basic yang tertanam di buku kerja. Juga membandingkan nama dan komentar terdefinisi Excel, yang kehilangan banyak alat freeware. Itu dapat diunduh dari
http://www.florencesoft.com/excel-differences-download.html
Saya yakin sistem kontrol versi Anda memiliki opsi atau kotak sehingga Anda dapat secara otomatis memanggil DiffEngineX dengan buku kerja Excel Anda yang asli dan yang dimodifikasi.
sumber
Saya telah melihat ini juga. Tampaknya Team Foundation Server 2010 terbaru mungkin memiliki Add-In Excel.
Inilah petunjuknya:
http://team-foundation-server.blogspot.com/2009/07/tf84037-there-was-problem-initializing.html
sumber
Setelah mencari lama dan mencoba berbagai alat, saya menemukan jawaban saya untuk masalah kontrol versi vba di sini: https://stackoverflow.com/a/25984759/2780179
Ini adalah addin excel sederhana yang kodenya dapat ditemukan di sini
Tidak ada modul duplikat setelah mengimpor. Ini mengekspor kode Anda secara otomatis, segera setelah Anda menyimpan buku kerja Anda, tanpa mengubah buku kerja yang ada . Itu datang bersama dengan formatter kode vba.
sumber
Sebenarnya hanya ada beberapa solusi untuk melacak dan membandingkan perubahan dalam kode makro - sebagian besar sudah disebutkan di sini. Saya telah menjelajahi web dan menemukan alat baru ini yang layak disebut:
Kontrol Versi XLTools untuk makro VBA
Versi kode VBA berdampingan, perubahan divisualisasikan
sumber
Anda mungkin telah mencoba menggunakan Microsoft Excel XML dalam wadah zip (.xlsx dan .xslm) untuk kontrol versi dan menemukan bahwa vba disimpan di vbaProject.bin (yang tidak berguna untuk kontrol versi).
Solusinya sederhana.
Ketika Anda mengulanginya dengan versi spreadsheet berikutnya Anda harus memastikan bahwa Anda membuat file folder persis sama dengan yang ada di wadah zip (dan jangan tinggalkan file yang dihapus).
sumber
Ada juga program yang disebut Beyond Compare yang memiliki perbandingan file Excel yang cukup bagus. Saya menemukan tangkapan layar dalam bahasa Cina yang menunjukkan secara singkat ini:
Sumber gambar asli
Ada uji coba 30 hari di halaman mereka
sumber
Saya menemukan solusi yang sangat sederhana untuk pertanyaan ini yang memenuhi kebutuhan saya. Saya menambahkan satu baris ke bagian bawah semua makro saya yang mengekspor
*.txt
file dengan seluruh kode makro setiap kali dijalankan. Kode:(Ditemukan di Tutorial Tom , yang juga mencakup beberapa pengaturan yang mungkin Anda perlukan agar ini berfungsi.)
Karena saya akan selalu menjalankan makro setiap kali saya mengerjakan kode, saya dijamin bahwa git akan mengambil perubahan. Satu-satunya bagian yang mengganggu adalah bahwa jika saya perlu checkout versi sebelumnya, saya harus secara manual menyalin / menempelkannya
*.txt
ke dalam spreadsheet.sumber
Tergantung pada tingkat integrasi yang Anda inginkan, saya telah menggunakan Subversion / TortoiseSVN yang tampaknya baik untuk penggunaan sederhana. Saya juga menambahkan kata kunci tetapi tampaknya ada risiko korupsi file. Ada opsi di Subversion untuk membuat penggantian kata kunci panjang tetap dan sejauh yang saya mengerti itu akan berfungsi jika panjang tetapnya genap tetapi tidak aneh. Dalam hal apa pun Anda tidak mendapatkan fungsionalitas dif yang berguna, saya pikir ada produk komersial yang akan melakukan 'diff'. Saya memang menemukan sesuatu yang tidak berdasarkan konversi barang menjadi teks biasa dan membandingkannya, tapi itu tidak terlalu bagus.
sumber
Ini harus bekerja dengan sebagian besar VCS (tergantung pada kriteria lain Anda dapat memilih SVN, CVS, Darcs, TFS, dll), namun itu sebenarnya akan menjadi file lengkap (karena ini adalah format biner), yang berarti bahwa pertanyaan "apa yang diubah" adalah tidak begitu mudah dijawab.
Anda masih dapat mengandalkan pesan log jika orang melengkapinya, tetapi Anda juga dapat mencoba format berbasis XML baru dari Office 2007 untuk mendapatkan lebih banyak visibilitas (meskipun masih sulit untuk menyiangi melalui banyak XML, ditambah AFAIK file XML) zip pada disk, jadi Anda akan memerlukan kait pra-komit untuk unzip agar diff teks berfungsi dengan benar).
sumber
Saya menulis revisi spreadsheet terkontrol menggunakan VBA. Ini lebih diarahkan untuk laporan teknik di mana Anda memiliki banyak orang yang mengerjakan Bill Of Material atau Schedule dan kemudian pada suatu saat Anda ingin membuat revisi snapshot yang menunjukkan penambahan, del, dan pembaruan dari rev sebelumnya.
Catatan: ini adalah buku kerja berkemampuan makro yang harus Anda masuk untuk mengunduh dari situs saya (Anda dapat menggunakan OpenID)
Semua kode tidak terkunci.
Rev Spreadsheet Terkendali
sumber
Perusahaan saya melakukan banyak pekerjaan dalam mengotomatisasi solusi Microsoft Office, jadi saya menulis .DLL yang akan mengekspor sumber solusi setiap kali templat disimpan. Itu membuat folder bernama Sumber sebagai anak dari folder di mana template disimpan, dan di bawah Sumber itu membuat folder dengan nama yang sama dengan Proyek VBA. Dalam folder proyek itu mengekspor semua kode sumber untuk modul, kelas, dan formulir pengguna. Pengaturan ini dipilih untuk memudahkan mengelola sumber untuk koleksi template yang besar. DLL dapat membuka kunci proyek yang dikunci untuk mendapatkan akses ke proyek VBA jika Anda memiliki file konfigurasi lokal atau file konfigurasi global yang tersedia. Dengan alat ini digunakan, para pengembang dapat mengerjakan templat sesuai isi hati mereka dan menggunakan alat kontrol revisi favorit mereka untuk mengelola pekerjaan mereka.
sumber