From 01690580ae17ffe270ee4878f99d59038005a180 Mon Sep 17 00:00:00 2001 From: Misaka Date: Wed, 4 Feb 2026 22:48:53 +0800 Subject: [PATCH] chore: remove test scripts and demo files from version control Remove check_vba_access.py and create_demo.py utility scripts. Stop tracking demo.xlsm and update .gitignore to exclude all .xlsm files. Co-Authored-By: Claude Sonnet 4.5 --- .gitignore | 2 +- check_vba_access.py | 54 ---------------------------- create_demo.py | 83 -------------------------------------------- demo.xlsm | Bin 12427 -> 0 bytes 4 files changed, 1 insertion(+), 138 deletions(-) delete mode 100644 check_vba_access.py delete mode 100644 create_demo.py delete mode 100644 demo.xlsm diff --git a/.gitignore b/.gitignore index fd8f021..cc4ac38 100644 --- a/.gitignore +++ b/.gitignore @@ -35,4 +35,4 @@ test_*.py debug_*.py # Demo file (optional - comment out if you want to track it) -# demo.xlsm +*.xlsm diff --git a/check_vba_access.py b/check_vba_access.py deleted file mode 100644 index 867cd85..0000000 --- a/check_vba_access.py +++ /dev/null @@ -1,54 +0,0 @@ -""" -检查 Excel VBA 项目访问设置 -""" - -import winreg -import os - -def check_vba_project_access(): - """检查是否启用了对 VBA 工程对象模型的访问""" - - # Excel 版本的注册表路径 - excel_versions = [ - r"Software\Microsoft\Office\16.0\Excel\Security", - r"Software\Microsoft\Office\15.0\Excel\Security", - r"Software\Microsoft\Office\14.0\Excel\Security", - ] - - print("Checking Excel VBA Project Access Settings...\n") - - found = False - for version_path in excel_versions: - try: - key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, version_path) - access_value, _ = winreg.QueryValueEx(key, "AccessVBOM") - winreg.CloseKey(key) - - if access_value == 1: - print(f"[OK] VBA Project Access is ENABLED in {version_path}") - found = True - else: - print(f"[WARN] VBA Project Access is DISABLED in {version_path}") - except FileNotFoundError: - continue - except Exception as e: - print(f"[ERROR] Failed to check {version_path}: {e}") - - if not found: - print("\n[INFO] VBA Project Access settings not found in registry.") - print("You may need to enable it manually in Excel.") - - print("\n" + "="*60) - print("How to Enable VBA Project Access in Excel:") - print("="*60) - print("1. Open Excel") - print("2. Go to File > Options > Trust Center") - print("3. Click 'Trust Center Settings...'") - print("4. Go to 'Macro Settings'") - print("5. Check the box: 'Trust access to the VBA project object model'") - print("6. Click OK to save changes") - print("7. Restart Excel") - print("="*60) - -if __name__ == "__main__": - check_vba_project_access() diff --git a/create_demo.py b/create_demo.py deleted file mode 100644 index 5ed7d3d..0000000 --- a/create_demo.py +++ /dev/null @@ -1,83 +0,0 @@ -""" -创建演示用的 Excel 文件,包含测试用的 VBA 代码 -""" - -import xlwings as xw - -# VBA 测试代码 -VBA_TEST_CODE = """Option Explicit - -Sub TestErrorProcedure() - Dim x As Integer - Dim y As Integer - Dim result As Double - - x = 10 - y = 0 - result = x / y ' 这里会触发除以零错误 - - Debug.Print "Result: " & result -End Sub - -Sub TestTypeMismatch() - Dim x As String - Dim y As Integer - - x = "Hello" - y = x ' 这里会触发类型不匹配错误 - - Debug.Print "Y: " & y -End Sub - -Sub TestSubscriptError() - Dim arr(1 To 3) As Integer - Dim value As Integer - - arr(1) = 10 - arr(2) = 20 - arr(3) = 30 - value = arr(5) ' 这里会触发下标越界错误 - - Debug.Print "Value: " & value -End Sub - -Sub TestSuccessfulProcedure() - Dim x As Integer - Dim y As Integer - Dim sum As Integer - - x = 10 - y = 20 - sum = x + y - - Debug.Print "Sum: " & sum -End Sub -""" - -def create_demo_file(): - """创建演示用的 Excel 文件""" - app = xw.App(visible=True) - wb = app.books.add() - - # 添加 VBA 模块 - vba_project = wb.api.VBProject - module = vba_project.VBComponents.Add(1) # 1 = vbext_ct_StdModule - module.Name = "Module1" - module.CodeModule.AddFromString(VBA_TEST_CODE) - - # 保存文件 - file_path = r"D:\python\xlwings\demo.xlsm" - wb.save(file_path) - wb.close() - - print(f"演示文件已创建: {file_path}") - print("\n包含的测试过程:") - print(" - TestErrorProcedure: 除以零错误") - print(" - TestTypeMismatch: 类型不匹配错误") - print(" - TestSubscriptError: 下标越界错误") - print(" - TestSuccessfulProcedure: 成功执行的测试") - - app.quit() - -if __name__ == "__main__": - create_demo_file() diff --git a/demo.xlsm b/demo.xlsm deleted file mode 100644 index 687bd97fd2c0fa8343efe3d47204a92d4962b768..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12427 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