现在有个小任务,需要处理excel中的数据。其实就是简单的筛选,excel玩的不熟练,而且需要处理的表有70多个,于是想着写个脚本处理一下吧。
python中的openpyxl包可以轻松实现读写excel文件,下面简单介绍一下过程。
通过pip或者easy_install均可安装openpyxl。
openpyxl官网:https://openpyxl.readthedocs.org/en/latest/
安装命令:
pip install openpyxlor
easy_install openpyxl即可。
加载workbook,注意,openpyxl只支持xlsx格式,老版的xls格式需要其他方法去加载。
wb = load_workbook(filename = r'tj.xlsx')
sheetnames = wb.get_sheet_names()
ws = wb.get_sheet_by_name(sheetnames[0])
c = ws['A4']
or
c = ws.cell('A4')
or
d = ws.cell(row = 4, column = 2)
一次获取多个单元格的数据
cell_range = ws['A1':'C2']
or
tuple(ws.iter_rows('A1:C2'))
or
for row in ws.iter_rows('A1:C2'):
for cell in row:
print cell
or
data_dic = []
for rx in range(0,ws.get_highest_row()):
temp_list = []
money = ws.cell(row = rx,column = 1).value
kind = ws.cell(row = rx,column = 2).value
temp_list = [money , kind]
#print temp_list
data_dic.append(temp_list)
for l in data_dic:
print l[0],l[1]
比如数据存在上边定义的data_dic中
out_filename = r'result.xlsx'
outwb = Workbook()
ew = ExcelWriter(workbook = outwb)
ws = outwb.worksheets[0]
ws.title = "res"
i=1
for data_l in data_dic:
for x in range(0,len(data_l)):
#col = get_column_letter(x)
ws.cell(column = x+1 , row = i , value = "%s" % data_l[x])
i+=1
ew.save(filename = out_filename)
再增加一个sheet写内容
ws2 = outwb.create_sheet(title = 's2')
for data_l in data_dic:
for x in range(0,len(data_l)):
ws2.cell(column = x+1 , row = i , value = "%s" % data_l[x])
i+=1
ew.save(filename = out_filename)
表格中的值,openpyxl会自动转换为不同的类型,有些表格中会有中文出现,就需要进行相应的转码。
可以写一个函数专门处理转码,需要时调用
def gbk2utf(in_data , tag):
if 1 == tag:
return in_data.encode('gbk').decode('gbk')
elif 0 == tag:
return in_data.encode('gbk').decode('gbk').encode('utf8')
当原始的excel文件是gbk编码时,就需要tag=0的方式去处理,
因为读入后是gbk的编码,需要先encode为gbk再decode为unicode,再encode为utf8,就可以显示了。