zoukankan      html  css  js  c++  java
  • python操作excel

    python 读写 excel 有好多选择,但是,方便操作的库不多,在我尝试了几个库之后,我觉得两个比较方便的库分别是 xlrd/xlwt、openpyxl。

    之所以推荐两个库是因为这两个库分别操作的是不同版本的 excel,xlrd 操作的是 xls/xlsx 格式的 excel,而 openpyxl 只支持 xlsx 格式的excel,openpyxl 使用起来会更方便一些,所以如果你只操作 xlsx 文件的话,那么可以优先选择 openpyxl,如果要兼容 xls 的话,那就用 xlrd/xlwt 吧。
    本处使用openpyxl来实现。

    一、安装openpyxl

    pip3 install openpyxl

    如果excel里面有图片(jpeg, png, bmp,…),需要安装图片处理模块

    pip3 install pillow

    二、写入xlsx

    #导入模块
    from openpyxl import Workbook  
     
    # 创建一个工作薄
    wb = Workbook()
     
    # 创建一个工作表(注意是一个属性)
    ws1 = wb.create_sheet("Mysheet")  #默认插在最后
    ws2 = wb.create_sheet("Mysheet",0)  #指定插入位置
    
     #修改工作表的名称
    ws1.title = "New sheet"
    
    # excel创建的工作表名默认为sheet1,一下代码实现了给新创建的工作表创建一个新的名字
    ws1.title = 'create_sheet'
     
    # 向工作表中输入内容
    ws1['C3'] = 'hello word'     #第一种写入方法
    ws1.cell(row = 4,column = 2,value = 10)    #第二种写入方法
    #第三种写入方法:循环写入
    for i in range(10):
        sheet['A%d' % (i+1)] = i+1
    
    #第四种写入方法:append
    row = [1 ,2, 3, 4, 5]
    ws1.append(row)
     
    # 向excel表中输入表达试
    sheet['C2'] = '=SUM(A:A)'
     
    # 保存一个文档
    wb.save('create_excel.xlsx')
     
     
    if __name__ == '__main__':
        pass

    三、读取xlsx

    #导入
    from openpyxl import load_workbook
    
    # 打开一个供作薄
    wb = load_workbook('create_excel.xlsx')
    
    #获取一张表
    sheet = wb["Myaheet"]
    
    print("A列:",sheet["A"])                     #读取A列
    print("1行:",sheet["1"])                     #读取第1行
    print("C4格的值:",sheet["C4"].value)         #读取C4格的值
    #最大/最小行列数获取的是表中的数据区域
    print("最大行数为:",sheet.max_row)           #最大行数
    print("最大列数为::",sheet.max_column)      #最大列数
    print("最小行数为:",sheet.min_row)           #最小行数
    print("最小列数为:",sheet.min_column)        #最大列数
    print("第一行第一列的单元格值为:",sheet.cell(row=1,column=1).value)          #获取第一行第一列单元格的值
    print("
    ")
    print("表中C列中所有值为:")
    for i in sheet["C"]:
        print(i.value, end=" ")              # 读取C列中的所有值
    
    sheet['B9'] = '=AVERAGE(B2:B8)'
     

    ********但是如果是读取的时候需要加上data_only=True这样读到B9返回的就是数字,如果不加这个参数,返回的将是公式本身'=AVERAGE(B2:B8)'

    四、获取行和列

    sheet.rows为生成器, 里面是每一行的数据,每一行又由一个tuple包裹。
    sheet.columns类似,不过里面是每个tuple是每一列的单元格。

    # 因为按行,所以返回A1, B1, C1这样的顺序
    for row in sheet.rows:
        for cell in row:
            print(cell.value)
    
    # A1, A2, A3这样的顺序
    for column in sheet.columns:
        for cell in column:
            print(cell.value)

    上面的代码就可以获得所有单元格的数据。如果要获得某行的数据呢?给其一个索引就行了,因为sheet.rows是生成器类型,不能使用索引,转换成list之后再使用索引,list(sheet.rows)[2]这样就获取到第三行的tuple对象。

    for cell in list(sheet.rows)[2]:
        print(cell.value)

    还可以像使用切片那样使用。sheet['A1':'B3']返回一个tuple,该元组内部还是元组,由每行的单元格构成一个元组

    for row_cell in sheet_ranges['A1':'B3']:
        for cell in row_cell:
            print(cell)

    五、设置单元格风格--Style

    from openpyxl.styles import Font, colors, Alignment

    #分别可指定字体相关,颜色,和对齐方式。

    字体

    bold_itatic_24_font = Font(name='等线', size=24, italic=True, color=colors.RED, bold=True)
    
    sheet['A1'].font = bold_itatic_24_font

    对齐方式

    也是直接使用cell的属性aligment,这里指定垂直居中和水平居中。除了center,还可以使用right、left等等参数。

    # 设置B1中的数据垂直居中和水平居中
    sheet['B1'].alignment = Alignment(horizontal='center', vertical='center'

    设置行高和列宽
    有时候数据太长显示不完,就需要拉长拉高单元格。

    # 第2行行高
    sheet.row_dimensions[2].height = 40
    # C列列宽
    sheet.column_dimensions['C'].width = 30

    合并和拆分单元格

    所谓合并单元格,即以合并区域的左上角的那个单元格为基准,覆盖其他单元格使之称为一个大的单元格。
    相反,拆分单元格后将这个大单元格的值返回到原来的左上角位置。

    # 合并单元格, 往左上角写入数据即可
    sheet.merge_cells('B1:G1') # 合并一行中的几个单元格
    sheet.merge_cells('A1:C3') # 合并一个矩形区域中的单元格

    合并后只可以往左上角写入数据,也就是区间中:左边的坐标。
    如果这些要合并的单元格都有数据,只会保留左上角的数据,其他则丢弃。换句话说若合并前不是在左上角写入数据,合并后单元格中不会有数据。
    以下是拆分单元格的代码。拆分后,值回到A1位置。

    sheet.unmerge_cells('A1:C3')
  • 相关阅读:
    微信二维码 场景二维码 用于推送事件,关注等 注册用户 ,经过测试
    简单的 Helper 封装 -- CookieHelper
    简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
    Java反射机制
    Windows Azure Web Site (13) Azure Web Site备份
    Windows Azure Virtual Machine (1) IaaS用户手册
    Windows Azure Web Site (1) 用户手册
    Windows Azure Web Site (12) Azure Web Site配置文件
    Windows Azure Web Site (11) 使用源代码管理器管理Azure Web Site
    Windows Azure Web Site (10) Web Site测试环境
  • 原文地址:https://www.cnblogs.com/fengchong/p/10432543.html
Copyright © 2011-2022 走看看