Python自学笔记

§1 教程

2020-07-26  本文已影响0人  第六九书

1 教程

1.1 创建工作薄

1.1.1 创建一个工作薄

使用openpyxl时不需要在计算机文件系统中提前创建excel工作簿文件,只需要导入Workbook类即可。

from openpyxl import Workbook

wb = Workbook()
wb.save('text.xlsx')

1.1.2 添加工作表

1.1.2.1 active方法

一个工作簿(workbook)至少要有一个工作表(worksheet),可以使用Workbook.active属性创建一个默认工作表。

ws = wb.active

使用此方法创建的工作表位置需要默认是0。
除非创建时修改工作表位置,否则此方法创建的的工作表默认都是第一个工作表,即序号为0的工作表。

image.png

1.1.2.2 create_sheet()方法

另外,还可以使用Workbook.create_sheet()方法创建工作表

ws1 = wb.create_sheet("Mysheet0") # 从后方插入一个工作表(默认)
# or
ws2 = wb.create_sheet("Mysheet1", 0) # 从最前面插入一个工作表。
# or
ws3 = wb.create_sheet("Mysheet2", -1) # 在倒数第二的位置插入一个工作表。
image.png

1.1.3 工作表命名

工作表创建时名称会自动命名,命名的序列是 (Sheet, Sheet1, Sheet2, …)。我们也可以随时修改工作表名称,工作表名称修改时,使用Worksheet.title的属性:

ws1.title = "插入工作表1"
ws2.title = "插入工作表2"  
ws3.title = "插入工作表3" 

1.1.4 更改工作表标签的背景色

工作表标签背景色默认是白色,我们可以使用Worksheet.sheet_properties.tabColor属性改变背景颜色,此时的背景色代码应为“RRGGBB”格式。

ws1.sheet_properties.tabColor = "1072BA"
image.png

1.1.5 获取工作表

print(wb["插入工作表1"]) # ws4实际上就是ws1
print(wb.sheetnames)
image.png
for sheet in wb: 
    print(sheet)
    print(sheet.title)
image.png

1.1.6 复制工作表

在同一工作薄里面通过复制创建工作表。方法:Workbook.copy_worksheet()

source = wb.active
target = wb.copy_worksheet(source)
image.png

注意:

  1. 只有表格中的数据、格式、超链接、注释以及一部分工作表属性(包括尺寸、格式和特性等)会被复制,其他的诸如图片、图表等不会被复制。
  2. 不能跨工作薄复制。
  3. 只读模式的工作表不能复制。

1.2 数据操作

1.2.1 单个单元格

现在我们知道如何得到一个工作表,我们可以开始修改单元格内容了。单元格可以作为工作表的键直接访问:

c = ws['A4']

这将返回A4处的单元格,或者创建一个不存在的单元格。也可直接赋值:ws['A4'] = 6
也可以通过Worksheet.cell()方法进行赋值。该方法可以使用行和列表示法访问单元格:
d = ws.cell(row=1,column=4,value=6) # 行列值的顺序

注意:在内存中创建工作表时,工作表对象一般是不包含单元格。单元格是在第一次访问时才创建的。

正是由于这个特性,需要创建单元格时一般是使用滚动单元格方式创建,而不是直接访问并给它们赋值。例如下面这个方法就是创建了一个100*100的空单元格。

for x in range(1,101):
    for y in range(1,101):
        ws.cell(row=x, column=y) 

1.2.2 多单元格操作

colC = ws['C'] # 获取C列
col_range = ws['C:D'] # 获取c、d两列
row10 = ws[10] # 获取的10行
row_range = ws[5:10] # 获取第5-10行
for row in ws.iter_rows(min_row=1,max_row=2,max_col=3):
    for cellin row:
         print(cell)
图片.png
for row in ws.iter_cols(min_row=1,max_row=2,max_col=3):
    for cellin row:
         print(cell)
图片.png
ws = wb.active
ws['C9'] = 'hello world'
a = tuple(ws.rows)
print(a)
图片.png
ws = wb.active
ws['C9'] = 'hello world'
b = tuple(ws.columns)
print(a)
图片.png

1.2.3 值的操作

如果是只针对工作表中的值进行操作,可以使用属性Worksheet.values。此时会按行迭代工作表中的所有值。
If you just want the values from a worksheet you can use the Worksheet.values property. This iterates over all the rows in a worksheet but returns just the cell values:

for row in ws.values: # 读取行的值
    for value in row: # 读取每个单元格的值
        print(value) # 打印出每个单元格的值
图片.png

Worksheet.iter_rows()Worksheet.iter_cols()都可以通过values_only这个参数用来返回单元格的值。

for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):
    print(row)
效果
for col in ws.iter_cols(min_row=1,max_row=5,max_col=3,values_only=True):
    print(col) # 打印包含列数据的列表
图片.png

1.3 数据保存

如果我们知道了某一个单元格,我们就可以给这个单元格分配一个数据。

# 变量赋值
c = ws['A2']
d = ws.cell(2,2)

# 单元格数据赋值
c.value = 20200726
d.value = '赵宝玉'

# 显示单元格数据
print(c.value)
print(d.value)

1.3.1 保存数据至文件

保存数据是简单直接也是最安全的方法是使用Workbook对象的workbook.save()方法。但是

警告
需要注意的是,如果文件已存在,本操作将会直接覆盖文件,而不会提前警告。

注意
文件扩展名不强制为xlsxxlsm,但如果不使用正式扩展名,则直接用另一个应用程序打开它可能会遇到一些问题。
由于OOXML文件基本上是ZIP文件,所以您也可以用您最喜欢的ZIP文档管理器打开它。

from openpyxl import Workbook

wb = Workbook() # 给工作薄赋值,注意大小写
wb.save('student.xlsx')

或者

import openpyxl

wb = openpyxl.Workbook()
wb.save('student.xlsx')

1.3.2 保存为流文件

如果你相保存为流文件时,在使用诸如Pyramid, Flask 或是 Django 等的网络应用时,可能 会需要保存为流文件,此时只需提供一个简单的方法NamedTemporaryFile()即可。

from tempfile import NamedTemporaryFile
from openpyxl import Workbook

wb = Workbook()

with NamedTemporaryFile() as tmp:
    wb.save(tmp.name)
    tmp.seek(0)
    stream = tmp.read()

还可以使用“template”属性将工作薄保存为模板文件。template=True

wb = load_workbook('document.xlsx')
wb.template = True
wb.save('document_template.xltx')

或者将属性设置为False,用来保存为文档。

wb = load_workbook('document_template.xltx')
wb.template = False
wb.save('document.xlsx', as_template=False)

警示
您应该管理数据属性和文档扩展名,以便在文档模板中保存文档,反之亦然,否则文档无法正常打开。

注意:以下操作会失败:

wb = load_workbook('document.xlsx')
# 扩展名应为“ *.xlsx”
wb.save('new_document.xlsm')
# MS Excel无法打开文档

# 或者

# 需要特别指出属性“ keep_vba=True”
wb = load_workbook('document.xlsm')
wb.save('new_document.xlsm')
# MS Excel无法打开文档

# 或者

wb = load_workbook('document.xltm', keep_vba=True)
# 如果需要模板文件,需要特别指明扩展名为“*.xltm”
wb.save('new_document.xlsm')
# MS Excel无法打开文档

1.4 加载文件

与写入文件一样,我们可以使用openpyxl.load_workbook()方法来打开已存在的工作薄文件。

from openpyxl import load_workbook

wb2 = load_workbook(result.xlsx')
print wb2.sheetnames

输出结果是:['调查结果', '评价结果']

===

上一篇下一篇

猜你喜欢

热点阅读