今天同事需要有一个将excel 里面数据随机分成特定的几个组,并将每组数据分别生成excel
正好刚接触python,用python写了个小工具,打包成exe 很方便
#!/usr/bin/env python3
# encoding:utf-8
'''
@author: yingk
@file: excel.py
'''
import configparser
import xlrd
import xlwt
import os
from random import shuffle
def mkdir(path):
# 判断路径是否存在
# 存在 True
# 不存在 False
isExists = os.path.exists(path)
# 判断结果
if not isExists:
# 如果不存在则创建目录
# 创建目录操作函数
os.makedirs(path)
#os.path.realpath:获取当前执行脚本的绝对路径。
#os.path.split:如果给出的是一个目录和文件名,则输出路径和文件名
proDir = os.path.split(os.path.realpath(__file__))[0]
configPath = os.path.join(proDir, "config.ini")
conf = configparser.ConfigParser()
conf.read(configPath,encoding='UTF-8') # 读取内容
#分组
group=conf.getint("config","group")
#读取文件夹下excel
excelPath = os.path.join(proDir, "excel")
filenames = os.listdir(excelPath)
limit = 10
for filename in filenames:
readbook = os.path.join(excelPath, filename) #原始文件路径
spNum = "." in filename
if not spNum:
continue
savebook = os.path.join(excelPath, filename.split(".")[0])
Suffix = filename.split(".")[1]
mkdir(savebook)
data = xlrd.open_workbook(readbook)
# 获取sheet
table = data.sheets()[0] # 获取第一个sheet的所有数据
# 行数
nrows = table.nrows
rowNum=[]
for i in range(1,nrows):
rowNum.append(i)
shuffle(rowNum) # 重排序
m = int(len(rowNum) / group)
# 列数
ncols = table.ncols
sheets = nrows / limit # 总共需要多少excel
if not sheets.is_integer(): # 如果不是整除则需要+1
sheets = sheets + 1
title_row = table.row_values(0) # 获取首行的标题
#
i =0
for row in range(0, len(rowNum), m):
i+=1
workbook = xlwt.Workbook(encoding='ascii')
worksheet = workbook.add_sheet(sheetname="0") # 设置sheet名称
for col in range(0, ncols): # 写首行的标题
worksheet.write(0, col, title_row[col])
b=0
for a in rowNum[row:row + m]:
b+=1
row_content = table.row_values(a)
for col in range(0, ncols):
worksheet.write(b, col, row_content[col])
workbook.save(savebook + "\\" + filename.split(".")[0] +"_"+str(i) +"."+ Suffix)