今天在处理excel表格的时候,有一个需要提取表格中部分数据的操作。如果人工操作的话,有将近几千行,这样重复操作劳民伤财。
所以python就派上用场了。
简单介绍一下我要处理的问题,在excel一列有层级关系的数据,以xxx-xxx-xxx-xxx的格式展示,但是我需要的是提取最后一个符号之前的数据。
废话不多说,上代码。
# _*_ coding: utf-8 _*_
import sys
import xlrd
import xlwt
test = xlrd.open_workbook('E:\demo.xlsx') # 获取新建一个test表格
sheet = test.sheet_names() # 获取sheet的名字
print(sheet)
sheet_1 = test.sheet_by_index(0) # 获取第一个sheet,我的xxlsx只有一个sheet
# 获取列数
myrows = sheet_1.nrows # 获取sheet_1的行数
print(myrows)
font0 = xlwt.Font() # 16-19行代码都是在调整单元格的字体
font0.name = "Times New Roman"
style = xlwt.XFStyle()
style.font = font0
xlsx = xlwt.Workbook() # 新建一个xlx文件,这里有一个坑,xlwt建的是xls文件,如果你命名问xlsx后缀的话,会出现打开错误
sht = xlsx.add_sheet('sheet1') # 新建一个名为sheet1的sheet
def handle(cell):
str = '.'
str1 = '-'
l = cell[::-1] # 把字符串反向,详细参考https://www.cnblogs.com/jasmine0627/p/9510296.html
l1 = l[l.index(str1):] # 字符串里面获取自定义字符前面的字符串,详细参考https://www.cnblogs.com/java-deft/p/9828399.html
l2 = l1[::-1]
l3 = l2[:-1]
print(l3)
return l3
cell1 = sheet_1.col_values(0, 1, 562) # 获取sheet_1中的1到562的数据,
rows = len(cell1) # 获取cell1的长度
for i in range(rows):
if isinstance(cell1[i], float):
sht.write(i, 0, '', style) # 将符合此条件的数据放入相应的单元格中
else:
sht.write(i, 0, handle(cell1[i]), style) # 将符合此条件的数据放入相应的单元格中
xlsx.save('E:\demo_1.xls') # 最后将处理后的数据保存到一张新的excel表中
代码有点粗糙,但是完成相应的操作,嘻嘻!
代码的质量还有待提高,慢慢来。
最后,人生苦短我用python!