python - openpyxl 用于读取/写入 Excel Python 库

一些常用库的安装

  • excel :

    • python2: pip install openpyxl
    • python3: pip3 install openpyxl
  • Matplotlib

    • 版本可作为用于 macOS、Windows 和 Linux on PyPI 的轮包提供。使用 pip 安装它:
    • python -m pip install -U pip
    • python -m pip install -U matplotlib
  • visio 安装

    • 下载:https://code.visualstudio.com/Download
  • python 安装

    • 下载: https://www.python.org/downloads/
  • 启动 import openpyxl 报错 numpy , float 什么的时

    • 原因为 numpy 版本过劳,需要卸载 pip uninstall numpy
    • 并重新安装 pip install -U numpy==1.23.5

简介

  • openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件,xlsxlsx之间转换容易 注意:如果文字编码是gb2312 读取后就会显示乱码,请先转成Unicode.

  • Release noteshttps://openpyxl.readthedocs.io/en/stable/changes.html

  • Excel文件三个对象:

    • workbook: 工作簿,一个excel文件包含多个sheet。
    • sheet:工作表,一个workbook有多个,表名识别,如“sheet1”,“sheet2”等。
    • cell: 单元格,存储数据对象

工作表

  • 创建新工作表:您可以使用 Workbook.create_sheet() 方法
    ws1 = wb.create_sheet("Mysheet") # insert at the end (default)
    ws2 = wb.create_sheet("Mysheet", 0) # insert at first position
    ws3 = wb.create_sheet("Mysheet", -1) # insert at the penultimate position
    
  • 工作表命名:工作表在创建时会自动命名。 它们按顺序编号(SheetSheet1Sheet2、…)。 您可以随时使用 Worksheet.title 属性更改此名称,如:ws.title = "New Title"
  • 工作表背景颜色:默认情况下,包含此标题的选项卡的背景颜色为白色。 您可以更改此设置,为 Worksheet.sheet_properties.tabColor 属性提供 RRGGBB 颜色代码,例如:ws.sheet_properties.tabColor = "1072BA"
  • 工作簿的键:为工作表命名后,您可以将其作为工作簿的键,如:ws3 = wb["New Title"]
  • 获得所有工作表的名称:您可以使用 Workbook.sheetname 属性查看工作簿的所有工作表的名称,如:print(wb.sheetnames)
    您可以循环浏览工作表,如:for sheet in wb: print(sheet.title)
  • 可复制工作表:如: source = wb.active >>> target = wb.copy_worksheet(source)
    • 仅复制单元格(包括值、样式、超链接和注释)和某些工作表属性(包括尺寸、格式和属性)。
    • 不会复制所有其他工作簿/工作表属性 - 例如 图像,图表。
    • 您也不能在工作簿之间复制工作表。 如果工作簿以只读或只写模式打开,则无法复制工作表。

数据

  • 写入/读取 单元格有两种基本方法:使用工作表的键(例如 A1D3),或通过cell()方法使用行和列表示法。
    #!/usr/bin/env python
    from openpyxl import Workbook
    ## 写入
    book = Workbook()
    sheet = book.active
    sheet['A1'] = 1
    sheet['A2'] = 'S1'
    sheet.cell(row=2, column=2).value = 2
    book.save('write2cell.xlsx')
    
    ## 读取
    book = openpyxl.load_workbook('write2cell.xlsx')
    sheet = book.active
    a1 = sheet['A1']
    a2 = sheet['A2']
    a3 = sheet.cell(row=2, column=2)
    print(a1.value)
    print(a2.value) 
    print(a3.value)
    
  • 单元格:可以作为工作表的键直接访问,如:c = ws['A4']
    • 将返回 A4 处的单元格,如果尚不存在,则创建一个。
    • 可以直接赋值单元格,如:ws['A4'] = 4
  • 在内存中创建工作表时,它不包含任何单元格。它们是在第一次访问时创建的。
  • 可以使用切片访问单元格范围 ,如:cell_range = ws['A1':'C2']
  • 可以类似地获得行或列的范围:
    >>> colC = ws['C']
    >>> col_range = ws['C:D']
    >>> row10 = ws[10]
    >>> row_range = ws[5:10]
    
  • 迭代行:for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
  • 迭代列:for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
  • 如果您只想要工作表中的值,您可以使用 Worksheet.values 属性。这将遍历工作表中的所有行,但仅返回单元格值:
    for row in ws.values:
    	for value in row:
    		print(value)
    

补充

参考:https://geek-docs.com/python/python-tutorial/python-openpyxl.html

  • 使用append()方法,我们可以在当前工作表的底部附加一组值。
  • 按行迭代:sheet.iter_rows,按列迭代:iter_cols()
    #!/usr/bin/env python
    
    from openpyxl import Workbook
    
    book = Workbook()
    sheet = book.active
    rows = (
        (88, 46, 57),
        (89, 38, 12),
        (23, 59, 78),
        (56, 21, 98),
        (24, 18, 43),
        (34, 15, 67)
    )
    ## append 方法附加
    for row in rows:
        sheet.append(row)
    ## 按行迭代
    for row in sheet.iter_rows(min_row=1, min_col=1, max_row=6, max_col=3):
        for cell in row:
            print(cell.value, end=" ")
        print()    
        ## 88 46 57 
    	## 89 38 12 
    	## 23 59 78 
    	## 56 21 98 
    	## 24 18 43 
    	## 34 15 67
    ## 按列迭代
    for row in sheet.iter_cols(min_row=1, min_col=1, max_row=6, max_col=3):
        for cell in row:
            print(cell.value, end=" ")
        print() 
    	## 88 89 23 56 24 34 
    	## 46 38 59 21 18 15 
    	## 57 12 78 98 43 67
    
  • 合并单元格
    单元格可以使用merge_cells()方法合并,而可以不使用unmerge_cells()方法合并。 当我们合并单元格时,除了左上角的所有单元格都将从工作​​表中删除。
    #!/usr/bin/env python
    
    from openpyxl import Workbook
    from openpyxl.styles import Alignment
    
    book = Workbook()
    sheet = book.active
    
    sheet.merge_cells('A1:B2')
    
    cell = sheet.cell(row=1, column=1)
    cell.value = 'Sunny day'
    cell.alignment = Alignment(horizontal='center', vertical='center')
    
    book.save('merging.xlsx')
    
  • Openpyxl 冻结窗格
    冻结窗格时,在滚动到工作表的另一个区域时,我们会保持工作表的某个区域可见。
    #!/usr/bin/env python
    
    from openpyxl import Workbook
    from openpyxl.styles import Alignment
    book = Workbook()
    sheet = book.active
    sheet.freeze_panes = 'B2'
    book.save('freezing.xlsx')
    
  • Openpyxl 公式,openpyxl不进行计算; 它将公式写入单元格。
    #!/usr/bin/env python
    from openpyxl import Workbook
    
    book = Workbook()
    sheet = book.active
    rows = (
        (34, 26),
        (88, 36),
        (24, 29),
        (15, 22),
        (56, 13),
        (76, 18)
    )
    for row in rows:
        sheet.append(row)
    
    cell = sheet.cell(row=7, column=2)  # 我们得到显示计算结果的单元格。
    cell.value = "=SUM(A1:B6)" # 我们将一个公式写入单元格。
    cell.font = cell.font.copy(bold=True) # 我们更改字体样式。
    
    book.save('formulas.xlsx')
    
  • OpenPyXL 图像 ,如何将图像插入到工作表中
    #!/usr/bin/env python
    from openpyxl import Workbook
    from openpyxl.drawing.image import Image
    
    book = Workbook()
    sheet = book.active
    
    img = Image("icesid.png")
    sheet['A1'] = 'This is Sid'
    sheet.add_image(img, 'B2') # 将图片加入B2
    
    book.save("sheet_image.xlsx")
    
  • Openpyxl 图表
    • openpyxl库支持创建各种图表,包括条形图,折线图,面积图,气泡图,散点图和饼图。
    #!/usr/bin/env python
    
    from openpyxl import Workbook
    from openpyxl.chart import (
        Reference,
        Series,
        BarChart
    )
    
    book = Workbook()
    sheet = book.active
    
    rows = [
        ("USA", 46),
        ("China", 38),
        ("UK", 29),
        ("Russia", 22),
        ("South Korea", 13),
        ("Germany", 11)
    ]
    
    for row in rows:
        sheet.append(row)
    
    data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=6)
    categs = Reference(sheet, min_col=1, min_row=1, max_row=6)
    
    chart = BarChart()
    chart.add_data(data=data)
    chart.set_categories(categs)
    chart.legend = None
    chart.y_axis.majorGridlines = None
    chart.varyColors = True
    chart.title = "Olympic Gold medals in London"
    
    sheet.add_chart(chart, "A8")  #添加生成的图标
    
    book.save("bar_chart.xlsx")
    

案例

简单案例

from openpyxl import Workbook
wb = Workbook()  # 创建工作簿

# grab the active worksheet
ws = wb.active

# Data can be assigned directly to cells
ws['A1'] = 42

# Rows can also be appended
ws.append([1, 2, 3])

# Python types will automatically be converted
import datetime
ws['A2'] = datetime.datetime.now()

# Save the file
wb.save("sample.xlsx")

读表

#打开文件:
from openpyxl import load_workbook
excel=load_workbook('home/my/test.xlsx')
#获取sheet:
sheets = wb.get_sheet_names()
table = excel.get_sheet_by_name(sheets[0])   #通过表名获取  
# table = wb.active 或者是找活跃的表
# ws = wb["frequency"]  后者是按照名字找
#获取行数和列数:
rows=table.max_row   #获取行数
cols=table.max_column    #获取列数
#获取单元格值:
Data=table.cell(row=row,column=col).value 
#获取表格内容,是从第一行第一列是从1开始的,注意不要丢掉 .value
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值