"""
生成测试数据脚本
复制 Ren'py.xlsx 并填充 1000 行随机测试数据
"""
import random
import shutil
from pathlib import Path
from openpyxl import load_workbook
from openpyxl.worksheet.datavalidation import DataValidation
[文档]
def generate_test_data():
"""生成测试数据"""
# 源文件和目标文件
source_file = Path("input/Ren'py.xlsx")
target_file = Path("input/Ren'py_2.xlsx")
# 复制文件
print(f"复制文件: {source_file} -> {target_file}")
shutil.copy(source_file, target_file)
# 打开目标文件
wb = load_workbook(target_file)
ws = wb.active
# 获取参数表工作表(用于获取数据验证列表)
param_ws = wb["参数表"] if "参数表" in wb.sheetnames else None
# 读取参数表的列名和数据
param_data = {}
if param_ws:
for col_idx in range(1, param_ws.max_column + 1):
header = param_ws.cell(row=1, column=col_idx).value
if header:
values = []
for row_idx in range(2, param_ws.max_row + 1):
val = param_ws.cell(row=row_idx, column=col_idx).value
if val:
values.append(str(val))
param_data[header] = values
print(f"从参数表读取到 {len(param_data)} 个参数类型")
# 获取主工作表的表头
headers = []
for col_idx in range(1, ws.max_column + 1):
header = ws.cell(row=1, column=col_idx).value
if header:
headers.append((col_idx, header))
print(f"主工作表有 {len(headers)} 列")
# 生成 1000 行随机数据
start_row = ws.max_row + 1
print(f"从第 {start_row} 行开始生成 1000 行数据...")
for row_num in range(start_row, start_row + 1000):
for col_idx, header in headers:
# 根据列名生成合适的随机数据
if header == "Index":
# Index 列递增
value = row_num - 1
elif header == "Ignore":
# Ignore 列保持为空
value = ""
elif header in param_data and param_data[header]:
# 从参数表中随机选择
value = random.choice(param_data[header])
elif header == "Speaker":
value = random.choice(["角色A", "角色B", "角色C", "旁白", ""])
elif header == "Text":
value = f"这是第{row_num}行的测试文本内容。"
elif header in ["Wait", "Visible", "CharAnimWait"]:
value = random.choice(["", "true", "false"])
elif header in ["Volume", "Scale", "Time"]:
value = random.choice(["", "0.5", "1.0", "1.5"])
elif header in ["Position"]:
value = random.choice(["", "0.3", "0.5", "0.7"])
else:
# 其他列随机留空或填充
value = "" if random.random() > 0.3 else f"test_{row_num}"
ws.cell(row=row_num, column=col_idx, value=value)
if row_num % 100 == 0:
print(f" 已生成 {row_num - start_row + 1} 行...")
# 保存文件
print(f"保存文件: {target_file}")
wb.save(target_file)
wb.close()
print(f"完成!生成了 1000 行测试数据")
print(f"文件总行数: {start_row + 1000 - 1} 行(含表头)")
if __name__ == "__main__":
generate_test_data()