PY爬虫极速学习 (六)Excel表格合并
2019-11-30 本文已影响0人
罗卡恩
![](https://img.haomeiwen.com/i15146729/f60bf4260021564a.png)
![](https://img.haomeiwen.com/i15146729/fa2da7d3ed2207fd.png)
xlwt xlsxwriter会替换之前的 不能追加
![](https://img.haomeiwen.com/i15146729/f5b3232bc910934b.png)
第一种比较简单
第二种难
主要是巩固基础 所以就按第二种的写
安装xlsxwriter
![](https://img.haomeiwen.com/i15146729/d16a9e80964e4b70.png)
然后是报了个警告
说是pip有点老要更新
这样就更新完毕
![](https://img.haomeiwen.com/i15146729/2658ff5d4c0fcab1.png)
在安装 xlrd
![](https://img.haomeiwen.com/i15146729/fdf1ccda2afcc132.png)
创建三个excel
![](https://img.haomeiwen.com/i15146729/5918d252037af924.png)
每一个excel 有两个sheet 东西都不一样
![](https://img.haomeiwen.com/i15146729/f027c7f52a459af6.png)
第一个是课 第二个是书
![](https://img.haomeiwen.com/i15146729/834d1b912d0500db.png)
老版office2007不支持这样多shell存 所以网上直接在线编辑文档后下载
写不出来都行 看懂代码就行
老师代码没看懂 比较绕 自己写了个
import xlrd,xlsxwriter
#设置要合并的所有文件
road="D:/py/Excel合并用的Excel/"
allxlsPath=[road+"test1.xls",road+"test2.xls",road+"test3.xls"]
#合并后生成的文件
endxlsPath=road+"combineExcel.xls"
#变量
#储存一个标签的结果
sValue=[]
#储存第一个文件的sheet信息
#根据第一个为基准创建新的表格
shname=[]
#下面是各种方法
#读取第一个待读文件 获取sheet数
xls=xlrd.open_workbook(allxlsPath[0])
#获取所有sheet
sh=xls.sheets()
for sheet in sh:
shname.append(sheet.name)
sValue.append([])
#获取某个文件内容 返回当前sheet内容
def getfile(path,shNum):
#打开文件 覆盖之前的
xls=xlrd.open_workbook(path)
#根据sheet名打开一页
table=xls.sheet_by_name(shname[shNum])
return table
#获取返回第一行的值
def getHeadValue(table):
return table.row_values(0)
#获取返回除了第一行所有行的值
def getOtherValue(table):
#获取某个sheet的行数
num=table.nrows
rValue=[]
for row in range(1,num):
#返回一整行
rdata=table.row_values(row)
rValue.append(rdata)
return rValue
#依次读取各sheet的内容
#依次读取各文档当前sheet的内容
for shNum in range(0,len(shname)):
fileValue=sValue[shNum]
table=getfile(allxlsPath[0],shNum)
#加入标题
fileValue.append(getHeadValue(table))
for path in allxlsPath:
print("正在读取文件"+str(path)+"的第"+str(shNum)+"个shell的...")
table=getfile(path,shNum)
#加入每一个文档的除了第一行的每一行
for value in getOtherValue(table):
fileValue.append(value)
#print(sValue[0])
#print(sValue[1])
#由于append具有叠加关系 分析可得所有信息在sValue中储存
#打开最终写入的文件 大写别忘了 我是在这卡主了
wbl=xlsxwriter.Workbook(endxlsPath)
#遍历每个sheet的数据
for s in range(0,len(shname)):
#取汇总过的一个sheet的数据
sheetData=sValue[s]
#创建一个新的sheet
thisSheet=wbl.add_worksheet(shname[s])
#将多个标签写入新文件中
for a in range(0,len(sheetData)):
for b in range(0,len(sheetData[a])):
data=sheetData[a][b]
#创建一个sheet工作对象
thisSheet.write(a,b,data)
#写入需要关闭才会保存生成
wbl.close()
思路是把每个重复的第一行 提取出来
![](https://img.haomeiwen.com/i15146729/50e400d7b54465a2.png)
之后只读第一行之后的
以第一个文档为基准
然后把他们加到一个数组里
sValue打印出来
用在线json转换 是这个格式
http://www.bejson.com/index.php
![](https://img.haomeiwen.com/i15146729/432d5d6584f4a4c4.png)
很多东西老师也没讲 自己去查
最终
![](https://img.haomeiwen.com/i15146729/b860ffaf0d995093.png)
![](https://img.haomeiwen.com/i15146729/1a7639b2153a1642.png)
sheet将以第一个文档为基准
![](https://img.haomeiwen.com/i15146729/dde0ee3d1a3b1451.png)
怎么说作为练习难度跳跃幅度比较大 可能会直接劝退
和C#有点不同的是 方法必须写在用它代码的上方
就是方法也要初始化 是类似于一条线走下来的