找回密码
  注册[Register]
查看: 1380|回复: 11

[python] 【Python】Excel表格汇总Excel

[复制链接]
发表于 2021-3-9 10:37 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

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

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



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

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

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

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

【源码】
[Python] 纯文本查看 复制代码
# -*- 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 = [path + r"/" + i for i in os.listdir(path) if i.endswith(".xlsx") or i.endswith(".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[0]
        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[0]
 
        nums = len(xls)
        size = 20      #符号数量即进度条长度
        for r, x in enumerate(xls):
            wb_xl = app.books.open(x)
            ws_xl = wb_xl.sheets[0]
            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
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2021-3-9 11:16 | 显示全部楼层
多谢分享多谢分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-9 12:12 | 显示全部楼层
谢谢@Thanks!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-9 12:17 | 显示全部楼层
感谢楼主分享!大牛有你更精彩!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-9 12:21 | 显示全部楼层
谢谢大佬
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-9 12:50 来自手机 | 显示全部楼层
感谢大佬分享,大牛因有你而更精彩。
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-9 12:55 | 显示全部楼层

感谢分享,谢谢提供分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-9 14:08 | 显示全部楼层
6666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-9 15:13 | 显示全部楼层
谢谢大佬分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-3-9 16:44 | 显示全部楼层

感谢楼主的分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|广告投放|大牛论坛

GMT+8, 2024-5-13 05:43 , Processed in 0.039212 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表