一些常用库的安装
-
excel :
- python2:
pip install openpyxl
- python3:
pip3 install openpyxl
- python2:
-
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
文件,xls
和xlsx
之间转换容易 注意:如果文字编码是gb2312
读取后就会显示乱码,请先转成Unicode
. -
Release notes
:https://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
- 工作表命名:工作表在创建时会自动命名。 它们按顺序编号(
Sheet
、Sheet1
、Sheet2
、…)。 您可以随时使用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)
- 仅复制单元格(包括值、样式、超链接和注释)和某些工作表属性(包括尺寸、格式和属性)。
- 不会复制所有其他工作簿/工作表属性 - 例如 图像,图表。
- 您也不能在工作簿之间复制工作表。 如果工作簿以只读或只写模式打开,则无法复制工作表。
数据
- 写入/读取 单元格有两种基本方法:使用工作表的键(例如
A1
或D3
),或通过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