【python学习总结5】xlrd、xlwt

本文详细介绍了使用Python的xlrd库读取和xlwt库写入Excel文件的操作,包括数据读取、工作簿和sheet的管理、合并单元格、日期处理以及xlwt库的样式设置、公式计算和数据格式化。同时,针对常见问题提供了解决方案,如版本兼容性和文件路径问题。
摘要由CSDN通过智能技术生成
  • xlrd

# -*- coding:UTF-8 -*-
import xlwt

#打开excel文件读取数据
path="C:\\Users\\X20232\\Desktop\\练习\\联系人.xlsx"
data=xlrd.open_workbook(path)

#获取所有sheet名称
sheet_name=data.sheet_names()
print(sheet_name)
#根据下标获取sheet名称
sheet2_name=data.sheet_names()[1]
print(sheet2_name)

#根据sheet索引或者名称获取sheet内容
sheet2=data.sheet_by_index(1)
sheet1=data.sheet_by_name('银行2')

#获取sheet名称、行数、列数
print('sheet2名称:{}\nsheet2列数:{}\nsheet2行数:{}'.format(sheet2.name,sheet2.ncols,sheet2.nrows))

#根据sheet名称获取整行和整列的值
print(sheet1.row_values(3))
print(sheet1.col_values(3))

#获取指定单元格的内容
print(sheet1.cell(1,0).value)#获取第2行第1列的内容
print(sheet1.cell_value(1,0))#获取第2行第1列的内容
print(sheet1.row(1)[0].value)#获取第2行第1列的内容

# 获取单元格内容的数据类型
# 说明:ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
print(sheet1.cell(3,6).ctype)#获取第2行第1列的数据类型

#使用xlrd的xldate_as_tuple处理数据类型为date格式的数据
if sheet1.cell(3,6).ctype==3:
    print(sheet1.cell(3,6).value) #41463.0
    date_value=xlrd.xldate_as_tuple(sheet1.cell(3,6).value,data.datemode)
    print(date_value) #(2013, 7, 8, 0, 0, 0)
    print(date(*date_value[:3])) #2013-07-08
    print(date(*date_value[:3]).strftime('%Y/%m/%d')) #2013/07/08
# -*- coding:UTF-8 -*-
import xlrd
from datetime import datetime,date

#获取合并单元格的内容,需要merged_cells属性,需要在读取文件的时候添加个参数,将formatting_info参数设置为True,默认是False,否则可能调用merged_cells属性获取到的是空值
path1="C:\\Users\\X20232\\Desktop\\练习\\联系人-副本.xls"
data1=xlrd.open_workbook(path1,formatting_info=True)
sheet3=data1.sheet_by_name('银行2')
print(sheet3.merged_cells) ## [(0, 1, 0, 8), (2, 6, 0, 1)]
# merged_cells返回的这四个参数的含义是:(row,row_range,col,col_range),其中[row,row_range)包括row,不包括row_range,col也是一样,下标从0开始。
#(0, 1, 0, 8) 表示第一行的1列-8列合并, (2, 6, 0, 1)表示3行-6行的第一列合并
# 分别获取2个合并单元格的内容。规律:获取merge_cells返回的row和col低位的索引即可!
print(sheet1.cell(0,0).value)  # 银行2
print(sheet1.cell_value(2, 0))  # 银行2
  • xlwt

# -*- coding:UTF-8 -*-
import xlrd
import xlwt
from datetime import datetime,date
import datetime

#创建一个workbook,设置编码
workbook=xlwt.Workbook(encoding='utf-8')
#创建一个sheet
worksheet=workbook.add_sheet('My Workbook')
#初始化样式
style=xlwt.XFStyle()
#为样式创建字体
font=xlwt.Font()
font.name='Times New Roman'
#黑体
font.bold=True
#下划线
font.underline=True
#斜体字
font.italic=True
#设定样式
style.font=font
#写入excel,参数:行,列,值
#不带样式的写入
worksheet.write(0,0,'this is test')
#带样式的写入
worksheet.write(1,0,'Formatted value',style)
#设置单元格宽度
worksheet.col(0).width=4333
#输入一个日期到单元格,格式M/D/YY,或D-MM-YY h:mm:ss
style.num_format_str='M/D/YY'
worksheet.write(0,1,datetime.datetime.now(),style)
#向单元格添加一个公式
worksheet.write(2,0,5)
worksheet.write(2,1,2)
worksheet.write(2,2,xlwt.Formula('A3*B3'))  #C3的内容是10
worksheet.write(2,3,xlwt.Formula('SUM(A3,B3)'))  #D3的内容是7
#向单元格添加一个超链接
worksheet.write(3,0,xlwt.Formula('HYPERLINK("http://www.google.com";"Google")')) #A4单元格内容是Google,点击打开超链接
#合并列和行
#write_merge这四个参数的含义是:(row,row_range,col,col_range],其中[row,row_range]包括row_range,col也是一样,下标从0开始。
worksheet.write_merge(4,4,0,1,'First Merge') #合并第5行的第1列和第2列,即合并A5B5
worksheet.write_merge(4,4,2,3,'Second Merge',style) #合并第5行的第3列和第4列,即合并C5D5
#设置单元格内容的对齐方式
#为样式创建对齐方式
alignment=xlwt.Alignment()
#水平方向对齐方式可以是: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED
#垂直方法对齐方式可以是:VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
alignment.horz=xlwt.Alignment.HORZ_CENTER
alignment.vert=xlwt.Alignment.VERT_CENTER
style.alignment=alignment
worksheet.write(5,0,'对齐方式测试',style)
#为单元格添加边框
#为样式创建边框
borders=xlwt.Borders()
#DASHED虚线,NO_LINE没有,THIN实线
#边框可以是: NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE, HAIR, MEDIUM_DASHED, THIN_DASH_DOTTED, MEDIUM_DASH_DOTTED, THIN_DASH_DOT_DOTTED, MEDIUM_DASH_DOT_DOTTED, SLANTED_MEDIUM_DASH_DOTTED, or 0x00 through 0x0D.
borders.left=xlwt.Borders.DASHED
borders.right=xlwt.Borders.MEDIUM
borders.top=xlwt.Borders.NO_LINE
borders.bottom=xlwt.Borders.THIN
borders.left_colour=0x40
borders.right_colour=0x40
borders.top_colour=0x40
borders.bottom_colour=0x40
style.borders=borders
worksheet.write(5,1,'边框测试',style)
#为单元格设置背景色
pattern=xlwt.Pattern()
#可以是: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12
pattern.pattern=xlwt.Pattern.SOLID_PATTERN
#颜色可以是8-63: 0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta, 7 = Cyan, 16 = Maroon, 17 = Dark Green, 18 = Dark Blue, 19 = Dark Yellow , almost brown), 20 = Dark Magenta, 21 = Teal, 22 = Light Gray, 23 = Dark Gray...
pattern.pattern_fore_colour=5
style.pattern=pattern
worksheet.write(5,3,'背景色测试',style)
#保存
workbook.save("C:\\Users\\X20232\\Desktop\\练习\\test.xls")

 

  • 常见问题

问题1.python报错raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not supported‘)
原因:xlrd为2.0.1版本,更新版本后,xlrd不支持xlsx格式数据的读取了
先卸载2.0.1版本,再指定安装1.2.0版本

pip uninstall xlrd
pip install xlrd==1.2.0

问题2.xlrd.open_workbook(文件路径)时报错:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

原因:文件路径的问题

路径格式改为"C:\\Users\\X20232\\Desktop\\练习\\联系人.xlsx"

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值