Python xlrd xlwt xlutils玩转Excel的读写改实例demo

2019-02-2222:16:25后端程序开发Comments2,989 views字数 2453阅读模式

利用xlrd读取excel文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

先需要在命令行中pip install xlrd;读取xls文件的流程为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

加载文件->选中第几个表格->按先行后列的顺序读文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

通用demo文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

import xlrd
filename = "test.xls"        #文件路径
wb = xlrd.open_workbook(filename)  #加载这个xls文件
sh = wb.sheet_by_index(0)      #选中第1个表格
rows = sh.nrows           #rows为该表格的行数
for i in range(1,rows):       #从第二行开始按行读取
  title = sh.cell(i,0).value   #取第i+1行,第1列的数据

diy功能文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

根据列名获取内容的函数
def get_col_index(name,workbook,sheet):
  for i in range(sheet.ncols):
    name2 = sheet.cell(0,i).value
    print(name2)
    if name2 == name:
      return i
  return -1
sheet.cell(1,get_col_index("创建时间")).value

再拓展一点:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

sh = wb.sheet_by_name(sheetname)  #通过表格名称选中表格
print(wb.sheet_names())       #打印该xls文件的所有表格名称
sh.row(i)              #获得第i+1行的所有数据组成的list
ncols = sh.ncols          #获得该表格的所有列数
sh.row_values(rowx, start_colx=0, end_colx=None)   #获取第rowx+1行的某几列的数据并组成的list
sh.col(colx, start_rowx=0, end_rowx=None) #获取第colx+1列的某几行的数据并组成的list
sh.cell(i,j).value         #获取第i+1行第j+1列的数据
sh.cell(i,j).ctype         #获取第i+1行第j+1列的数据类型

注意date类型文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

说起数据类型,补充一点,xlrd读取xls文件单元格的数据类型有五种,数字与类型的对应关系为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

当单元格某个值为date类型时,不加处理输出的是一个浮点数,此时需要判断ctype并进行一次转换:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

from xlrd import xldate_as_tuple
cell = sh.cell(i,10).ctype
if cell.ctype == 3:
  date = datetime(*xldate_as_tuple(cell.value, 0))

利用xlwt写exce文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

先需要在命令行中pip install xlwt;写xls文件的流程为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

加载文件->选中第几个表格->按先行后列的顺序读文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

通用demo文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

import xlwt
file = xlwt.Workbook()   #新建个文件
sheet = file.add_sheet('test_sheet0',cell_overwrite_ok=True) #新建个表格,指定表名以及是否可覆盖写
sheet.write(i,j,value)   #在第i+1行和第j+1列写value(i、j从0开始)
file.save("test_xls.xls")  #保存成xls文件并指定文件名

更多功能文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

#设置某列的宽度
sheet.col(0).width = 200
#写日期
style = xlwt.XFStyle()
style.num_format_str = 'D-MMM-YY' 
worksheet.write(0, 0, datetime.datetime.now(), style)
#写公式
sheet.write(1, 1, xlwt.Formula('SUM(A1,B1)'))
#合并单元格的写
sheet.write_merge(0, 0, 0, 3, 'First Merge')
#ps:
#write_merge(x, x + h, y, w + y, value, sytle) x和y表示当前行列,h和w为要合并的行数和列数

更炫酷一点文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

既然是写,何不来点style:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

style = xlwt.XFStyle()
#修改字体:
font = xlwt.Font()       #为样式创建字体
font.name = 'Times New Roman'  #字体名称
font.bold = True        #黑体
font.colour_index = 2      #修改字的颜色
font.underline = True      #下划线
style.font = font        #使用到样式中
sheet.write(0,1,"编号",style)
#修改单元格背景色
pattern = xlwt.Pattern() 
pattern.pattern = xlwt.Pattern.SOLID_PATTERN 
pattern.pattern_fore_colour = 5 #色号,可以在源代码中看到色号和颜色的对应关系
style = xlwt.XFStyle()
style.pattern = pattern
sheet.write(0,2,"编号",style)

利用xlutils修改excel文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

修改excel文件的流程为:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

将xlrd加载的xls文件(xlrd对象)复制为xlwt对象,然后用xlwt对象操作excel文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

demo文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html

import xlrd 
import pymysql
from xlrd import open_workbook
from xlutils.copy import copy
import xlwt
file_name = "test_update.xls"
workbook = xlrd.open_workbook(file_name) 
sheet = wb.sheet_by_index(0)
workbook_update = copy(workbook) 
sheet_update = workbook_update.get_sheet(0)
sheet_update.write(i,j,value)
workbook_update.save(file_name)
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/9665.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/9665.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定