programing

Excel VBA를 git에 어떻게 넣습니까?

newsource 2023. 4. 25. 22:28

Excel VBA를 git에 어떻게 넣습니까?

엑셀에서 VBA를 상속받아서 git에 넣고 싶어요.현재 상태로는 git은 이 파일을 바이너리로 보고 파일 변경 델타가 아닌 전체 파일을 복제하기를 원합니다.

개별 매크로를 파일로 나누어 git에 넣고 싶습니다.이것을 하는 표준적인 방법이 있나요?

Rubberduck VBA를 사용하는 경우 다음을 클릭합니다.

준비 버튼입니다.

파일 메뉴를 사용하여 "활성 프로젝트 내보내기"를 수행할 수 있습니다. "활성 프로젝트 내보내기"에서는 양식 이진 파일 및 코드를 일반 텍스트인 BAS 개체로 내보낼 수 있습니다.그러면 당신은 git에 전념할 수 있습니다.

도구 -> 활성 프로젝트를 내보냅니다.

모듈을 텍스트로 git 폴더로 내보낸 후 다음과 같이 커밋할 수 있습니다.

VBA Editor Add modules for 각 매크로(메뉴 삽입/모듈)에서 각 매크로 코드를 모듈에 복사하고 control + E와 함께 텍스트 파일로 저장합니다. git 폴더에 저장하고 일반 git 절차를 사용하여 변경 사항을 커밋합니다.

vba 코드를 변경하면 모듈을 다시 저장하고(control+E) 정상적으로 git을 업데이트합니다.

저는 이 문제를 겪었고 다른 VBA 모듈을 내보내기 위해 VBA 모듈을 만들어서 해결했습니다.이에 대한 사용 지침 및 원시 코드는 다음 위치에서 찾을 수 있습니다.

https://github.com/ColmBhandal/VbaSync을 참조하십시오.

C# 대안입니다.

VBA를 Excel 버전 관리 하에 둘 수 있는 C# 대안이 있습니다.이 코드는 CLI 도구 또는 VSTO AddIn을 통해 버전 제어를 수행하는 데 사용할 수 있는 C# 라이브러리에 추가되었습니다.

https://gitlab.com/hectorjsmith/csharp-excel-vba-sync

부인

저는 위 저장소의 코딩에 관여했습니다.이들은 모두 무료 사용 및 오픈 소스입니다.

다음 Python 스크립트를 실행하는 git 사전 커밋 후크를 생성하여 VBA 코드를 자동으로 추출하고 커밋에 추가할 수 있습니다(https://www.xltrail.com/blog/auto-export-vba-commit-hook) 참조).

import os
import shutil
from oletools.olevba3 import VBA_Parser


EXCEL_FILE_EXTENSIONS = ('xlsb', 'xls', 'xlsm', 'xla', 'xlt', 'xlam',)


def parse(workbook_path):
    vba_path = workbook_path + '.vba'
    vba_parser = VBA_Parser(workbook_path)
    vba_modules = vba_parser.extract_all_macros() if vba_parser.detect_vba_macros() else []

    for _, _, _, content in vba_modules:
        decoded_content = content.decode('latin-1')
        lines = []
        if '\r\n' in decoded_content:
            lines = decoded_content.split('\r\n')
        else:
            lines = decoded_content.split('\n')
        if lines:
            name = lines[0].replace('Attribute VB_Name = ', '').strip('"')
            content = [line for line in lines[1:] if not (
                line.startswith('Attribute') and 'VB_' in line)]
            if content and content[-1] == '':
                content.pop(len(content)-1)
                lines_of_code = len(content)
                non_empty_lines_of_code = len([c for c in content if c])
                if non_empty_lines_of_code > 0:
                    if not os.path.exists(os.path.join(vba_path)):
                        os.makedirs(vba_path)
                    with open(os.path.join(vba_path, name + '.bas'), 'w') as f:
                        f.write('\n'.join(content))


if __name__ == '__main__':
    for root, dirs, files in os.walk('.'):
        for f in dirs:
            if f.endswith('.vba'):
                shutil.rmtree(os.path.join(root, f))

        for f in files:
            if f.endswith(EXCEL_FILE_EXTENSIONS):
                parse(os.path.join(root, f))

자세한 내용은 https://www.xltrail.com/blog/auto-export-vba-commit-hook을 참조하십시오.

언급URL : https://stackoverflow.com/questions/36024342/how-to-put-excel-vba-into-git 입니다.