【使用python将多个xlsx文件合并到一个sheet中】

使用python将多个xlsx文件合并到一个sheet中

1. 安装库

pip install xlrd==1.2.0

pip install openpyxl

2. 代码执行可能遇到的问题

  1. 读取excel时报错AttributeError: ‘ElementTree’ object has no attribute ‘getiterator’,可能在这里出错:xlrd.open_workbook(path)
  2. 原因:更新删除了getiterator方法,老版本的xlrd库调用getiterator方法时会报错。
  3. 解决:
  • 获取xlrd的目录:在终端输入pip show xlrd
    在这里插入图片描述
  • 进入目录下,打开xlsx.py,将其中的getiterator()替换为iter(),保存即可

3. 代码

# 将给定目录下的所有xlsx文件(每个只包含一个sheet),合并为一个sheet,输出为一个xlsx文件
import os
import xlrd
import xlwt
import openpyxl

excel_dir = r'C:\Users\97875\Desktop\test'
des_path = r'C:\Users\97875\Desktop\test.xlsx'
input_str = input(f'xlsx文件位于:{excel_dir},输出文件为:{des_path}\n输入go继续,任意键退出。请输入:')
if input_str == "go":
    excel_list = os.listdir(excel_dir)
    excel_list.sort()
    total = len(excel_list)
    for num,name in enumerate(excel_list):
        print(num+1,name)
    workbook = openpyxl.Workbook()
    to_sheet = workbook.active
    line = 0
    for table_index,excel_name in enumerate(excel_list):
        path = os.path.join(excel_dir,excel_name)
        from_excel = xlrd.open_workbook(path)  # 打开要复制的表
        sheets = from_excel.sheet_names()
        from_sheet = from_excel.sheet_by_name(sheets[0])
        rows=from_sheet.nrows                          
        cols=from_sheet.ncols 
        data=[]                                     #新建列表data,用于存放待粘贴数据
        start = 0 if table_index == 0 else 1
        for i in range(start,rows): 
             data.append(from_sheet.row_values(i))
        
        for i in range(0,len(data)):
            for j in range(len(data[i])):
                to_sheet.cell(line+1,j+1,data[i][j]) 
            line += 1
        print(f'复制进度:{(table_index+1)/total*100:.2f}%',end='\r')

    workbook.save(des_path)
else:
    print('复制已被手动终止!')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值