python用openpyxl操作excel
来源:互联网 发布:淘宝发布宝贝发货地址 编辑:程序博客网 时间:2024/05/07 11:17
python操作excel方法
1)自身有Win32 COM操作office但讲不清楚,可能不支持夸平台,linux是否能用不清楚,其他有专业处理模块,如下2)xlrd:(读excel)表,xlrd读大表效率高于openpyxl3)xlwt:(写excel)表, xlrd和xlwt对版本上兼容不太好,很多新版excel有问题。
新版excel处理:
openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件,xls和xlsx之间转换容易注意:如果文字编码是“gb2312” 读取后就会显示乱码,请先转成Unicode
安装openpyxl
1)下载openpyxl模块:https://pypi.python.org/pypi/openpyxl2)解压到指定文件目录:tar -xzvf openpyxl.tar.gz3)进入目录,找到setup.py文件,执行命令:python setup.py install 如果报错No module named setuptools 就使用命令“easy_install openpyxl”,easy_install for win32,会自动安装setuptools。 这里注意,如果不能自动安装,基本上python的模块都通过命令 python 模块名.py install 来安装,如果setuptools模块没有,直接去官网下载,然后前面命令安装就可以了4)处理图片还需要安装pillow(PIL) To be able to include images (jpeg, png, bmp,...) into an openpyxl file, you will also need the “pillow” library that can be installed with: pip install pillow
pthon学习资料
python 学习小组http://www.thinksaas.cn/group/show/368/page/4官网: https://pypi.python.org/pypi/openpyxl http://openpyxl.readthedocs.io/en/default/good: http://blog.csdn.net/suofiya2008/article/details/6284208 http://blog.csdn.net/zzukun/article/details/49946147 http://www.thinksaas.cn/topics/0/501/501962.html
openpyxl的使用
openpyxl定义多种数据格式
最重要的三种:NULL空值:对应于python中的None,表示这个cell里面没有数据。numberic: 数字型,统一按照浮点数来进行处理。对应于python中的float。string: 字符串型,对应于python中的unicode。
Excel文件三个对象
workbook: 工作簿,一个excel文件包含多个sheet。sheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。cell: 单元格,存储数据对象
1)导入
from openpyxl import Workbookfrom openpyxl import load_workbookfrom openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font, Color, Fillfrom openpyxl.styles import colorsfrom openpyxl.styles import Fill,fillsfrom openpyxl.formatting.rule import ColorScaleRule
2)打开workbook:
wb = load_workbook('file_name.xlsx')
3)open sheet:
通过名字 ws = wb["frequency"] 等同于 ws2 = wb.get_sheet_by_name('frequency') 验证命令ws is ws2 is ws3 输出True不知道名字用index sheet_names = wb.get_sheet_names() ws = wb.get_sheet_by_name(sheet_names[index])# index为0为第一张表 或者 ws =wb.active 等同于 ws = wb.get_active_sheet() #通过_active_sheet_index设定读取的表,默认0读第一个表 活动表表名wb.get_active_sheet().title
4)建新表
ws1 = wb.create_sheet() #默认插在最后ws2 = wb.create_sheet(0) #插在开头 建表后默认名按顺序,如sheet1,sheet2... ws.title = "New Title" #修改表名称 简化 ws2 = wb.create_sheet(title="Pi")
5)backgroud color of tab( be white by default)
ws.sheet_properties.tabColor = "1072BA" # set with RRGGBB color code
6)单元格使用
c = ws['A4'] #read 等同于 c = ws.cell('A4') ws['A4'] = 4 #write #ws.cell有两种方式,行号列号从1开始d = ws.cell(row = 4, column = 2) #行列读写d = ws.cell('A4') 写入cell值 ws.cell(row = 4, column = 2).value = 'test' ws.cell(row = 4, column = 2, value = 'test')
7)访问多个单元格
cell_range = ws['A1':'C2']读所有单元格数据get_cell_collection()
8) 按行操作,按列操作
a)逐行读 ws.iter_rows(range_string=None, row_offset=0, column_offset=0): range-string(string)-单元格的范围:例如('A1:C4') row_offset-添加行 column_offset-添加列 返回一个生成器, 注意取值时要用value,例如: for row in ws.iter_rows('A1:C2'): for cell in row: print cell 读指定行、指定列: rows=ws.rows#row是可迭代的 columns=ws.columns#column是可迭代的 打印第n行数据 print rows[n]#不需要用.value print columns[n]#不需要用.valueb)逐行写 (http://openpyxl.readthedocs.io/en/default/_modules/openpyxl/worksheet/worksheet.html#Worksheet.append) ws.append(iterable) 添加一行到当前sheet的最底部 iterable必须是list,tuple,dict,range,generator类型的。 1,如果是list,将list从头到尾顺序添加。 2,如果是dict,按照相应的键添加相应的键值。 append([‘This is A1’, ‘This is B1’, ‘This is C1’]) append({‘A’ : ‘This is A1’, ‘C’ : ‘This is C1’}) append({1 : ‘This is A1’, 3 : ‘This is C1’})
8) #显示有多少张表
wb.get_sheet_names() #显示表名,表行数,表列数 print ws.title print ws.max_rowprint ws.max_columnws.get_highest_row() #UserWarning: Call to deprecated functionws.get_highest_column()# UserWarning: Call to deprecated function
9) 获得列号x的字母 col = get_column_letter(x), x从1开始
from openpyxl.utils import get_column_letterfor x in range( 1, len(record)+ 1 ): col = get_column_letter(x) ws.cell( '%s%s' %(col, i)).value = x通过列字母获取多个excel数据块cell_range = "E3:{0}28".format(get_column_letter(bc_col))ws["A1"] = "=SUM(%s)"%cell_range
10)excel文件是gbk编码,读入时需要先encode为gbk,再decode为unicode,再encode为utf8
cell_value.encode('gbk').decode('gbk').encode('utf8')
11) 公式计算formulae
ws["A1"] = "=SUM(1, 1)"ws["A1"] = "=SUM(B1:C1)"
代码实例实例(直接修改使用)
from openpyxl import Workbookfrom openpyxl.compat import rangefrom openpyxl.cell import get_column_letterdest_filename = 'empty_book.xlsx'wb = Workbook()ws1 = wb.activews1.title = "range names"for row in range(1, 40): ws1.append(range(600))ws3 = wb.create_sheet(title="Data")for row in range(10, 20): for col in range(27, 54): _ = ws3.cell(column=col, row=row, value="%s" % get_column_letter(col))print(ws3['AA10'].value)wb.save(filename = dest_filename)sheet_ranges = wb['range names']print(sheet_ranges['D18'].value)ws['A1'] = datetime.datetime(2010, 7, 21)ws['A1'].number_format #输出'yyyy-mm-dd h:mm:ss'rows = [ ['Number', 'Batch 1', 'Batch 2'], [2, 40, 30], [3, 40, 25], [4, 50, 30], [5, 30, 10], [6, 25, 5], [7, 50, 10],]rows = [ ['Date', 'Batch 1', 'Batch 2', 'Batch 3'], [date(2015,9, 1), 40, 30, 25], [date(2015,9, 2), 40, 25, 30], [date(2015,9, 3), 50, 30, 45], [date(2015,9, 4), 30, 25, 40], [date(2015,9, 5), 25, 35, 30], [date(2015,9, 6), 20, 40, 35],]for row in rows: ws.append(row)
excel中图片的处理,PIL模块
try: from openpyxl.drawing import image import PIL except ImportError, e: print "[ERROR]",e report_file = self.excel_path + "/frquency_report_%d.xlsx" %id shutil.copyfile(configs.PATTEN_FILE, report_file) if not os.path.exists(report_file): print "generate file failed: ", report_file sys.exit(1) wb = load_workbook(report_file) ws = wb.get_sheet_by_name('frequency') img_f = configs.IMAGE_LOGO if os.path.exists(img_f): try: img = image.Image(img_f) ws.add_image(img, 'A1') except Exception, e: print "[ERROR]%s:%s" % (type(e), e) ws['A1'] = "程序化营销平台" else: ws['A1'] = "程序化营销平台" font1 = Font(size=22) ws['A1'].font = font1 ws['B4'] = ad_plan #等同ws.cell('B4') = ad_plan ws['B5'] = ad_names ws['B6'] = str(start_d) + ' to ' + str(end_d) wb.save(report_file) try: wb = load_workbook(report_file) ws = wb.get_sheet_by_name('frequency') row = 9 for it in query_result: one_row = it.split('\t') print one_row if '10' == one_row[0]: one_row[0] = '10+' col = 1 for one_cell in one_row: ws.cell(row = row, column = col).value = one_cell col = col + 1 row = row + 1 except Thrift.TException, tx: print '[ERROR] %s' % (tx.message) else: wb.save(report_file) finally: pass
#
from openpyxl.writer.excel import ExcelWriter wb1=Workbook()#新建工作簿 ewb1=ExcelWriter(workbook=wb1)#新建一个ExcelWriter,用来写wb1 ws1=wb1.worksheets[0]#取得wb1的第一个工作表ws1 one_cell = ws1.cell(row = row, column = col).value ws1.cell(row = row, column = col).value = one_cell ewb1.save(filename=dest_filename)#保存一定要有,否则不会有结果
0 0
- python用openpyxl操作excel
- python openpyxl 操作 excel
- 用openpyxl操作excel电子表格
- python操作excel的包(openpyxl, xlsxwriter)
- python 操作Excel openpyxl的使用
- openpyxl - 操作Excel文件
- python openpyxl读写excel
- windows下python装openpyxl 操作 excel文件 xlsx
- Python操作excel的几种方式--xlrd、xlwt、openpyxl
- python openpyxl 操作 excel ==> 简单读取(持续完善...)
- <Python+Openpyxl>用Openpyxl做两个Excel文件的比对
- 用python读写excel的强大工具:openpyxl
- openpyxl 操作excel之操作数据
- 如何用openpyxl操作excel文档
- python3使用 openpyxl 操作excel表格
- python读写excel的强大工具:openpyxl
- 使用Python openpyxl模块读写Excel
- Python使用openpyxl读写excel文件
- Mac安装cocoapods和使用
- PHP在html中显示源代码的几种方法
- C语言的指针、链表的原理和各类操作
- 使用opencv写汉字
- selenium+老虎前端开户用例
- python用openpyxl操作excel
- linux系统编程之文件与I/O(五):fcntl 函数与文件锁
- _all、_source、store、index的使用
- 帮你全面彻底搞定MATERIAL DESIGN的学习笔记
- 帮你全面彻底搞定MATERIAL DESIGN的学习笔记
- BroadcastReceiver简介
- Xamarin体验:使用C#开发iOS/Android应用
- 对象比较器
- 学生管理系统(JAVA)