Spaces:
Sleeping
Sleeping
| import os | |
| import requests | |
| import tempfile | |
| from openpyxl import load_workbook | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| def main(file_info): | |
| """ | |
| 获取 Excel 文件中所有的 Sheet 名称清单 | |
| arg1 (file_info): 包含 fileUrl 的字典 | |
| """ | |
| src_tmp_name = None | |
| try: | |
| file_url = file_info.get("fileUrl") | |
| file_key = file_info.get("fileKey", "file") | |
| logger.info(f"正在获取文件 Sheet 列表: {file_key}") | |
| # 1. 下载文件 | |
| resp = requests.get(file_url, timeout=30) | |
| resp.raise_for_status() | |
| with tempfile.NamedTemporaryFile(suffix=".xlsx", delete=False) as f_in: | |
| f_in.write(resp.content) | |
| src_tmp_name = f_in.name | |
| # 2. 使用 read_only 模式快速读取 Sheet 名称 | |
| # 这是最轻量的方式,不会加载单元格数据 | |
| wb = load_workbook(src_tmp_name, read_only=True, keep_links=False) | |
| sheet_names = wb.sheetnames | |
| wb.close() | |
| logger.info(f"成功识别到 {len(sheet_names)} 个 Sheet: {sheet_names}") | |
| return { | |
| "file_key": file_key, | |
| "sheets": sheet_names, | |
| "count": len(sheet_names), | |
| "status": "success" | |
| } | |
| except Exception as e: | |
| logger.error(f"获取 Sheet 列表异常: {str(e)}") | |
| return { | |
| "status": "failed", | |
| "error_type": type(e).__name__, | |
| "message": str(e) | |
| } | |
| finally: | |
| # 清理临时文件 | |
| if src_tmp_name and os.path.exists(src_tmp_name): | |
| try: | |
| os.unlink(src_tmp_name) | |
| except: | |
| pass |