吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 26563|回复: 108
收起左侧

[原创工具] 【V2.3】批量合并EXCEL工作表小工具

    [复制链接]
meforeg 发表于 2019-9-26 12:42
本帖最后由 meforeg 于 2020-3-3 19:05 编辑

链接:
https://www.lanzouj.com/b00za3j6j

另外一个工具:拆分EXCEL文件工具
https://www.52pojie.cn/forum.php ... pid=28133349&page=1

PYTHON写的,打包为一个EXE文件,操作方法:
把所有需要汇总的EXCEL文件(XLS、XLSX都可以)放到同一文件夹下,把该文件夹拖到EXE文件上,输入标题所在行号,在汇总文件夹所在目录会生成一个汇总文件

使用方法.gif
PYTHON源码:

[Python] 纯文本查看 复制代码
#  v2.1
#  文件名放在最右侧列
#  v2.2
#  加入自动识别文件结构是否被改变功能
#  v2.3
#  加入选择统计哪个worksheet的功能

import xlrd, xlsxwriter
import os, sys, re, logging
from pprint import pprint

print('EXCEL汇总程序 V2.3   --by Eyes 2019.9')

logging.basicConfig(filename=sys.argv[0] + '.log', level=logging.INFO,
                    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

dir = sys.argv[1]
# dir = r'C:\Users\Eyes\Desktop\已统计(请勿上传)'
r = re.search('(.+)[\\\]', dir)
rr = re.search('[\\\]([^\\\]+)$', dir)
parentDir = r.group(1)
lastDir = rr.group(1)

resultFile = parentDir + '\\汇总:' + lastDir + '.xlsx'
new_wb = xlsxwriter.Workbook(resultFile)  # 创建excel文件
new_ws = new_wb.add_worksheet('统计')  # 括号内为工作表表名

filenames = os.listdir(dir)
isFirstFile = True
newWsRowNum = 0

# 错误的文件格式
validTypeFiles = []
# 统计标题相同的文件数,以判断文件结构是否被修改
sameTitleFiles = {}

# 保存统计第几个表的索引
summarySheetIndex = None
# 标题所在行
titleRowNum = None

# 开始文件循环
for filename in filenames:
    if not re.search(r'\.xlsx?$', filename, re.I):
        validTypeFiles.append(filename)
        continue
    logger.info('开始处理:' + filename)
    file = dir + '/' + filename
    wb = xlrd.open_workbook(filename=file)
    # 统计第几个表
    if summarySheetIndex == None:
        print('\n在工作薄中发现以下工作表:')
        __n__ = 0
        for sheetName in wb.sheet_names():
            print(__n__, sheetName)
            __n__ += 1
        _summarySheetIndex = input('\n请输入统计第几个工作表[0]: ').strip()
        if _summarySheetIndex == '':
            _summarySheetIndex = 0
        else:
            _summarySheetIndex = int(_summarySheetIndex)
        summarySheetIndex = _summarySheetIndex

    # 确定标题所在行
    if titleRowNum==None:
        n = input('\n请输入标题所在行号[2]:').strip()
        if n != '':
            titleRowNum = int(n)
        else:
            titleRowNum=2

    ws = wb.sheet_by_index(summarySheetIndex)

    # 保存第一列标题名称至sameTitleFiles变量
    firstTitle = ws.cell(titleRowNum - 1, 0).value
    if firstTitle not in sameTitleFiles:
        sameTitleFiles[firstTitle] = []
    sameTitleFiles[firstTitle].append(filename)

    # 第一行写入标题
    if isFirstFile:
        # 写入文件名
        new_ws.write(newWsRowNum, ws.ncols, '文件名')
        # 逐个写入标题
        for y in range(0, ws.ncols):
            new_ws.write(newWsRowNum, y, ws.cell(titleRowNum - 1, y).value)
        isFirstFile = False
        newWsRowNum += 1
    # 写入数据
    for x in range(titleRowNum, ws.nrows):
        for y in range(0, ws.ncols):
            new_ws.write(newWsRowNum, y, ws.cell(x, y).value)
        # 写入文件名
        new_ws.write(newWsRowNum, ws.ncols, filename)

        newWsRowNum += 1
    # 打印文件名
    print(filename)

new_wb.close()

print('\n汇总完成,文件地址  ', resultFile)

if validTypeFiles:
    print('\n错误格式的文件:', validTypeFiles)

# 计算出第一列标题内容相同的最大数量
count = {}
for k, v in sameTitleFiles.items():
    count[k] = len(v)
maxLen = max(count.values())

# 保存可能有错误的文件名
maybeErrors = []
# 挑选出与字段最大相同数不同的文件
for k, v in sameTitleFiles.items():
    if len(v) < maxLen:
        maybeErrors += v

if len(maybeErrors) > 0:
    print('\n\n以下文件结构被改变,有可能造成统计错误,请仔细查看:\n')
    for i in maybeErrors:
        print(i)

input('\n完成 按任意键退出')

免费评分

参与人数 25吾爱币 +27 热心值 +24 收起 理由
ulti2019 + 1 + 1 我很赞同!
zpbeyond + 1 + 1 用心讨论,共获提升!
softbird + 1 + 1 我很赞同!
xiky康 + 1 谢谢@Thanks!
WSROK + 1 + 1 感谢您的分享,如果标题是两行或者三行怎么办
小满集藏 + 1 + 1 我很赞同!
gyscy + 1 + 1 谢谢@Thanks!
wencnet + 1 + 1 谢谢@Thanks!
sikv + 1 + 1 不错啊啊,好
mypj52 + 1 + 1 感觉其他语言没有VBA操作EXCEL方便,但是可以脱离EXCEL制作挺好
xuet + 1 + 1 excel里面一些指定的下拉框啥的时间啥的会乱。不过还是感谢作者创作! 希望.
iamlimeng + 1 + 1 非常好,感谢分享,PY很强的样子!
xulingxiaolu + 1 + 1 谢谢@Thanks!
guoaibing + 1 + 1 热心回复!
song6229307 + 1 + 1 谢谢@Thanks!
wangyoujun + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
fenit-2000 + 1 + 1 我很赞同!
szqever + 1 + 1 谢谢@Thanks!
ieiqp + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
fyz2007 + 1 谢谢@Thanks!
bluehorse723 + 1 + 1 谢谢@Thanks!
yanglinman + 1 谢谢@Thanks!
Hmily + 6 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
g9596 + 1 + 1 谢谢@Thanks!
L588888 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| meforeg 发表于 2020-3-4 18:53
本帖最后由 meforeg 于 2020-3-4 18:57 编辑
linfuluan 发表于 2020-3-4 17:45
我用xlwings写了一个合并excel的,也用installer打包成exe文件。我也想做成你那种,如果直接双击就给提示要 ...

[Python] 纯文本查看 复制代码
    # 判断打开方式是否正确
    if len(sys.argv) == 1:
        print('''
        *** 操作方法不正确!!! ***\n
        正确的操作方法:
        1. 将需要拆分的EXCEL文件夹拖到本程序文件上;
        2. 根据程序提示操作。
        ''')
        input('按回车键退出后重试')
        exit()
iooo 发表于 2020-2-18 20:50
---------------------------
酷我音乐榜单歌单下载工具
---------------------------
Access violation at address 00000000 in module '酷我音乐榜单歌单下载工具.exe'. Read of address 00000000.
---------------------------
确定   
---------------------------

提示这个,
hxw0204 发表于 2019-9-26 12:55
delong 发表于 2019-9-26 12:58
丁瓒,不错的东西
chaozi5756 发表于 2019-9-26 13:19
多谢分享,
wgy1213 发表于 2019-9-26 13:50
win10打开闪退 呜呜
冲刺及格线 发表于 2019-9-26 14:06
我先去测试下,看好用不,还是谢谢楼主分享。
少年班 发表于 2019-9-26 14:24
多谢分享。
haile319 发表于 2019-9-26 14:27
这个得是同规格布局得才行吗,试试看。
 楼主| meforeg 发表于 2019-9-26 14:34
wgy1213 发表于 2019-9-26 13:50
win10打开闪退 呜呜

没有界面的,看我写的使用说明
 楼主| meforeg 发表于 2019-9-26 15:00
haile319 发表于 2019-9-26 14:27
这个得是同规格布局得才行吗,试试看。

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

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 09:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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