You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量处理指定目录Excel文件脚本无终端输出问题求助

问题分析与解决方案

核心问题(终端无输出的直接原因)

  • 入口判断错误:if __name__ == "main": 应改为if __name__ == "__main__"(双下划线),否则代码逻辑块根本不会执行。
  • Path导入错误:from pathlib import path 应为from pathlib import Path(类名大写),否则调用Path.home()会触发NameError,直接终止程序且无输出。

其他问题与优化点

  • 文件类型过滤缺失:os.listdir('.')会获取目录下所有文件,需筛选出Excel文件(.xls/.xlsx),避免尝试打开非Excel文件报错。
  • openpyxl格式支持限制:openpyxl仅支持.xlsx/.xlsm格式,若要处理.xls文件,需改用xlrd+xlwt库(注意xlrd 2.0+不再支持.xls,需安装xlrd==1.2.0)。
  • 公式写法错误:原公式=IF(M="","","Confirmed")未指定行号,无法正确关联对应行的M列单元格,需根据当前行生成带行号的公式。
  • 冗余代码:while True循环无意义(循环内直接sys.exit()),可直接移除;目录拼接代码可简化。

修正后的代码(处理.xlsx文件)

import openpyxl as xl
import os
from pathlib import Path

if __name__ == "__main__":
    # 目标目录
    desktop_folder = Path.home().joinpath("Desktop", "Excel Files")
    os.chdir(desktop_folder)
    
    # 筛选xlsx/xlsm文件
    excel_files = [f for f in os.listdir('.') if f.lower().endswith(('.xlsx', '.xlsm'))]
    
    if not excel_files:
        print("目录下未找到xlsx/xlsm文件")
        exit()
    
    for file_name in excel_files:
        try:
            wb = xl.load_workbook(file_name)
            sheet = wb.active
            
            # 遍历所有行(从第2行开始,假设第1行是表头)
            for row in range(2, sheet.max_row + 1):
                m_cell = sheet.cell(row=row, column=13)  # M是第13列
                o_cell = sheet.cell(row=row, column=15)  # O是第15列
                
                # 直接写入值(如需公式则用下面注释行)
                o_cell.value = "Confirmed" if m_cell.value else ""
                # o_cell.value = f'=IF(M{row}="","","Confirmed")'
            
            wb.save(file_name)
            print(f"{file_name} 处理完成")
        except Exception as e:
            print(f"{file_name} 处理失败: {str(e)}")

处理.xls文件的代码(需安装xlrd==1.2.0和xlwt)

import xlrd
import xlwt
from xlutils.copy import copy
import os
from pathlib import Path

if __name__ == "__main__":
    desktop_folder = Path.home().joinpath("Desktop", "Excel Files")
    os.chdir(desktop_folder)
    
    # 筛选xls文件
    excel_files = [f for f in os.listdir('.') if f.lower().endswith('.xls')]
    
    if not excel_files:
        print("目录下未找到xls文件")
        exit()
    
    for file_name in excel_files:
        try:
            # 以只读模式打开xls文件
            rb = xlrd.open_workbook(file_name, formatting_info=True)
            # 复制为可写对象
            wb = copy(rb)
            sheet = wb.get_sheet(0)  # 获取第一个工作表
            
            # 遍历行(xlrd行索引从0开始,跳过表头行)
            for row in range(1, rb.sheet_by_index(0).nrows):
                m_value = rb.sheet_by_index(0).cell_value(row, 12)  # M列是第12索引
                # 设置O列值(第14索引)
                sheet.write(row, 14, "Confirmed" if m_value else "")
            
            wb.save(file_name)
            print(f"{file_name} 处理完成")
        except Exception as e:
            print(f"{file_name} 处理失败: {str(e)}")

内容的提问来源于stack exchange,提问作者Jose Daniel Rojas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 19:30:35