Zhong__xlrd基本使用
2024-05-29 19:40:24
时间:2020.12.02
环境:Python3
目的:使用xlrd读取Excel文件的一般操作
说明:
作者:Zhong QQ交流群:121160124 欢迎加入!
安装xlrd
pip install -i https://pypi.douban.com/simple xlrd
准备演示使用的excel文件 demo.xlsx 写入以下的测试数据
ID | 姓名 | 年龄 | 登记日期 |
---|---|---|---|
1 | 小A | 1 | 2020.12.02 |
2 | 小B | 2 | 2020.12.03 |
3 | 小C | 3 | 2020.12.04 |
4 | 小D | 4 | 2020.12.05 |
5 | 小E | 5 | 2020.12.06 |
6 | 小F | 6 | 2020.12.07 |
7 | 小G | 7 | 2020.12.08 |
8 | 小H | 8 | 2020.12.09 |
9 | 小I | 9 | 2020.12.10 |
10 | 小J | 10 | 2020.12.11 |
11 | 小K | 11 | 2020.12.12 |
12 | 小L | 12 | 2020.12.13 |
13 | 小M | 13 | 2020.12.14 |
14 | 小N | 14 | 2020.12.15 |
15 | 小O | 15 | 2020.12.16 |
16 | 小P | 16 | 2020.12.17 |
17 | 小Q | 17 | 12/18/2020 |
18 | 小R | 18 | 12/19/2020 |
19 | 小S | 19 | 2020年12月20 |
20 | 小T | 20 | 2020年12月21日 |
如图
以上写入了默认的Sheet表Sheet1表21行4列的数据 第一行为标题行 登记日期写入的数据有不同的单元格类型 以下是常用的一些基本操作
import xlrd
from xlrd import xldate_as_datetime
from pprint import pprintdef readExcel(path) -> dict:# 打开Excel表格 文件名和表名都需要正确ExcelFile = xlrd.open_workbook(path)# 获取SheetSheet1 = ExcelFile.sheet_by_name('Sheet1') # 通过名称获取Sheet# Sheet1 = ExcelFile.sheet_by_index(0) # 通过索引获取Sheet# Sheet属性 获取Shee1的名称、总行数、总列数等信息sheet_name = Sheet1.name # 名称sheet_nrows = Sheet1.nrows # 行数sheet_ncols = Sheet1.ncols # 列数print(" Sheet名称: %s\n" % sheet_name, "Sheet总行数: %s\n" % sheet_nrows, "Sheet总列数: %s\n" % sheet_ncols)print("\n" + "* " * 100)# Sheet单元格属性cell 对一个具体的单元格操作 如获取第2行第2列单元格数据值cell_value1 = Sheet1.cell(1, 1).value # cell的值cell_value2 = Sheet1.cell_value(1, 1) # cell值 等效于cell().valuecell_type = Sheet1.cell_type(1, 1)print("一个单元格内容: \n%s" % cell_value1)print("一个单元格内容: \n%s" % cell_value2)print("一个单元格内容类型: \n%s" % cell_type)print("\n" + "* " * 100)# Sheet获取一行的数据和一列的数据及相关属性row_value = Sheet1.row(1) # 获取第2行的数据 值的类型有标注 [number:1.0, text:'小A', number:1.0, text:'2020.12.02']row_slice_value = Sheet1.row_slice(rowx=1, start_colx=0, end_colx=None) # row()方法的扩展 可指定范围row_values = Sheet1.row_values(rowx=1, start_colx=0, end_colx=None) # 一行数据 rowx:第几行 start_colx:从第几列开始 end_colx:到第几列结束(None 表示到最后一列) 类似于字符串split方法的概念row_len = Sheet1.row_len(1) # 获取第二行长度(至有数据的最后一列的长度)row_types = Sheet1.row_types(rowx=1, start_colx=0, end_colx=None) # 获取一行数据的类型table_header = Sheet1.row_values(rowx=0, start_colx=0, end_colx=None) # 获取标题单元格(第一行)print("一行的值(带类型): \n%s" % row_value)print("一行指定开始和结束范围的值(带类型): \n%s" % row_slice_value)print("一行指定开始和结束范围的值: \n%s" % row_values)print("一行数据的长度: \n%s" % row_len)print("一行数据的类型: \n%s" % row_types)print("第一行的内容为: \n%s" % table_header)print("\n" + "* " * 100)# 获取Sheet所有内容 格式为[[row_values], [row_values], ...... ]ls = [] # 定义一个列表用来存储所有的行数据for row in range(1, sheet_nrows): # 从第2行开始 第1行一般是表头 以实际情况为准# 获取一行的值 为列表类型values = Sheet1.row_values(rowx=row, start_colx=0, end_colx=None)# 获取登记日期列的单元格内容类型ctype = Sheet1.cell_type(rowx=row, colx=3)# 处理ctype类型值为2/3的日期类型为期望类型if ctype in [2, 3]:# 转换为年月日格式的类型 datemode参数为时间基准标识符 0代表1900-01-01为基准,1代表1904-01-01为基准 通常选择0_date = xldate_as_datetime(xldate=Sheet1.cell_value(rowx=row, colx=3), datemode=0).strftime("%Y-%m-%d")values[3] = _date# print(values)ls.append(values)pprint(ls)print("\n" + "* " * 100)return {"msg": "ok"}# 文件的路径,如果路径或者文件名有中文前面加一个r代表原生字符。
res = readExcel(r"C:\Users\Zhong\Desktop\demo.xlsx")print(res)
Note
- 索引是从(0, 0)开始
- 一般excel文件中获取数据的内容时内容部分是从第二行开始
- 单元格内容类型一般有0-6 7种类型 如下
Type symbol | Type number | Python value |
XL_CELL_EMPTY | 0 | empty string '' |
XL_CELL_TEXT | 1 | a Unicode string |
XL_CELL_NUMBER | 2 | float |
XL_CELL_DATE | 3 | float |
XL_CELL_BOOLEAN | 4 | int; 1 means TRUE, 0 means FALSE |
XL_CELL_ERROR | 5 | int representing internal Excel codes; for a text representation, refer to the supplied dictionary error_text_from_code |
XL_CELL_BLANK | 6 | empty string ''. Note: this type will appear only when open_workbook(..., formatting_info=True) is used |
加入qq群交流技术 关注微信公众号
Zhong__xlrd基本使用相关推荐
最新文章
- 两亿多用户,六大业务场景,知乎AI用户模型服务性能如何优化?
- 2018最后一个月的Python热文Top10!赶紧学起来~
- Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)
- atmega8a如何烧写程序_如何让树莓派4上固件的debug日志输出到串口?
- asp.net mvc 正常支持Fckeditor编辑器
- 将Wiremock集成到Spring Boot Java Web应用程序中以模拟外部依赖关系
- nodejsmongoangularjs
- Linux更换软件源(国内)阿里云
- 【HDOJ】4363 Draw and paint
- 【进阶3-5期】深度解析 new 原理及模拟实现
- 95-848-020-源码-AKKA-Akka与Actor 模型
- Serverless 开发者平台
- 计算机人力资源试题及答案,计算机二级word练习题一题目及答案.
- gimp中文版教程_GIMP视频教程集合(中文+英文)下载 | 卧云楼
- Axure统计图表设计(Excel设计统计图表、HighChart设计统计图表)
- 淘宝手淘首页金字塔流量爬升法|运营狗
- java商城有怎么样的优势,关于java商城系统的优势介绍
- Jenkins使用FTP上传文件报错问题处理
- Obi - Advanced Rope Simulation 绳索插件学习文档
- 计算机毕设Python+Vue医院人事及科室病区管理(程序+LW+部署)
热门文章
- 远行星号 java_不纠结刷种子了,duzahk.java里面直接加了点东西。
- 牛客算法課 (算法入門班) 貪心與模擬(4)
- \t\t12时辰养生
- 全球及中国多普勒导航仪行业投资分析及前景预测报告2022-2028年
- 【eoe源码索引】2014年3月份源码索引贴
- WPF 窗口最大化正确方法
- Cell Reports : 人脑中的湍流状动力学
- cmd批量修改文件名 增加文字_文件名如何进行批量更改?
- rabbitmq java 重连_RabbitMQ Java客户端自动重新连接
- 计算机一级无法打开office,电脑中无法运行Office2016的两种解决方法