当前位置: 首页 > news >正文

Excel 表格提取

# -*- coding: utf-8 -*-
"""
Excel 数据加载模块
负责从 Excel 文件加载测试数据,处理数据转换和验证"""import json
from pathlib import Path
from typing import Dict, Any, List, Optional
from openpyxl import load_workbook, Workbook
from openpyxl.worksheet.worksheet import Worksheetclass ExcelDataLoader:"""Excel 数据加载模块"""def __init__(self, file_path: Path):"""初始化数据加载器"""self.file_path = Path(file_path)if not self.validate_file():raise FileNotFoundError(f"文件 {self.file_path} 不存在")def validate_file(self) -> bool:"""验证文件是否存在"""return self.file_path.exists() and self.file_path.is_file()def load_test_data(self, sheet_name: str) -> List[Dict[str, Any]]:"""加载测试数据"""try:workbook = load_workbook(filename=self.file_path, data_only=True)except Exception as e:raise ValueError(f"无法加载文件 {self.file_path}:{e}")if sheet_name not in workbook.sheetnames:raise ValueError(f"文件 {self.file_path} 中不存在名为 {sheet_name} 的工作表")sheet = workbook[sheet_name]return self._parse_sheet_data(sheet)def _parse_sheet_data(self, sheet: Worksheet) -> List[Dict[str, Any]]:"""解析工作表数据"""data_list = []# 获取标题行(第一行)headers = []for cell in sheet[1]:headers.append(cell.value if cell.value else "")# 遍历数据行 (从第二行开始)for row_idx, row in enumerate(sheet.iter_rows(min_row=2, values_only=True), start=2):row_data = {}for col_idx, (header, value) in enumerate(zip(headers, row)):if header:row_data[header] = value# 转换数据类型row_data = self.convert_data_types(row_data)# 将数据添加到列表中data_list.append(row_data)print(f"加载数据行 {row_idx}:{json.dumps(row_data, ensure_ascii=False)}")return data_listdef convert_data_types(self, data: Dict[str, Any]) -> Dict[str, Any]:"""转换数据类型自动转换数据类型转换规则:- 字符串 "null" → None- JSON 字符串 → Dict/List- 数字字符串 → int/float- 空单元格 → None- 布尔字符串 "true"/"false" → True/False"""converted = {}for key, value in data.items():converted[key] = self._convert_value(value)return converteddef _convert_value(self, value: Any) -> Any:"""转换单个值Args:value: 原始值Returns:转换后的值"""# 空值处理if value is None or value == '':return None# 字符串 "null" 转换为 Noneif isinstance(value, str) and value.lower() == 'null':return None# 布尔字符串转换if isinstance(value, str):if value.lower() == 'true':return Trueelif value.lower() == 'false':return False# JSON 字符串解析if isinstance(value, str) and (value.startswith('{') or value.startswith('[')):try:return json.loads(value)except json.JSONDecodeError:# 不是有效的 JSON,保持原样pass# 数字字符串转换if isinstance(value, str):# 尝试转换为整数try:# 检查是否包含小数点if '.' not in value:return int(value)except ValueError:pass# 尝试转换为浮点数try:return float(value)except ValueError:pass# 保持原值return valuedef write_result(self, sheet_name: str, row_num: int, column_num: int, result: Any):"""写入测试结果"""try:workbook = load_workbook(filename=self.file_path)except Exception as e:raise ValueError(f"无法加载文件 {self.file_path}:{e}")if sheet_name not in workbook.sheetnames:raise ValueError(f"文件 {self.file_path} 中不存在名为 {sheet_name} 的工作表")sheet = workbook[sheet_name]try:sheet.cell(row=row_num, column=column_num).value = resultworkbook.save(self.file_path)print(f"写入结果到文件 {self.file_path} 成功")return Trueexcept Exception as e:raise ValueError(f"无法写入结果到文件 {self.file_path}:{e}")if __name__ == '__main__':loader = ExcelDataLoader(Path(r"C:\Users\dujiale\PycharmProjects\TestApiFramework\data\supdatas.xlsx"))data = loader.load_test_data("supinfor")print(data)
http://www.jsqmd.com/news/52863/

相关文章:

  • 活动烟花表演公司TOP5权威推荐:专业评测指南,甄选企业助力
  • 详细介绍C++中inline函数的优缺点
  • 2025年下半年工业大风扇/工业大吊扇/厂家综合实力排行榜TOP5推荐
  • 模拟赛 R25
  • 2025上海的留学中介哪个机构好
  • 2025年河北水利相关咨询公司权威推荐榜单:智能水务系统开发‌/住宅水电安装维护‌/水利监测源头公司精选
  • 2025 年 11 月红木装修品牌权威推荐榜:复古/古典/别墅/四合院高端整装设计,精选原料与工艺质量深度解析
  • 清障车2025年度实力排行,口碑优良厂家精选推荐,折臂高空作业车/二手蓝牌平板拖车/蓝牌重载清障车/蓝牌清障车/清障车厂家排行榜单
  • 解决 Win11 启动程序卡顿以及软件打开慢的问题。
  • 2025上海最出名的留学中介机构
  • 2025年北京油气润滑系统制造厂哪家专业、生产厂哪家合作案例
  • 2025上海留学中介最好的是哪家
  • 2025源头烟雾机厂家TOP5权威推荐:质量好的烟雾机优质供
  • 2025上海留学机构有哪些
  • 点阵液晶屏驱动LCD显示驱动芯片-VK0256C 液晶显示驱动原厂【FAE技术支持】
  • MySQL 9.5 正式发行(GA)【转】
  • 2025年聚氨酯发泡保温厂家联系电话汇总 全国重点企业官方联系方式与高效采购指南
  • 2025年北京cppm课程机构权威推荐榜单:cppm课程培训‌/cppm证书‌/cppm考试源头机构精选
  • 深入解析:缓存异常:缓存穿透、缓存击穿、缓存雪崩
  • 湖南人滑雪地天花板!七星岭-不止有滑雪,还有治愈系云海风光
  • row_number()、dense_rank()、rank() 函数介绍和应用场景
  • 二、使用Spring AI实现基于sse协议的MCP Server
  • 2025 年电动窗厂家推荐 爱尚爱铝门窗:全链条铝型材解决方案与技术创新实践,适配多场景需求电动提升窗/微型电动提升窗/电动全景推拉门窗/电动天窗厂家推荐
  • 三、使用Spring AI实现基于stdio协议的MCP Server
  • DB2数据库关闭归档模式
  • 家长必看!2025-2026申请季A-Level全日制机构排名(6 家头部详解+三大梯队)
  • 国标GB28181算力算法平台EasyGBS视频监控系统在多领域创新应用
  • 南昌滑雪场推荐!七星岭国际滑雪场:解锁冬日限定速度与激情
  • 体育赛事赋能创新 亚运奥运多维突破
  • 2025 年 11 月铁盒厂家推荐排行榜,食品铁盒/保健品铁盒/化妆品铁盒/茶叶铁盒/磁吸铁盒/异形铁盒,精选耐用设计与定制工艺之选