我想批量提取一个工作簿中所有工作表的特定数据,但是提示错误: raise KeyError(key) from err KeyError: '产品名称',代码如下:
import os
import xlwings as xw
import pandas as pd # 导入pandas模块
data = [] # 创建一个空列表用于存放数据
file_path = 'e:\背包数据'
file_list = os.listdir(file_path) # 给出工作簿所在的文件夹路径
app = xw.App(visible=False, add_book=False) # 启动Excel程序
for i in file_list: # 遍历文件夹路径下的所有文件名
if i.startswith('$'): # 判断是否有文件名以“$”开头的文件
continue # 如果有,则跳过这种类型的文件
file_paths = os.path.join(file_path, i) # 将文件夹路径和文件名拼接成工作簿的完整路径
workbook = app.books.open(file_paths) # 打开要调整的工作簿
for j in workbook.sheets: # 遍历当前工作簿中的工作表
value = j['A2'].expand('table').options(pd.DataFrame).value # 读取工作表数据
filtered = value[value['产品名称'] == '背包'] # 提取“采购物 品”为“复印纸”的行数据
if not filtered.empty: # 判断提取出的行数据是否为空
data.append(filtered) # 将提取出的行数据追加到列表中
new_workbook = xw.books.add() # 新建工作簿
new_worksheet = new_workbook.sheets.add('复印纸') # 在新工作簿中新 增一个名为“复印纸”的工作表
new_worksheet.range('A2').value = pd.concat(data, ignore_index=False) # 将提取出的行数据写入工作表“复印纸”中
new_workbook.save('复印纸.xlsx') # 保存新工作簿并命名为“复印纸.xlsx”
workbook.save() # 保存当前工作簿
workbook.close() # 关闭当前工作簿
app.quit() # 退出Excel程序
我的excel数据 如下
请问,这个错误到底是出现在哪啊,如何解决,谢谢
改成这样试试?
import os
import xlwings as xw
data = [] # 创建一个空列表用于存放数据
file_path = 'E:\背包数据'
file_list = os.listdir(file_path) # 给出工作簿所在的文件夹路径
app = xw.App(visible=False, add_book=False) # 启动Excel程序
for i in file_list: # 遍历文件夹路径下的所有文件名
if i.startswith('~$'): # 判断是否有文件名以“$”开头的文件
continue # 如果有,则跳过这种类型的文件
print(i)
file_paths = os.path.join(file_path, i) # 将文件夹路径和文件名拼接成工作簿的完整路径
workbook = app.books.open(file_paths) # 打开要调整的工作簿
for j in workbook.sheets: # 遍历当前工作簿中的工作表
print(j.name)
data1 = j['A2'].expand('table').value # 读取工作表数据
# print(data1)
# print(type(data1))
if data1 is not None:
for val in data1:
# print(val)
# print(type(val))
if val[1] == '背包':
# print('*',val)
data.append(val)
# filtered = value[value[2] == '背包'] # 提取“采购物 品”为“复印纸”的行数据
# if not filtered.empty: # 判断提取出的行数据是否为空
# data.append(filtered) # 将提取出的行数据追加到列表中
# print(data)
new_workbook = xw.Book() # 新建工作簿
new_worksheet = new_workbook.sheets.add('复印纸') # 在新工作簿中新 增一个名为“复印纸”的工作表
new_worksheet['A2'].value = data # 将提取出的行数据写入工作表“复印纸”中
new_worksheet.autofit()
new_workbook.save('复印纸.xlsx') # 保存新工作簿并命名为“复印纸.xlsx”
new_workbook.close()
workbook.save() # 保存当前工作簿
workbook.close() # 关闭当前工作簿
app.quit() # 退出Excel程序