使用Python从多个Excel文件中提取连续单元格值

问题描述 投票:0回答:1

我的任务的目的是首先从单个excel文件的连续单元格中提取值,然后将对同一文件夹的其余excel文件执行相同的提取方法,直到循环结束例如我想提取值来自 Excel 文件 1 的行“A283:A9000”。在 Excel 文件 1 的提取完成后,将提取 Excel 文件 2 的行“A283:A9000”的值,然后提取同一行“A283:A9000” ' 将在 Excel 文件 3、Excel 文件 4、Excel 文件 5 等上继续。

我学习如何从多个 Excel 文件中提取值 https://www.youtube.com/watch?v=M7YkQpcB4fg 当从非连续单元格中提取值时,该代码可以很好地工作。但是,当我尝试使用代码从同一张纸的连续单元格(“A283:A9000”)中提取值时,代码失败。

我知道当我尝试使用代码从同一张纸的连续单元格中提取值时会出现问题,但我不确定如何根据我的情况将代码修复为自定义。我认为问题出在行 (cells = ['C11', 'C15', 'D15', 'C16', 'A283:A9000'])。

有人可以帮我吗?

干杯

这是我尝试过的代码。

import os
import openpyxl 

folder = r'C:\PhD study\GIS\Wind_Downscale\test_one'
output_file = 'C:\PhD study\GIS\Wind_Downscale\Wind_data_forecast_time.xlsx'

output_wb = openpyxl.Workbook()
output_sheet = output_wb.active
output_sheet.title = 'Wind Data for Forecast Time'

cells = ['C11', 'C15', 'D15', 'C16', 'A283:A9000']

for filename in os.listdir(folder):
    if filename.endswith('.xlsx'):
        
        file = os.path.join(folder, filename)
        
        workbook = openpyxl.load_workbook(file)
       
   
        values = [workbook.active[cell].value for cell in cells]

        
        output_sheet.append(values)
        
output_wb.save(output_file)

这是错误消息:

回溯(最近一次调用最后一次):

compat_exec 中的文件 C:\Conda5\lib\site-packages\spyder_kernels\py3compat.py:356 exec(代码,全局变量,局部变量)

文件 c:\users\kxz237.spyder-py3 emp.py:29 值 = [workbook.active[cell].单元格中单元格的值]

文件 c:\users\kxz237.spyder-py3 emp.py:29 于 值 = [workbook.active[cell].单元格中单元格的值]

属性错误:“元组”对象没有属性“值”

python python-3.x excel extract
1个回答
0
投票

我不知道 openpyxl 是否有一种从单元格范围(您所说的连续单元格)读取的方法,该方法可能会更快。但是,请注意,您的单元格范围也可以由单个单元格地址列表表示。因此,如果您首先使用列表理解来构建这些单独单元格地址的列表,它应该可以工作。

尝试替换代码中的这一行:

cells = [f"A{i}" for i in range(283, 9000+1)]

这将生成一个类似 ['A283', 'A284' ... 'A9000'] 的列表

因此,您的示例中的整个内容(假设您实际上不希望列表中的那些初始单元格是......

import os
import openpyxl 

folder = r'C:\PhD study\GIS\Wind_Downscale\test_one'
output_file = 'C:\PhD study\GIS\Wind_Downscale\Wind_data_forecast_time.xlsx'

output_wb = openpyxl.Workbook()
output_sheet = output_wb.active
output_sheet.title = 'Wind Data for Forecast Time'

cells = [f"A{i}" for i in range(283, 9000+1)]

for filename in os.listdir(folder):
    if filename.endswith('.xlsx'):
        
        file = os.path.join(folder, filename)
        
        workbook = openpyxl.load_workbook(file)
       
   
        values = [workbook.active[cell].value for cell in cells]

        
        output_sheet.append(values)
        
output_wb.save(output_file)
© www.soinside.com 2019 - 2024. All rights reserved.