Python Excel自动化脚本问题:终端未触发用户月份输入直接执行
排查Python脚本中input()未触发输入提示的问题
以下是针对你的脚本未触发输入提示直接执行完成的排查方向和解决办法:
可能的原因及解决方案
运行环境非交互式
如果你是在IDE内嵌终端(部分IDE默认非交互式)、或通过管道/文件重定向输入的方式运行脚本,input()无法读取用户输入会直接跳过。
解决:切换到系统原生终端(Windows命令提示符/PowerShell、Linux/macOS终端),直接执行python your_script.py,确保在交互式环境下运行。脚本提前抛出异常但未显示错误
看似脚本执行完成,实则可能在input()语句之前就已抛出异常,但运行环境未显示错误信息。比如input_path对应的pivot_table.xlsx文件不存在,导致load_workbook()报错终止脚本,但你没看到错误提示。
排查:在input()前添加调试输出,验证脚本是否走到输入步骤:print("准备获取月份输入...") month = input("Enter the month: ")如果没打印这句话,说明前面的代码已出错,重点检查
application路径是否正确、pivot_table.xlsx是否存在于该路径下。打包成可执行文件时的配置问题
若你将脚本打包成了exe等可执行文件,可能打包时未配置控制台窗口,导致无法接收输入。
解决:使用PyInstaller打包时添加--console参数,强制生成带控制台的程序:pyinstaller --console your_script.py
你的脚本代码
from openpyxl import load_workbook from openpyxl.chart import BarChart, Reference from openpyxl.utils import get_column_letter from openpyxl.styles import Font import os import sys application = os.path.dirname(sys.executable) month = input("Enter the month: ") input_path = os.path.join(application, 'pivot_table.xlsx') wb = load_workbook(input_path) sheet = wb['Report'] min_column = wb.active.min_column max_column = wb.active.max_column min_row = wb.active.min_row max_row = wb.active.max_row barchart = BarChart() data = Reference(sheet, min_col=min_column+1, max_col=max_column, min_row=min_row, max_row=max_row) categories = Reference(sheet, min_col=min_column, max_col=min_column, min_row=min_row+1, max_row=max_row) #Adding Data & Categories barchart.add_data(data, titles_from_data=True) barchart.set_categories(categories) # Making Chart sheet.add_chart(barchart, 'B12') barchart.title = 'Sales by Product line' barchart.style = 10 # Loop through columns data for i in range(min_column+1, max_column+1): letter = get_column_letter(i) sheet[f'{letter}{max_row+1}'] = f'=SUM({letter}{min_row+1}:{letter}{max_row})' sheet[f'{letter}{max_row+1}'].style = 'Currency' sheet[f'{get_column_letter(min_column)}{max_row+1}'] = 'Total' sheet["A1"] = 'Sales Report' sheet["A2"] = month sheet["A1"].font = Font('Arial',bold=True, size=20) sheet["A2"].font = Font('Arial',bold=True, size=20) output_path = os.path.join(application, f'report_{month}.xlsx') wb.save(output_path)
内容的提问来源于stack exchange,提问作者Rahul Ramesh
相关产品推荐
相关产品推荐

