File size: 1,686 Bytes
89b3827
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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