#!/usr/bin/env python3 """ 测试报告生成过程,验证修复是否有效 """ import json import tempfile import os from pathlib import Path def create_test_data(): """创建测试用的脚本数据""" # 模拟修复后的数据(没有NULL值,减少空单元格) test_data = { "tables": [{ "token": "scriptTable1", "startRow": 0, "startCol": 0, "cells": [ # 只包含有数据的单元格 {"row": 1, "col": 1, "value": "2025-11-27 11:30:00"}, {"row": 1, "col": 3, "value": "2025-11-27 15:00:00"}, {"row": 0, "col": 1, "value": "25.5"}, # 修复后:不再是null # 可以添加更多测试数据 {"row": 4, "col": 0, "value": "25.1"}, {"row": 4, "col": 1, "value": "25.3"}, {"row": 4, "col": 2, "value": "25.0"}, ] }] } return test_data def test_data_parsing(): """测试数据解析功能""" print("=== 测试数据解析 ===") # 导入报告生成器的解析函数 try: from report_generator import _parse_script_tables test_data = create_test_data() parsed_tables = _parse_script_tables(test_data) print(f"解析结果: {len(parsed_tables)} 个表格") for token, table_spec in parsed_tables.items(): print(f" 表格 {token}:") print(f" startRow: {table_spec.get('startRow')}") print(f" startCol: {table_spec.get('startCol')}") print(f" cells: {len(table_spec.get('cells', []))}") # 统计单元格类型 cells = table_spec.get('cells', []) valid_cells = 0 empty_cells = 0 null_cells = 0 for cell in cells: value = cell.get('value') if value is None: null_cells += 1 elif str(value).strip() == "": empty_cells += 1 else: valid_cells += 1 print(f" 统计: 有效={valid_cells}, 空白={empty_cells}, NULL={null_cells}") return True except Exception as e: print(f"测试失败: {e}") return False def simulate_word_processing(): """模拟Word处理过程""" print("\n=== 模拟Word处理 ===") test_data = create_test_data() table_spec = test_data["tables"][0] cells = table_spec.get("cells", []) processed_cells = 0 skipped_empty_cells = 0 print(f"开始处理 {len(cells)} 个单元格...") for cell_info in cells: if not isinstance(cell_info, dict): continue # 模拟修复后的逻辑:跳过空单元格 value = cell_info.get("value", "") if value is None: skipped_empty_cells += 1 continue text = str(value) if text.strip() == "": skipped_empty_cells += 1 continue # 模拟Word COM操作 row = cell_info.get("row", 0) col = cell_info.get("col", 0) print(f" 处理单元格 ({row}, {col}): '{text}'") processed_cells += 1 print(f"处理完成: 处理了 {processed_cells} 个单元格, 跳过了 {skipped_empty_cells} 个空单元格") return True def main(): print("测试报告生成修复") print("=" * 50) success1 = test_data_parsing() success2 = simulate_word_processing() if success1 and success2: print("\n✅ 所有测试通过!修复应该有效。") print("\n建议:") print("1. 现在可以重新尝试生成报告") print("2. 检查日志文件中的处理统计信息") print("3. 如果仍然卡住,可能需要检查Word模板或COM环境") else: print("\n❌ 测试失败,需要进一步调试") if __name__ == "__main__": main()