设为首页 收藏本站
查看: 743|回复: 0

[经验分享] Python处理Excel文档(xlrd, xlwt, xlutils)

[复制链接]

尚未签到

发表于 2015-4-23 05:07:03 | 显示全部楼层 |阅读模式
简介

  xlrd,xlwt和xlutils是用Python处理Excel文档(*.xls)的高效率工具。其中,xlrd只能读取xls,xlwt只能新建xls(不可以修改),xlutils能将xlrd.Book转为xlwt.Workbook,从而得以在现有xls的基础上修改数据,并创建一个新的xls,实现修改。
  (以下属性或方法并非全部,需要更多属性请参看文档;建议先参考文末Demo,再深入了解)



xlrd


Book(class) 由xlrd.open_work("example.xls")返回
  nsheets:                      sheets数
sheet_names:                  sheet名称列表
sheets:                       sheet列表
sheet_by_index(sheetx):       按序号提取sheet
sheet_by_name(sheet_name):    按名称提取sheet

Sheet(class) 由Book object相关方法返回
  name:                         sheet名
nrows:                                          行数
ncols:                                          列数
cell(rowx,colx):                                第rows行colx列的单元格
cell_type(rowx,colx):                           数据类型
cell_value(rows,colx):                          数值
col(colx):                                      第colx列所有单元格组成的列表
col_slice(colx,start_rowx=0,end_rowx=None):     第colx列指定单元格组成的列表
col_types(colx,start_rowx=0,end_rowx=None):     第colx列指定单元格数值类型组成的列表
col_values(colx,start_rowx=0,end_rowx=None):    第colx列指定单元格数值组成的列表
row同样有col的各项操作,此处略去

Cell(class) 由Sheet object(s)相关方法返回
  ctype:    一个int型变量,对应不同的数值类型
value:    单元格的值



xlwt


Workbook(class) 由xlwt.Workbook()返回
  encoding:                 编码方案
add_sheet(sheet_name):    添加sheet
get_sheet(Sheet_name):    选择sheet
save(file_name):          保存

Worksheet(class) 由Workbook object相关方法返回
  write(rows,colx,cell_value,style):         编辑单元格
row(rowx).write(colx,cell_value,style):    编辑行
flush_row_data():                          减少内存压力,flush之前行不可再修改
col(colx),write(rows,cell_value,style):    编辑列

easyxf(function) 创建XFStyle instance,格式控制
  expression syntax: (:( ,)+;)+
-  - :
(加粗为默认格式,以下所列并非全部)
font      - bold          - True or False
          - colour        - {colour}
          - italic        - True or False
          - name          - name of the font, Arial
          - underline     - True or False
  alignment - direction     - general, lr, rl
          - horizontal    - general, left, center, right, filled
          - vertical      - bottom, top, center, justified, distributed
          - shrink_to_fit - True or False
  bolders   - left          - an integer width between 0 and 13
          - right         - an integer width between 0 and 13
                    - top           - an integer width between 0 and 13
                    - bottom        - an integer width between 0 and 13
                    - diag          - an integer width between 0 and 13
          - left_colour   - {colour}*, automatic colour
                    - right_colour  - {colour}*, automatic colour
                    - ...
  pattern   - back_color    - {colour}*, automatic colour
          - fore_colour   - {colour}*, automatic colour
          - pattern       - none, solid, fine_dots, sparse_dots
  
  {colous}*: black, (dark_)(light_)blue, gold, (dark_)(light_)green, ivory, lavender,
             (light_)orange, pink, (dark_)red, rose, violet, white, (dark_)(light_)yellow, ...



xlutils

  copy:       将xlrd.Book转为xlwt.Workbook
styles:     读取xlrd.Workbook的每一个单元格的style
display:    简单而安全地呈现xlrd读取的数据
filter:     拆分与整合多个xls文件
margins:    查看表格稀疏程度
save:       序列化xlrd.Book,转存为binary xls或stream



Tips

  1. xlrd.open_workbook(fomatting_info=):当formatting_info=Ture,读取workbook并保留格式
  2. xlrd.open_workbook(on_demand=): 当on_demand=True,只有被要求时才将worksheet载入内存,读取大文件时使用
  3. xlwt.Worksheet.flush_row_data(): 减少内存占用,被刷新的行不能再访问或修改,建议每1000行刷新一次(若列很多当调整)
  4. xlwt.Workbook(encoding=): 选择创建的workbook的编码
  

Demo


import xlrd
import xlwt
from xlutils.copy import copy
# xlrd
book = xlrd.open_workbook("example.xls", formatting_info=True, on_demand=True)
sheet = book.sheet_by_index(0)
cell = sheet.cell(0,0)
# xlwt
workbook = xlwt.Workbook()
workbook.encoding = "utf-8" # Equals to workbook = xlwt.Workbook(encoding="utf-8")
sheet = workbook.add_sheet("Sheet1", cell_overwrite_ok=True)
style = xlwt.easyxf(
"font: name Arial;"
"pattern: pattern solid, fore_colour red;"
)
sheet.write(0, 0, "content of this cell", style)
sheet.row(0).set_style(style)
workbook.save("example.xls")
#xlutils
workbook = copy(book)

  

Reference

  1. The xlrd Module
  2. The xlwt Module
  3. Working with Excel files in Python
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59655-1-1.html 上篇帖子: Python之多线程学习 下篇帖子: 喝着啤酒学Python(2):第一个HelloWorld
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表