python学习 21 excel分列和多个excel相同sheet合并

本文介绍了使用Python的xlwings库操作Excel文件,实现从指定sheet中的某一列(如B列)按特定规则拆分数据,例如将复合字串和数字分开,然后将拆分后的数据存入新创建的test工作表的不同列中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.简单做了个模板,能干这个:

指定sheet中某列数据进行按需拆分,拆分后新建一个test的sheet,将数据分别存入test的不同列中。

import os
import xlwings as  xw
import re
#excel路径
path=r'C:\Users\xxx\Desktop\123.xlsx'

#设置需要分列的sheet名
sheetname='Sheet1'
#设置需要分列的列名
colname='B'
#开始单元格
rowb=2
#结束单元格
rowe=25

def excel分列(path):
    excelapp=xw.App(visible=False, add_book=False)
    #打开excel
    excel = excelapp.books.open(path)
    #获取sheets
    sheet = excel.sheets
    #增加一个拆分用sheet,test
    if sheet[0].name !='test':
        sheet.add('test', before=sheet[0].name)
    #print(sheet[0].name)
    sheet2 = excel.sheets[sheetname]

    #设置拆分条件,这里以复合字串为例,型如:你好123+好的234,拆成:你好,123,+,好的234
    num1=re.compile('\w.[0-9]')
    #print(re.findall(num1,sheet2.range('b2:b25').value[0])[0][:-1])
    num2=re.compile('\d++')
    #print(re.findall(num2,sheet2.range('b2:b25').value[0])[0])
    num3=sheet2.range('b2:b25').value[0].split('+')
    #print(num3[1])

    t1=[]
    t2=[]
    t3=[]
    t4=[]

    #拆分取值
    for i in sheet2.range(colname+str(rowb)+':'+colname+str(rowe)).value:
        t1.append(re.findall(num1,i)[0][:-1])
        t2.append(re.findall(num2,i)[0])
        t3.append('+')
        t4.append(i.split('+')[1])
    #print(t1,t2,t3,t4)
    #将拆分数据填入test中
    sheet3=excel.sheets['test']
    for i in range(len(t1)):
        sheet3.range('A'+str(i+1)).value=t1[i]
        sheet3.range('B' + str(i + 1)).value = t2[i]
        sheet3.range('C' + str(i + 1)).value = t3[i]
        sheet3.range('D' + str(i + 1)).value = t4[i]



    excel.save()
    excel.close()
    excelapp.quit()

excel分列(path)

2.实际业务遇到批量报表打印的问题,每次都要打开一个excel报表然后设置打印格式打印,一个月31个报表要重复操作31次。

这里下面的代码可以将同一个目录下的自动化的同一类型报表合并成一个excel,即一个excel里面合并后有31个sheet,然后按ctrl全选所有sheet 即可以一次性打印所有报表了。

import os
import xlwings as  xw

path=r'C:\Users\d\Desktop\脚本\22'

# 创建一个新的工作簿
app = xw.App(visible=False, add_book=False)
new_wb = app.books.add()

i=0
# 遍历文件夹中的所有Excel文件
for file_name in os.listdir(path):
    if file_name.endswith('.xlsx') or file_name.endswith('.xls'):

        file_path = os.path.join(path, file_name)
        wb = app.books.open(file_path)
        try:
            sheet = wb.sheets["Sheet1"]  # 获取第一个工作表
            sheet.api.Copy(Before=new_wb.sheets[-1].api)
            new_sheet1 = new_wb.sheets[i]
            #new_sheet1.name = 'Sheet'+str(i)
        finally:
            wb.close()
    i += 1

# 保存并关闭新工作簿
new_wb.save(os.path.join(path, "union_Excel.xlsx"))
new_wb.close()
app.quit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值