我的土豆在哪里 2022-09-12 20:30 采纳率: 42.9%
浏览 15

批量提取一个工作簿中所有工作表的特定数据

我想批量提取一个工作簿中所有工作表的特定数据,但是提示错误: 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数据 如下

img

请问,这个错误到底是出现在哪啊,如何解决,谢谢

  • 写回答

1条回答 默认 最新

  • 梦里逆天 2022-09-13 11:21
    关注

    改成这样试试?

    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程序
    
    评论

报告相同问题?

问题事件

  • 创建了问题 9月12日