• openpyxl读取Excel数据


    python 读取Excel的各种模块说明网站

    http://www.python-excel.org/

    openpyxl 推荐的,用于读写Excel2010的.xlsx文件

    Download | Documentation | Bitbucket

    xlsxwriter  可选的包,用于写入数据、 格式信息,特别是图表到Excel2010的.xlsx文件中

    Download | Documentation | GitHub

    xlrd 用于读取老版的Excel文件(扩展名为.xls)的数据和格式信息

    Download | Documentation | GitHub

    xlwt 用于写入老版的Excel文件(扩展名为.xls)的数据和格式信息


    Download | Documentation | Examples | GitHub

    xlutils  相当于功能集,需要xlrd,xlwt支持,可以复制、修改、筛选已存在的Excel文件(一般来说这些功能已被openpyxl覆盖)

    Download | Documentation | GitHub

    #! Python3

    #-*- coding:utf8 -*- 

    import openpyxl

    #载入表格内容

    wb=openpyxl.load_workbook('e:\work\newFile.xlsx')

    print(wb.get_sheet_names())

    #返回的为表格中的工作簿名list

    #定位到Sheet工作簿

    sheet=wb.get_sheet_by_name('Sheet')

    print(sheet.title)

    #返回sheet工作簿的名称"Sheet"

    #定位到最后编辑的工作簿

    sheet=wb.active

    c=sheet['B1']

    #单元格有属性 value值,row行号1,column列号B,coordinate位置号B1

    print('c  value is :',c.value,', row is :',c.row,', column is : ',c.column,' , coordinate is : ',c.coordinate)

    #单元格定位的第二种表示方式

    print(sheet.cell(row=1,column=2),' c: ',c)

    #输出值同变量c  

    #sheet有属性 max_row非空白区的最大行号 ,max_column 非空白区的最大列号

    from openpyxl.utils import get_column_letter,column_index_from_string

    #get_column_letter()将数字列号转换为对应的字母,2:B。

    #column_index_from_string()将字母列号转换为对应的数字, AA:27。

    print('2 : ',get_column_letter(2),'AA: ',column_index_from_string('AA') )

    #('2 : ', 'B', 'AA: ', 27)

    for rowNm in sheet['A1':'C20']:

        for j in rowNm:

            print(j.coordinate,j.value)

        print('end of row : ',rowNm)

        

    #创建表格

    from openpyxl import Workbook

    wbk=Workbook()

    #active 为最后修改过的工作簿,无修改则默认为第一个工作簿

    wst=wbk.active

    #添加工作簿

    wst1=wbk.create_sheet("Mysheet") #insert at the end(default)

    wst2=wbk.create_sheet("Msheet",0) #insert at first position

    #工作簿的名字,在创建时不设置有默认值,创建后可通过属性title进行修改

    wst.title="New Title"

    #给工作簿标签添加颜色通过RRGGBB颜色码,默认为白色

    wst.sheet_properties.tabColor="1072BA"

    #删除工作簿

    wbk.remove_sheet(wbk['Mysheet'])

    #也可通过表格的键值表示一个工作簿

    ws3=wbk["New Title"]

    #获取表格的所有工作簿名

    print(wbk.sheetnames)

    #也可以循环表格

    for sheet in wbk:

        print(sheet.title)

    #复制工作簿

    target=wbk.copy_worksheet(wst)

    #工作簿的单元格

    d=wst.cell(row=4,column=2,value=10)

    #单元格区域的表示方法

    colC=wst['C']  #C列

    col_range=wst['C:D']#C列到D列

    row10=wst[10] #第10行 

    row_range=wst[5:10] #第5行到第10行

    #方法 循环单元格区域的方法 iter_rows()一行一行的迭代,iter_cols()一列一列的迭代

    for row in wst.iter_rows(min_row=1,max_col=3,max_row=2):

        for cell in row:

         print(cell)

    '''

    <Cell 'Mysheet'.A1>

    <Cell 'Mysheet'.B1>

    <Cell 'Mysheet'.C1>

    <Cell 'Mysheet'.A2>

    <Cell 'Mysheet'.B2>

    <Cell 'Mysheet'.C2>

    '''

    for col in wst.iter_cols(min_row=1,max_col=3,max_row=2):

        for cell in col:

         print(cell)

    #如果要遍历整个工作簿,可使用属性rows或columns

    for s in tuple(wst.columns):

        print(s) 

    '''

    (<Cell 'Mysheet'.A1>, <Cell 'Mysheet'.A2>, <Cell 'Mysheet'.A3>, <Cell 'Mysheet'.A4>, <Cell 'Mysheet'.A5>, <Cell 'Mysheet'.A6>, <Cell 'Mysheet'.A7>, <Cell 'Mysheet'.A8>, <Cell 'Mysheet'.A9>, <Cell 'Mysheet'.A10>)

    (<Cell 'Mysheet'.B1>, <Cell 'Mysheet'.B2>, <Cell 'Mysheet'.B3>, <Cell 'Mysheet'.B4>, <Cell 'Mysheet'.B5>, <Cell 'Mysheet'.B6>, <Cell 'Mysheet'.B7>, <Cell 'Mysheet'.B8>, <Cell 'Mysheet'.B9>, <Cell 'Mysheet'.B10>)

    (<Cell 'Mysheet'.C1>, <Cell 'Mysheet'.C2>, <Cell 'Mysheet'.C3>, <Cell 'Mysheet'.C4>, <Cell 'Mysheet'.C5>, <Cell 'Mysheet'.C6>, <Cell 'Mysheet'.C7>, <Cell 'Mysheet'.C8>, <Cell 'Mysheet'.C9>, <Cell 'Mysheet'.C10>)

    '''

    import datetime

    #写入数据

    d.value=datetime.datetime.now()

    wst['A2']='Hello world !'

    print(d.value)

    #datetime.datetime(2017, 7, 14, 16, 50, 43, 532788)

    #同样可以写入公式

    wst['A3']='=upper(A2)'

    #检查公式,python 虽然不会计算公式的结果,但是可以检查公式的名字

    from openpyxl.utils import FORMULAE

    print('SUM' in FORMULAE)

    #True 

    #调整数据格式

    from openpyxl.styles import Font

    italic24Font=Font(size=24,italic=True)

    wst['A2'].font=italic24Font

    #Font()有四个关键字参数 name 字体的名字(string),size 字体大小(integer),bold 粗体(boolean,True表示粗体),italic 斜体(boolean,True表示斜体)

    fontObj1=Font(name='Times New Roman',bold=True)

    #调整列宽column_dimensions,行高row_dimensions

    wst.row_dimensions[1].height=70

    wst.column_dimensions['B'].width=20

    #1英寸=2.54厘米 。行高可以被设定为0~409间的浮点数或整数。一个单位相当于1/72英寸。默认行高是12.75个单位

    #列宽可以被设定为0~255间的整数或浮点数。默认列宽是可以容纳8.43个11号字体的字母。

    #如果行高或列宽被设置为0,则表示该行或该列被隐藏

    #保存表格

    wbk.save('e:\work\byPython.xlsx')

    #表格的属性template,默认值为False,将其改为True则表示临时文件

    wb=openpyxl.load_workbook('e:\work\byPython.xlsx')

    wb.template=True 

    wb.save('e:\work\byPython_template.xltx')

    #将临时文件保存为正式文件

    wb=openpyxl.load_workbook('e:\work\byPython_template.xltx')

    wb.template=False 

    #合并单元格

    wst.merge_cells('A1:D3')

    wst['A1']='twelve cells merged together.'

    #取消合并

    wst.unmerge_cells('A1:D3')

    wbk.save('e:\work\byPython.xlsx')

    #冻结窗格

    #可以通过工作簿的属性freeze_panes设置冻结的单元格,当其值为None或‘A1’时,没有窗格会被冻结

    wst.freeze_panes='A2' #将冻结第一行窗格

    #创建图表

    #通过图表的数据区域openpyxl.chart.Reference(),有三个入参第一个工作簿名;第二个参数两个数字组成的元组,区域的左边界;第三个参数,两个数字组成的元组,区域右边界。 

    refObj=openpyxl.chart.Reference(wst,min_col=1,min_row=1,max_col=1,max_row=10)

    #创建图表数据元素

    seriesObj=openpyxl.chart.Series(refObj,title='First series') #title 为图表中该数据名

    #创建柱状图

    chartObj=openpyxl.chart.BarChart()

    #也可以创建折线图,散点图,扇形图  通过方法,openpyxl.chart.LineChart(),openpyxl.chart.ScatterChart(),openpyxl.chart.PieChart()

    chartObj.title='My Chart'

    #将数据加入柱状图对象

    chartObj.append(seriesObj)

    #将图表加入工作簿指定区域

    wst.add_chart(chartObj,'C5')

    wbk.save('e:\work\byPython.xlsx')

    #不幸的是这个版本的openpyxl加载表格的功能load_workbook()不会加载表格中的图表,所以加载一个有图表的表格后,再立刻保存,图表就会被删除。

  • 相关阅读:
    日历(Calendar)模块
    关于Python3中函数:
    正则表达式全集
    python同时遍历两个list
    Python 类
    vs_code 快捷键
    Linux常用命令大全
    Linux基础命令sort
    Linux基础命令练习题答案7.10
    Linux基础命令练习题7.10
  • 原文地址:https://www.cnblogs.com/Ting-light/p/9548228.html
Copyright © 2020-2023  润新知