基于Python的批量处理execl文件内容
今天遇到一个棘手的问题,在三个文件夹中将近60个execl表选出所需的特定三列数据,且表名,sheet名,表中的数据类型均不一致,故想到利用Python批量化处理技术手段进行处理。其原理是先读取每个表头,通过填充使其一致,然后将三个文件夹内的execl全部集中到一个文件内,然后通过读取所需的三列数据进行提取,并且在按序读取的过程中,一旦表头为空即该表停止读取。然后将读取出来的数据存储到新的表中。
import openpyxl
import os
#打印表头
def printSheetTitle(row):
a = ''
b = 0
for col in row:
if col.value:
a = a + col.value + ','
b += 1
else:
break
# print("{0},{2},{1}".format(file, a, b))
return
#获取有用的列号
def findColNo(row):
classColNo = ''
nameColNo = ''
idColNo = ''
for col in row:
if col.value == None:
break
if col.value.find("姓") > -1 :
nameColNo = col.column
elif col.value.find("班级") > -1:
classColNo = col.column
elif col.value.find("身份") > -1:
idColNo = col.column
# print("{0},{1},{2}, {3}".format(file, nameColNo, classColNo, idColNo))
return nameColNo, classColNo, idColNo
def printExcel(basePath, file, summarySheet):
wb = openpyxl.load_workbook(basePath+'\\'+file, read_only=False)
activeSheet = wb.active
# print("{0}是:{1}*{2}的表格".format(activeSheet['A1'].value ,activeSheet.max_row-2, activeSheet.max_column))
tRows = activeSheet[2]
#打印表头
printSheetTitle(tRows)
#获取有用的列号
nameColNo, classColNo, idColNo = findColNo(tRows)
res = []
for num in range(3, 1000):
# print(activeSheet["C"+str(num)].value)
if activeSheet["A"+str(num)].value == None:
break
data = [activeSheet.cell(row=num, column=nameColNo).value,
activeSheet.cell(row=num, column=classColNo).value,
activeSheet.cell(row=num, column=idColNo).value]
print(data)
summarySheet.append(data)
basePath = r"C:\xxx\xxx\xxx\xxx\xxx"
files = os.listdir(basePath)
summaryWork = openpyxl.load_workbook(basePath+'\\all.xlsx', read_only=False)
summarySheet = summaryWork.active
for file in files:
# print(file)
printExcel(basePath, file, summarySheet)
summaryWork.save('all.xlsx')
该个技术有一个软肋,即openxl无非支持读取xls的文本文件,故需将xls的文件替换成xlsx或xlsm。
本次实验还有一个思路,通过读取execl表的方式将数据导入到mysql数据库中,然后再通过数据库技术导出所需的数据,可惜没有成功。下次有机会再继续尝试

浙公网安备 33010602011771号