本帖最后由 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文件上,输入标题所在行号,在汇总文件夹所在目录会生成一个汇总文件
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完成 按任意键退出')
|