meiyoumima 发表于 2021-3-9 10:37

【Python】Excel表格汇总Excel

【功能】
1. 将多个Excel表格数据汇总到Excel表格;

【使用】
1. 数据备份;
2. [模板]: 在相应单元格填Excel列数并删除其他所有内容;
3. [数字前加单引号]: 可避免手机号等科学记数法;
4. [对日期格式化]: 将各种格式的日期统一为"2021.01.01"格式;


【示例】
1. 现在需要汇总形如以下格式的Excel表格:


2. 需要汇总的Excel格式如下:


3. 根据需要提取的数据所处的Excel列数制作模板如下:


4. 然后运行选择目录和模板文件即可。

【源码】
# -*- coding: UTF-8 -*-
import os, sys
import xlwings as xw
import tkinter as tk
from tkinter import filedialog

class Xlsx2Xlsx(object):
    def __init__(self):
      super(Xlsx2Xlsx, self).__init__()

    # files path
    def filePath(self):
      root = tk.Tk()
      root.withdraw()
      path = filedialog.askdirectory(title = "选择Xlsx文件所在目录")
      model = filedialog.askopenfilename(title="选择Xlsx模板文件",filetypes=[('XLSX', '*.xlsx')])
      xls =
      return model, xls

    # xlsx 2 xlsx
    def xlsx2xlsx(self, path, xls):
      app = xw.App(visible=False, add_book=False)
      wb_model = app.books.open(path)
      ws_model = wb_model.sheets
      info = ws_model.used_range
      nrows = info.last_cell.row
      ncols = info.last_cell.column
      data = ws_model.range((1, 1), (nrows, ncols)).value #每行数据
      wb_model.close()

      wb_result=app.books.add() #新建表格
      ws_result = wb_result.sheets

      nums = len(xls)
      size = 20      #符号数量即进度条长度
      for r, x in enumerate(xls):
            wb_xl = app.books.open(x)
            ws_xl = wb_xl.sheets
            for i, m in enumerate(data):
                if any(m):
                  for j, n in enumerate(m):
                        if n:
                            ws_result.range((r + 1, int(n))).value = ws_xl.range((i + 1, j + 1)).value
            wb_xl.close()
            
            bar = "\r{:>3.0f}%| ".format((r+1)/nums*100) + "{{:\u0020<{}s}}".format(size).format("\u2588"*int((r+1)/nums*size)) + " {{:0>{}d}}|{}".format(len(str(nums)), nums).format(r+1)
            # sys.stdout.write(bar) #不换行打印,需环境支持
            # sys.stdout.flush()
            print(bar)

      wb_result.save(os.path.dirname(path) + "/" + "result.xlsx")
      wb_result.close()
      app.quit()
               
if __name__ == '__main__':
    x2x = Xlsx2Xlsx()
    model, xls = x2x.filePath()
    x2x.xlsx2xlsx(model, xls)


【链接】
打包exe及源码:
https://lykisun.lanzoux.com/b00ubl0ib
密码:52pj

973715659 发表于 2021-3-9 11:16

多谢分享多谢分享

Amu5210564 发表于 2021-3-9 12:12

谢谢@Thanks!

kebowen999 发表于 2021-3-9 12:17

感谢楼主分享!大牛有你更精彩!

xiaolimingx 发表于 2021-3-9 12:21

谢谢大佬

笑东风丶 发表于 2021-3-9 12:50

感谢大佬分享,大牛因有你而更精彩。

aaaaaaaaawwww 发表于 2021-3-9 12:55


感谢分享,谢谢提供分享

ll053300 发表于 2021-3-9 14:08

6666

ye287333092 发表于 2021-3-9 15:13

谢谢大佬分享

667788 发表于 2021-3-9 16:44


感谢楼主的分享
页: [1] 2
查看完整版本: 【Python】Excel表格汇总Excel