实现Excel里每个sheet的排序并整合在一个sheet里

  • 针对一个excel文件中多个sheet的批处理,excel的选定全部工作表功能可以解决很多问题(如:转置、替换等),但是对于排序确难以实现。因此在这里使用python工具来实现批量排序。

  • 最终目的是实现对每个sheet文件排序后,将所有sheet拼接在一个sheet中。
  • 最初打算先批量排序,然后在实现拼接。

但是在运行批量排序的代码中发现sheet发生覆盖,虽然网上有避免覆盖的方法,但是不适用于这里。这里先介绍该方法。

https://blog.csdn.net/qq_39697564/article/details/88640686

# 1. 基本模块的导入
import numpy as np
import pandas as pd

# 2. 创建不同的写入数据
DF_1 = pd.DataFrame(np.random.rand(12).reshape(6,2),columns=list('AB'))
DF_2 = pd.DataFrame(np.random.rand(12).reshape(6,2),columns=list('CD'))+1
DF_3 = pd.DataFrame(np.random.rand(12).reshape(6,2),columns=list('EF'))+2
DF_4 = pd.DataFrame(np.random.rand(12).reshape(6,2),columns=list('GH'))+3

# 3. 数据写出
with pd.ExcelWriter(r'C:\Users\Desktop\ExcelTest\DF_All.xlsx') as writer:
    DF_1.to_excel(writer,sheet_name='DF_1')
    DF_2.to_excel(writer,sheet_name='DF_2')
    DF_3.to_excel(writer,sheet_name='DF_3')
    DF_4.to_excel(writer,sheet_name='DF_4')
writer.save()
writer.close()
print('Finished.')
  • 由上述代码也可以看出这里的每一个将要分别写入excel的数据框是独立的。但是我是想从一个excel中的多的sheet提取,然后处理后再次写入excel。
# -*- coding: UTF-8 -*-
#导入所需模块
import xlrd
import numpy as np
import pandas as pd
from  pandas import DataFrame
from openpyxl import load_workbook

excel_name = r'C:\4_stepSHIYAN\shiyan222.xlsx'  #表格地址+表格名
wb = xlrd.open_workbook(excel_name)  # 获取workbook中所有的表格
sheets = wb.sheet_names()
print (sheets)

# 循环遍历所有sheet
#alldata = DataFrame()
for i in range(len(sheets)):
      df = pd.read_excel(excel_name, sheet_name=i, index=False, encoding='utf8')
      df.sort_values("POINTID", ascending=True, inplace=True)
      print (df)  #查看dataframe
   ###保存为新的sheet,首先新建sheet
      with pd.ExcelWriter(r'C:\4_stepSHIYAN\new.xlsx' ,engin='openpyxl') as writer :
            for j in range(3):
                  name = "sheet"+ str(j)
                  df.to_excel(writer,sheet_name= name )
     
print ('处理完成!')


##########上述代码跑到第二个for语句时,实际只是对于i内容的两次存储。并没真正实现i1、i的单独存储

未解决疑问——如何实现从excel里读取出来的多个sheet处理后再次写入另一个excel的多个sheet???

  • 但是对于自己的最终目标,可以直接将处理完的sheet拼接起来后再写入一个sheet中!!
    # -*- coding: UTF-8 -*-
    #导入所需模块
    import xlrd
    import pandas as pd
    from  pandas import DataFrame
    from openpyxl import load_workbook
    
    excel_name =  r'C:\4_stepSHIYAN\shiyan222.xlsx'   #表格地址+表格名
    wb = xlrd.open_workbook(excel_name)  # 获取workbook中所有的表格
    sheets = wb.sheet_names()
    print (sheets)
    
    # 循环遍历所有sheet
    alldata = DataFrame()
    for i in range(len(sheets)):
        df = pd.read_excel(excel_name, sheet_name=i, index=False, encoding='utf8')
        df.sort_values("POINTID", ascending=True, inplace=True)  #对sheet内容按照第一列-POINTID-排序、inplace=True 将排序之后的数据直接替换原来的数据框(默认为False,False时,那么原来顺序没变,只是返回的是排序的)、ascending=True默认True升序排列;False降序排列
        alldata = alldata.append(df)  ##拼接
    #查看dataframe
    #print alldata
    
    #保存为新的sheet,首先新建sheet,合并后的数据保存到新sheet中
    writer = pd.ExcelWriter( r'C:\4_stepSHIYAN\shiyan222.xlsx' ,engin='openpyxl')
    book = load_workbook(writer.path)  ####作用?
    writer.book = book
    
    #利用dataframe.to_excel保存合并后的数据到新的sheet
    alldata.to_excel(excel_writer=writer,sheet_name="ALLDATA")#生成新的sheet命名为ALLDATA
    writer.save()
    writer.close()
    print ('处理完成!')
    

     

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leon_124

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值