写在前面
有个妹子有一项简单又重复的工作,将客户提供的问卷调查资料,整理成其他部门要求的模板,都是xlsx格式。
这完全可以交给电脑处理的啊,所以帮她用openpyxl造个"轮子",减少重复劳动吧。
openpyxl基础
- 三个概念
在学习这个库的时候,主要参考了博客园的"_小苹果",他写得非常清晰,容易理解,非常感谢"_小苹果,(=^ ^=),原文链接:http://www.cnblogs.com/anpengapple/p/6399304.htm
在openpyxl中,主要用到三个概念:Workbooks,Sheets,Cells。
Workbook就是一个excel工作表;Sheet是工作表中的一张表页;Cell就是简单的一个格。
openpyxl就是围绕着这三个概念进行的,不管读写都是“三板斧”:打开Workbook,定位Sheet,操作Cell。
-
xlsx写入
from openpyxl import Workbook
#引入类
wb = Workbook()
ws = wb.active
ws.title = 'Sheet1'
# 设置表名
ws['A1'] = 'Hello World
# 向A1单元格赋值
wb.save('test.xlsx')
# 保存文件 -
xlsx读取
from openpyxl import load_workbook
#引入类
fname = "test.xlsx"
wb = load_workbook(fname)
# 加载xlsx文件
first_sheet = sheetnames[0]
print first_sheet
# 打印第一个表的名称
sheet = wb.get_sheet_by_name(first_sheet)
# 读取第一个表
print sheet["A1"].value
# 打印A1的值
print sheet.cell(row=1, column=1).value
# 另一种写法,循环row、column可遍历表格内容运行结果:
Sheet1
Hello World
Hello World
源码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
@file: excel2excel.py
@time: 2017/10/7 1:50
@desc:
from openpyxl import load_workbook # 读取
from openpyxl import Workbook # 写入
import sys
import traceback # 捕获异常模块
import os
reload(sys)
sys.setdefaultencoding('utf-8')
# 解决控制台中文乱码,mystr.decode('utf-8').encode(turn_type),直接引用
turn_type = sys.getfilesystemencoding()
def ExcelToExcel(fname):
# ....读取.... #
print u'读取文件...',
# fname = "问卷调查.xlsx"
wb = load_workbook(fname)
# 读取第一张表
sheetnames = wb.get_sheet_names()
ws = wb.get_sheet_by_name(sheetnames[0])
# 获取行数和列数
rows = ws.max_row # 行数
cols = ws.max_column # 列数
con_list = []
print u'[完成]'
# ........ #
# ....写入.... #
wb2 = Workbook()
ws2 = wb2.active
ws2.title = 'Sheet1'
# ........ #
# 先写入表头
con2_list = [u'邮箱地址', u'手机号', u'日期', u'公司名', u'公司地址', u'公司电话']
ws2.append(con2_list) # 以列表的方式整行写入
con2_list = [] # 清空列表
print u'转换数据...',
for i in range(2, rows + 1): # 从第二行开始读取
for j in range(1, cols + 1):
row = ws.cell(row=i, column=j).value
con_list.append(row) # 读取整行,以列表的方式储存
# 抽取需要的数据
con2_list.extend([con_list[6], con_list[8], con_list[9], con_list[10], con_list[11], con_list[32]])
ws2.append(con2_list) # 写入新的xlsx
con2_list = [] # 清空列表
con_list = [] # 清空列表
filename = str(fname).split('.')[0] + '_new' + '.xlsx'
print u'[完成]'
print u'保存文件...',
wb2.save(filename)
print u'[完成]'
print u'请查看新文件:%s' % filename.decode('gbk')
def main():
print u'注意仅支持xslx格式.'
mystr = u'请输入需转换的文件名:'.decode('utf-8').encode(turn_type)
fname = raw_input(mystr)
try:
ExcelToExcel(fname)
except Exception:
f = open("log.txt", 'a')
traceback.print_exc(file=f)
f.close()
if __name__ == '__main__':
main()
os.system("echo.")
os.system('pause')
网友评论