Python Excel应用:xlrd与xlwt的应用

本文详细介绍使用Python的xlrd和xlwt库进行Excel文件的读取和写入操作。包括安装库、读取Excel数据、修改单元格内容、写入新数据、设置单元格样式、合并单元格等操作。

最近学习python,学习xlrd(excel读取)和xlwt(excel写入)的应用,参考了网上大神的博客,有问题请多多指正。

1. 安装文件 :  pip install xlrd ;

                         pip intall xlwt

2. 准备一个 excel.xlsx 文件,放在执行py文件统计目录下,新建sheet页student,录入数据如下面excel所示

学号姓名性别年龄语文数学英语体育
A001阿大8901006778
A002阿二983605785
A003阿三787807635
A004阿四8767643132
A005阿五9100987924

3. xlrd 常规应用

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import xlrd
import os,sys

def change_to_py_dir():
    folder_path = os.path.abspath(os.path.dirname(sys.argv[0]))
    os.chdir(folder_path)
    return None

if __name__ == '__main__':
   try:
     change_to_py_dir()
     excel_name = 'excel.xlsx' 
     ##打开一个excel文件
     ##学习参考网址:https://www.cnblogs.com/insane-Mr-Li/p/9092619.html 跟随大神的脚步
     book = xlrd.open_workbook(excel_name)
     
     ##查看所有的sheet页面
     print(book.sheet_names())
     
     ##打开student这个sheet页面
     sheet1 = book.sheet_by_name('student') 
     sheet1 = book.sheet_by_index(0) 
     sheet1 = book.sheets()[0] 
     
     ##判断sheet页是否加载
     print(book.sheet_loaded('student'))
     
     ##sheet页行操作    
     print('表格总行数:%d'%sheet1.nrows)
     print('表格第一行(类型+数据)',sheet1.row(0))
     print('表格第一行(类型+数据)',sheet1.row_slice(0))
     print('表格第一行(数据)',sheet1.row_values(0,start_colx=0,end_colx=None))
     print('表格第一行(类型)',sheet1.row_types(0,start_colx=0,end_colx=1))
     print('表格第一行有%d个有效数据'%sheet1.row_len(0))
     
     ##sheet页列操作         
     ##数据类型 0 empty,1 string,2 number, 3 date,4 boolean, 5 error
     print('表格总行数:%d'%sheet1.ncols)
     print('表格第一列(类型+数据)',sheet1.col(0))
     print('表格第一列(类型+数据)',sheet1.col(0).encode('utf-8'))
     print('表格第一列(类型+数据)',sheet1.col_slice(0))
     print('表格第一列(数据)',sheet1.col_values(0,start_rowx=0,end_rowx=None))
     print('表格第一列(类型)',sheet1.col_types(0,start_rowx=0,end_rowx=1))
     
     ##sheet页单元格操作
     print('表格第一行第一列(类型+数据)',sheet1.cell(0,0))
     print('表格第一行第一列(类型)',sheet1.cell_type(0,0))
     print('表格第一行第一列(数据)',sheet1.cell_value(0,0))
     ##print('表格第一行第一列(数据)',sheet1.cell_xf_index(0,0))  #可能和字体有关
       
     ##元素值在excel中没有改变,但是输出的时候变了
     sheet1.put_cell(rowx=4, colx=1, ctype=2, value=99, xf_index=None) 
          
   except FileNotFoundError:
     print('EXCEL文件%s不存在,请检查python目录下是否存在该文件'%excel_name)

4. xlwt 常规应用

#!/usr/bin/env python 
# -*- coding:utf-8 -*-

import xlwt
import datetime
import os

if __name__ == '__main__':
    # 创建一个workbook 设置编码
    ## 学习参考网址;
    ## https://www.cnblogs.com/python-robot/p/9958352.html
    book = xlwt.Workbook(encoding = 'utf-8')
    sheet = book.add_sheet('test1')
    sheet1 = book.add_sheet('test2')

    ##写入单元格
    sheet.write(0,0,label = 'this is test')
    sheet1.write(0,0,label = 'this is test1')
    book.save('Excel1.xls')
    book.save('Excel2.xls')

    ##设置字体
    style = xlwt.XFStyle()  # 初始化样式
    font = xlwt.Font()  # 为样式创建字体
    font.name = 'Times New Roman'
    font.bold = True  # 黑体
    font.underline = True  # 下划线
    font.italic = True  # 斜体字
    style.font = font  # 设定样式
    # worksheet.write(0, 0, 'Unformatted value') # 不带样式的写入
    sheet.write(1, 0, 'Formatted value', style) # 带样式的写入
    book.save('Excel1.xls') # 保存文件

    ##设置高度和宽度
    sheet.write(2, 0, 'with and height')
    sheet.col(0).width = 10000
    tall_style = xlwt.easyxf('font:height 720')  # 36pt
    ##貌似直接设置高度没有效果
    ##参考网址 https://blog.youkuaiyun.com/weixin_42122355/article/details/83536142
    #sheet.row(2).height = 6000
    sheet.row(2).set_style(tall_style)
    book.save('Excel1.xls') # 保存文件

    ##输入一个日期到单元格
    style = xlwt.XFStyle()
    #Other options: D-MMM-YY, D-MMM, MMM-YY, h:mm, h:mm:ss, h:mm, h:mm:ss, M/D/YY h:mm, mm:ss, c
    style.num_format_str = 'M/D/YY'
    sheet.write(3, 0, datetime.datetime.now(),style)
    time_str = '2020/01/13 20:57:01'
    sheet.write(4, 0,  time_str)
    style.num_format_str = 'YYYY/MM/DD [h]:mm:ss'
    time = datetime.datetime.strptime(time_str,'%Y/%m/%d %H:%M:%S')
    sheet.write(5, 0,  time,style)
    book.save('Excel1.xls') # 保存文件

    ##向单元格添加公式
    sheet.write(6, 0, 2)
    sheet.write(6, 1, 3)
    formulate_sum1 = xlwt.Formula('A7 + B7')
    sheet.write(6, 2, formulate_sum1)
    formulate_sum2 = xlwt.Formula('SUM(A7,B7)')
    sheet.write(6, 3, formulate_sum2)
    formulate_multiply = xlwt.Formula('A7 * B7')
    sheet.write(6, 4, formulate_multiply)
    book.save('Excel1.xls') # 保存文件

    ##向单元格添加一个超链接
    Formula1 = xlwt.Formula('HYPERLINK("https://www.baidu.com/";"Baidu")')
    sheet.write(7, 0, Formula1)
    Formula2 = xlwt.Formula('HYPERLINK("#test2!A1";"跳转到test2 sheet")')
    sheet.write(7, 1, Formula2)
    excel2_file = os.path.join(os.getcwd(),'Excel2.xls')
    Formula3 = xlwt.Formula('HYPERLINK("[%s]%s!%s";"跳转到Excel2 test1 sheet")'%(excel2_file,'test1','A1'))
    sheet.write(7, 2, Formula3)
    book.save('Excel1.xls')

    ##合并行和列
    #print(help(sheet.write_merge))
    sheet.write_merge(8, 8, 0, 2, 'First col Merge')
    font = xlwt.Font()
    font.bold = True
    style = xlwt.XFStyle()
    sheet.write_merge(9, 10, 0, 2, 'First row Merge',style)
    book.save('Excel1.xls')

    ##设置单元格内容的对其方式:
    alignment = xlwt.Alignment()
    ## May be: HORZ_GENERAL, HORZ_LEFT, HORZ_CENTER, HORZ_RIGHT, HORZ_FILLED, HORZ_JUSTIFIED, HORZ_CENTER_ACROSS_SEL, HORZ_DISTRIBUTED
    alignment.horz = xlwt.Alignment.HORZ_CENTER
    ## May be: VERT_TOP, VERT_CENTER, VERT_BOTTOM, VERT_JUSTIFIED, VERT_DISTRIBUTED
    alignment.vert = xlwt.Alignment.VERT_CENTER
    style = xlwt.XFStyle()
    style.alignment = alignment
    sheet.write(11, 0, 'Cell Contents', style)
    book.save('Excel1.xls')

    ##s设置边框
    borders = xlwt.Borders()
    print(dir(borders))
    ## DASHED虚线    NO_LINE没有    THIN实线
    borders.left = xlwt.Borders.DASHED
    borders.right = xlwt.Borders.DASHED
    borders.top = xlwt.Borders.DASHED
    borders.bottom = xlwt.Borders.DASHED
    ## # May be: 8 through 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, the list goes on...
    borders.left_colour = 2
    borders.right_colour = 0x10
    borders.top_colour = 0x20
    borders.bottom_colour = 0x30
    style = xlwt.XFStyle()
    style.borders = borders
    sheet.write(12, 0, 'Cell Contents', style)
    book.save('Excel1.xls')

    ## 设置背景颜色
    pattern = xlwt.Pattern()
    # May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN
    pattern.pattern_fore_colour = 5
    style = xlwt.XFStyle()
    style.pattern = pattern
    sheet.write(13, 0, 'Cell Contents', style)
    book.save('Excel1.xls')

  运行结果如下所示:

this is test     
Formatted value     
with and height     
2020/1/13     
2020/01/13 20:57:01     
2020/01/13 36:57:01     
23556 
Baidu跳转到test2 sheet跳转到Excel2 test1 sheet 
First col Merge   
First row Merge   
   
Cell Contents     
Cell Contents     
Cell Contents     
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值