注册 登录

清河洛

python操作excel表格的xlrd、xlwt模块

qingheluo2020-03-03清河洛267
python中的xlrd、xlwt模块可以操作excel文件。其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入。xlrd模块下载地址:http://pypi.python.org/pypi/xlrdxlwt模块下载地址:https://pypi.python.org/pypi/xlwt推荐直接使用pip安装:pip install xlrd xlwt这两个模块中对于数据类型的预定义常量 预定义常量 数值 字符串 XL_CELL_EMPTY 0 empty XL_CELL_TEXT 1 text XL_CELL_NUMBER 2 numb...

python中的xlrd、xlwt模块可以操作excel文件。其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入。

xlrd模块下载地址:http://pypi.python.org/pypi/xlrd

xlwt模块下载地址:https://pypi.python.org/pypi/xlwt

推荐直接使用pip安装:pip install xlrd xlwt

这两个模块中对于数据类型的预定义常量

预定义常量 数值 字符串
XL_CELL_EMPTY 0 empty
XL_CELL_TEXT 1 text
XL_CELL_NUMBER 2 number
XL_CELL_DATE 3 xldate
XL_CELL_BOOLEAN 4 boolean
XL_CELL_ERROR 5 error
XL_CELL_BLANK 6 blank

在本篇文章中我们把数字称作type_num,把对应的数据类型字符串称作type_str

其中date数据类型读取时为浮点数,需要手动转换为时间格式,如一个单元格日期为2020-2-5,xlrd模块读取到值为:43866.0,把浮点数转换为正确的时间格式有两个方法

    1、xlrd.xldate_as_tuple(xdate,datemode)
    返回一个(year,month,day,hours,minutes,seconds)组成的元祖
    datemode参数有2个值,0表示以1900年为基础时间戳(常见),1表示以1904年为基础时间戳
    2、xlrd.xldate_as_datetime(xdate,datemode)(需要先引入datetime模块)
    直接返回一个datetime对象
    xlrd.xldate_as_datetime(xdate,datemode).strftime(‘%Y-%m-%d %H:%M:%S‘)

一、读取excel表

1、导入模块(import xlrd)

2、打开Excel文件读取数据

    data = xlrd.open_workbook(r‘excel.xls‘,formatting_info=False)

3、工作表的操作方法

    sheets():获取并返回所有工作表的列表(将加载所有尚未加载的工作表),可以通过索引获取指定的工作表(sheets()[0])
    sheet_by_index(index):通过索引获取指定的工作表,等同于sheets()[index]
    sheet_names():获取并返回所有工作表的名称列表(包含未加载工作表的名称但不会加载未加载的工作表)
    sheet_by_name(sheet_name):通过工作表名称获取指定的工作表
    sheet_loaded(sheet_name|sheet_index):指定名称或索引的工作表是否已经加载
    unload_sheet(sheet_name|sheet_index):要卸载的工作表的名称或索引

4、内容的读取方法

    5.0:工作表信息
        ncols:返回工作表中的有效列数
        nrows:返回工作表中的有效行数
    5.1:单元格操作
        cell(rowx,colx):获取一个指定坐标的单元格(rowx和colx从0开始)。返回一个xlrd.sheet.Cell对象,该对象拥有ctype(返回type_num),value属性和dump()方法
            dump(f=None, header=None, footer=None, indent=0)把该单元格信息转储到文件中
                f:使用open()函数打开的文件对象
                header:转储前要写入的文本
                footer:转储后要写入的文本
                indent:前导空格数(用于递归调用)
        cell_type(rowx,colx)
        cell_value(rowx,colx)
        当存在合并单元格时使用cell(rowx,colx)仅当坐标为这个合并单元格的左上角时才能读取到该合并单元格的值,那么怎么获取合并单元格左上角的坐标呢
        读取文件时将formatting_info参数设置为True(仅xls文件可以,xlsx文件报错),然后通过merged_cells属性获取当前工作表中所有的合并单元格
        返回(start_rowx,end_rowx,start_colx,end_colx)四个元素的元祖组成的列表(rowx和colx从1开始,这和cell()方法不同),其中包含start_*,不包含end_*
        如(1, 5, 2, 3)表示第2列(2到2列,不包含3)的第1到4行(不包含5)为一个合并单元格,该合并单元格的值应该读取(1,2)
        如(3, 7, 4, 6)表示第4到5列的第3到6行为一个合并单元格,该合并单元格的值应该读取(3,4)
        我们发现一个规律,即合并单元格的左上角坐标为(start_rowx,start_colx),也就是元祖的第一个和第三个元素。
    5.2:行操作
        row(rowx):返回指定行中所有单元格的数据类型和所有内容组成的列表(每个元素的格式为type_str:value)
        row_len(rowx):返回该行的有效单元格数量
        row_slice(rowx,start_colx=0, end_colx=None):返回指定行中指定的若干列的数据,返回格式和row(rowx)相同
        row_types(rowx,start_colx=0,end_colx=None):返回指定行中指定的若干列的type_num
        row_values(rowx,start_colx=0,end_colx=None):返回指定行中指定的若干列的内容组成的列表
    5.3:列操作,所有方法对应参考行操作
        col(colx,start_rowx=0,end_rowx=None)
        col_slice(colx,start_rowx=0,end_rowx=None)
        col_types(colx,start_rowx=0,end_rowx=None)
        col_values(colx,start_rowx=0,end_rowx=None)

二、写入excel表

1、导入模块(import xlwt)

2、创建一个工作簿(excel)对象

    workbook=xlwt.Workbook(encoding=‘ascii‘)

3、创建工作表

    worksheet = workbook.add_sheet(sheetname,cell_overwrite_ok=False)
    cell_overwrite_ok参数如果"True",将不会引发同一个单元格多次写入时出现的异常

5、创建样式

    mystyle = xlwt.XFStyle() # 初始化样式
    myfont = xlwt.Font() # 创建字体对象
    字体对象的属性有bold、charset、colour_index、escapement、family、get_biff_record、height、italic、name、outline、shadow、struck_out、underline
    myfont.name = ‘Microsoft YaHei Mono‘
    myfont.color_index = 4

    borders= xlwt.Borders() # 创建边框对象
    边框对象的属性有bottom、bottom_colour、diag、diag_colour、left、left_colour、need_diag1、need_diag2、right、right_colour、top、top_colour
    borders.left= 6
    borders.left_colour= 5

    mystyle.font = font
    mystyle.borders = borders

4、写入内容

    write(rowx, colx, content=‘‘, style):在指定的一个单元格写入(rowx和colx从0开始)
    write_merge(start_rowx, end_rowx, start_colx, end_colx,content=‘‘, sytle):跨行或者跨列的合并单元格内容的写入(rowx和colx从0开始)

5、保存文件

    使用工作簿对象的save()方法(目前该模块只能保存xls格式,不能xlsx格式):
    workbook.save(‘file_name‘)


网址导航