python遍历一个文件夹下所有excel,读取所有sheet页,然后写入另一个文件夹下对应模板的excel中

本来想直接写入,但是我们的excel报表太麻烦了,里面表头有多处要求合并的,用python去写太要命了,想了下,设置一堆空的excel模板,这样只需要把原文件的数据读出来就可以了,简单多了

#读取文件夹下所有的excel,并遍历所有的sheet页,然后把读取的数据增加跳转列后保存到新的文件夹对应文件中,
# https://blog.csdn.net/qq_38140292/article/details/121134465
import pandas as pd
import os
from openpyxl import Workbook,load_workbook
from openpyxl.styles import *

dfs=pd.DataFrame()
oldPath = r'E:\aaa\2020aaa\excelOLD'
newPath = r'E:\aaa\2020aaa\excelNEW'

# 先遍历旧的文件夹,读取数据
for root_dir,sub_dir,files in os.walk(oldPath):
for fileName in files:
if fileName.endswith(".xlsx"):
#构造绝对路径
filePath = os.path.join(root_dir, fileName)
print('filePath:' + filePath)

#读取sheet页
for sheetName in pd.read_excel(filePath,sheet_name=None).keys():
print('sheet_name:' + sheetName)
df = pd.read_excel(filePath,sheet_name=sheetName)

# 获取所有的数据,返回的是一个list
value = df.values
# print(value)
cols = ['=HYPERLINK("https://www.cnpython.com/qa/76641", ">>>")' for i in range(df.index.values.size)]
df2 = pd.DataFrame({"跳转": cols})
result = pd.concat([df, df2], axis=1)
print(result)

newFilePath = os.path.join(newPath, fileName)
book = load_workbook(newFilePath)
# sheet = book.get_sheet_by_name(sheetName) #会有红色错误提示,不影响使用
sheet = book[sheetName]
row_num = sheet.max_row
print('row_num:' + str(row_num))

# address = "A3" # 数据插入的起始行和列,比如源数据插入是第四行,那就是"A4“,但是我们迁移去掉了表头,所以需要减1,设置为"A3"
address = 'A' + str(row_num)
start_row, start_col = sheet[address].row - 1, sheet[address].column - 1

for i, row in enumerate(result.values, 2):
for j, v in enumerate(row, 1):
sheet.cell(start_row + i, start_col + j).value = v
# thin 细框线,thick粗线
sheet.cell(start_row + i, start_col + j).border = Border(left=Side(style='thin'), bottom=Side(style='thin'),
right=Side(style='thin'), top=Side(style='thin'))

book.save(newFilePath)

你可以使用 Python 中的 pandas 库来读取同一文件夹下的多个 Excel 文件,并从中提取需要的数据,然后将这些数据写入一个新的 Excel 文件。下面是一个示例代码: ```python import os import pandas as pd # 设置文件夹路径 folder_path = '/path/to/folder' # 获取文件夹中所有的 Excel 文件 excel_files = [f for f in os.listdir(folder_path) if f.endswith('.xlsx')] # 创建一个空的 DataFrame 用于存储所有数据 data = pd.DataFrame() # 循环遍历每个 Excel 文件,提取需要的数据 for file in excel_files: file_path = os.path.join(folder_path, file) df = pd.read_excel(file_path, sheet_name='Sheet1') # 提取第一列和第三列的数据,并将它们合并到 data DataFrame 中 data = pd.concat([data, df.iloc[:, [0, 2]]], axis=0) # 将 data 中的数据写入一个新的 Excel 文件 output_file = '/path/to/output.xlsx' data.to_excel(output_file, index=False) ``` 在这个示例代码中,我们首先设置了文件夹路径并获取了所有的 Excel 文件。接下来,我们循环遍历每个 Excel 文件,使用 pandas 库的 read_excel() 函数读取每个文件中的数据。在这个示例中,我们假设数据位于每个 Excel 文件的第一张工作表 (Sheet1) 中,并且我们需要提取每个文件中的第一列和第三列的数据。我们使用 iloc 属性来选择需要的列,并将它们合并到一个名为 data 的 DataFrame 中。最后,我们将 data 中的数据写入一个新的 Excel 文件,这个文件的路径是 '/path/to/output.xlsx'。 注意,在这个示例中,我们使用了 concat() 函数将每个 Excel 文件中提取的数据合并到一个 DataFrame 中。在实际应用中,你可能需要根据数据的特点来选择合适的合并方法,例如使用 merge() 函数或 join() 函数。此外,在写入新的 Excel 文件时,你可以使用 to_excel() 函数来指定需要写入的工作表名称,例如 data.to_excel(output_file, sheet_name='Sheet1')。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值