Zhong__xlrd基本使用

时间:2020.12.02

环境:Python3

目的:使用xlrd读取Excel文件的一般操作

说明:

作者:Zhong QQ交流群:121160124 欢迎加入!

 

安装xlrd

pip install -i https://pypi.douban.com/simple xlrd

准备演示使用的excel文件 demo.xlsx 写入以下的测试数据

ID姓名年龄登记日期
1小A12020.12.02
2小B22020.12.03
3小C32020.12.04
4小D42020.12.05
5小E52020.12.06
6小F62020.12.07
7小G72020.12.08
8小H82020.12.09
9小I92020.12.10
10小J102020.12.11
11小K112020.12.12
12小L122020.12.13
13小M132020.12.14
14小N142020.12.15
15小O152020.12.16
16小P162020.12.17
17小Q1712/18/2020
18小R1812/19/2020
19小S192020年12月20
20小T202020年12月21日

如图

以上写入了默认的Sheet表Sheet1表21行4列的数据 第一行为标题行 登记日期写入的数据有不同的单元格类型  以下是常用的一些基本操作

import xlrd
from xlrd import xldate_as_datetime
from pprint import pprint

def readExcel(path) -> dict:
    # 打开Excel表格  文件名和表名都需要正确
    ExcelFile = xlrd.open_workbook(path)

    # 获取Sheet
    Sheet1 = 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().value
    cell_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

  1. 索引是从(0, 0)开始
  2. 一般excel文件中获取数据的内容时内容部分是从第二行开始
  3. 单元格内容类型一般有0-6 7种类型  如下
Type symbolType numberPython value
XL_CELL_EMPTY0empty string ''
XL_CELL_TEXT        1a Unicode string
XL_CELL_NUMBER        2float
XL_CELL_DATE        3float
XL_CELL_BOOLEAN        4int; 1 means TRUE, 0 means FALSE
XL_CELL_ERROR        5int representing internal Excel codes; for a text representation, refer to the supplied dictionary error_text_from_code
XL_CELL_BLANK        6empty string ''. Note: this type will appear only when open_workbook(..., formatting_info=True) is used

 

 

加入qq群交流技术  关注微信公众号

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我变了_我没变

随意 。。。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值