python处理Excel文档(一)合并Excel工作表

本文介绍了如何使用Python的openpyxl库读取xlsx文件,并通过ws.values()方法将数据转换为dataframe,然后利用pd.concat进行文件合并。最后,将合并后的数据写入新的Excel文件中,调整列宽以优化格式。
摘要由CSDN通过智能技术生成

一、需求:

合并xlsx文件

二、思路:

  1. 使用openpyxl读取工作表,用ws.values()方法将读取数据转为生成器对象 ;
  2. 将生成器对象转换为dataframe格式;
  3. 进行合并,存入Excel中。

三、ws.values()方法介绍

(1) ws.values()方法用于获取工作表中的所有单元格的值。它返回一个生成器对象,每个元素都是一个包含每行单元格值的元组

例如,假设有一个名为"Sheet1"的工作表,包含以下数据:

A | B | C

1 | 2 | 3
4 | 5 | 6
7 | 8 | 9

使用ws.values()方法将返回一个生成器对象,其中每个元素都是包含每行单元格值的元组。可以通过循环遍历生成器对象来获取每行的值。

import openpyxl

wb = openpyxl.load_workbook('example.xlsx')
ws = wb['Sheet1']

for row in ws.values():
    print(row)

输出:

(1, 2, 3)
(4, 5, 6)
(7, 8, 9)

(2) ws.iter_rows()方法用于遍历工作表的每一行,并返回每行中的单元格对象。它也可以用于获取每行的值,但需要额外的处理来提取每个单元格的值。

import openpyxl

wb = openpyxl.load_workbook('example.xlsx')
ws = wb['Sheet1']

for row in ws.iter_rows(values_only=True):
    print(row)

输出:

(1, 2, 3)
(4, 5, 6)
(7, 8, 9)

注:两个方法区别在于使用ws.values()方法可以直接获取每行的值作为元组,而ws.iter_rows()方法需要额外的参数和处理来获取每行的值。

四、实现代码

代码文件和xlsx文件放在一个文件夹中。

import time
import glob
import openpyxl
import pandas as pd
import xlsxwriter


t1 = time.time()
files = glob.glob('*.xlsx')
DF_data = pd.DataFrame()
for f in files:
    file = openpyxl.load_workbook(f,read_only=True)        # 读取每个文件
    ws = file.worksheets[0]                                # 获取工作簿中第一个表
    data = ws.values
    my_cols = next(data)[:]                                # 获取首行
    data = list(data)
    df = pd.DataFrame(data,columns = my_cols)
    DF_data = pd.concat([DF_data,df],ignore_index=True)    #忽略首行
print(DF_data.info())

# 数据写入
writer = pd.ExcelWriter('result.xlsx',engine='xlsxwriter',options={'strings_to_urls':False})
DF_data.to_excel(writer,sheet_name='Sheet1',index=False)         #将DataFrame对象保存为Excel文件。
ws_temp = writer.sheets['Sheet1']
ws_temp.set_column(4,4, 30)  #调整第5列宽,也可不加
writer.close()

t= time.time()-t1
print(f'程序运行时间:{t:.2f}秒')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值