如何读取含动态生成日期路径的文件及解决Excel V31单元格读取失败问题
解决通过动态生成路径读取Excel文件V31单元格的问题
代码存在的问题
- 未导入
pandas库,代码中使用pd别名但未声明 - 调用日期生成函数时未加括号:
time是函数对象,必须写成time()才能获取返回的日期字符串 - 路径拼接逻辑错误:原始字符串拼接时容易出现分隔符问题,且
C:\User\大概率是笔误,应为C:\Users\ - 单元格读取方式错误:
sheetX['V31']是按列名读取数据,但V31是Excel单元格地址,不是列名
修正后的代码(使用pandas)
import datetime import pandas as pd import os def get_last_bus_day(): lastBusDay = datetime.datetime.today() shift = datetime.timedelta(max(1, (lastBusDay.weekday() + 6) % 7 - 3)) lastBusDay = lastBusDay - shift return lastBusDay.strftime("%Y%m%d") def open_file(): # 基础路径和日期 base_path = r"C:\Users" date_str = get_last_bus_day() # 使用os.path.join拼接路径,避免分隔符问题 file_path = os.path.join(base_path, date_str, "aaa.xls") # 读取Excel文件 xls = pd.ExcelFile(file_path) sheetX = xls.parse(0) # V列是第21列(A=0,B=1...V=20),31行对应索引30(pandas行索引从0开始) var1 = sheetX.iloc[30, 20] print(var1) open_file()
备选方案(使用win32com直接读取单元格地址)
如果需要直接按V31这种单元格地址读取,用你导入的win32com更直接:
import datetime import win32com.client as win32 import os def get_last_bus_day(): lastBusDay = datetime.datetime.today() shift = datetime.timedelta(max(1, (lastBusDay.weekday() + 6) % 7 - 3)) lastBusDay = lastBusDay - shift return lastBusDay.strftime("%Y%m%d") def open_file(): base_path = r"C:\Users" date_str = get_last_bus_day() file_path = os.path.join(base_path, date_str, "aaa.xls") # 启动Excel应用 excel = win32.gencache.EnsureDispatch('Excel.Application') excel.Visible = False # 后台运行,不打开窗口 workbook = excel.Workbooks.Open(file_path) sheet = workbook.Worksheets(1) # 第一个工作表(Excel里索引从1开始) # 直接读取V31单元格 var1 = sheet.Range("V31").Value print(var1) # 关闭资源 workbook.Close(SaveChanges=False) excel.Quit() open_file()
内容的提问来源于stack exchange,提问作者Sea
相关产品推荐
相关产品推荐

