2.1 创建一个工作薄
可以使用多种方法创建工作表:
- active方法。
ws = wb.active
,表示创建一个默认工作表,位置一般是在工作薄第一位,即序号为“0”的位置。 - create_sheet()默认方法。
ws = wb.create_sheet('sheetname1')
,表示从已有的工作表序列最后插入一个工作表。 - create_sheet()指定序号方法。
ws = wb.create_sheet('sheetname2',0)
,表示指定工作表创建于“0”序列处。 - create_sheet()指定倒数第二的方法。
ws = wb.create_sheet('sheetname3',-1)
,表示指定将工作表插入到倒数第二爱上个序列中。
示例
from openpyxl import Workbook
from openpyxl.utils import get_column_letter
# get_column_letter,根据列的数字序号返回列的字母表示的方法。
# 例如get_column_letter(2)则会返回字母“B”。表示,第二列用字母表示是“B”列的意思。
wb = Workbook()
dest_filename = 'empty_book.xlsx'
ws1 = wb.active
ws1.title = "range names"
#从第一行至第39行,每行填入600列,各列的值分别是从0-599的数字
for row in range(1, 10):
ws1.append(range(8))
ws2 = wb.create_sheet(title="Pi")
ws2['F5'] = 3.14
ws3 = wb.create_sheet(title="Data")
for row in range(1, 10):
for col in range(2, 15):
data = ws3.cell(column=col, row=row, value="{0}".format(get_column_letter(col)))
print(ws3['F8'].value)
wb.save(filename = dest_filename)
打印结果是:F
2.2 读取已存在的工作薄文件
from openpyxl import load_workbook
wb = load_workbook(filename = 'result.xlsx')
sheet_ranges = wb['range names'] # 获取指定工作表
print(sheet_ranges['D8'].value) # 输出特定单元格数值
输出结果:3
注意
使用load_workbook()方法可以对excel多种标志进行加载。
- data_only用于控制包含公式的单元格是使用公式(默认值)还是Excel工作表中存储的值。
- keep_vba 用于控制是否保留任何Visual Basic元素(默认)。但是要注意的是即使保留了它们,它们仍然是不可编辑的。
警示
openpyxl当前无法读取Excel文件中的所有可能的标志项,因此,如果以相同的名称打开和保存图像和图表,有些标志项将从现有文件中丢失。
2.3 使用数字格式
import datetime
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
# 利用python的datetime库设置时间格式
ws['A1'] = datetime.datetime(2010,7,21,10,30,21)
print(ws['A1'].number_format)
# 设置格式为科学计数法
ws['B1'].number_format = '0.00E+00'
ws['B1'] = 21
print(ws['B1'].number_format)
# 设置格式为数字格式,精确到小数点后两位
ws['C1'].number_format = '0.00'
ws['C1'] = 21
print(ws['C1'].number_format)
# 设置格式为数字格式,精确到个位
ws['D1'].number_format = '0'
ws['D1'] = 21
print(ws['D1'].number_format)
wb.save('datetime.xlsx')
输出结果是:
文档中显示的格式如下:
2.4 使用公式
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
# add a simple formula
ws["A1"] = "=SUM(1, 2)"
wb.save("formula.xlsx")
警告:
- 注意:函数和函数参数必须使用英文名称,函数参数必须用逗号分隔,而不是用分号等其他标点符号分隔。
- openpyxl 本身不会evaluates公式,但是可以利用openpyxl来检查公式名称。例如:
>>>from openpyxl.utils import FORMULAE
>>>"HEX2DEC" in FORMULAE
True # 这是输出的结果
- 如果您试图使用一个未知的公式,这可能是因为您使用的公式没有包含在初始规范中。这样的公式必须加上前缀"
_xlfn.
"才能起作用。
2.5 合并单元格和取消合并单元格(Merge / Unmerge cells)
当合并单元格时,除了左上角单元格外,其他的单元格均会被删除。为了携带合并后单元格的的边界信息,合并单元格后的边界单元格被创建为“合并单元格”,其值始终为None。请参见[设置合并单元格的样式](https://openpyxl.readthedocs.io/en/stable/styles.html#styling-merged-cells),以获取有关设置合并单元格格式的信息。
from openpyxl.workbook import Workbook
wb = Workbook()
ws = wb.active
ws.merge_cells('A2:D2')
ws.unmerge_cells('A2:D2')
# 等效于:
ws.merge_cells(start_row=2, start_column=1, end_row=4, end_column=4)
ws.unmerge_cells(start_row=2, start_column=1, end_row=4, end_column=4)
2.6 插入图片
from openpyxl import Workbook
from openpyxl.drawing.image import Image
wb = Workbook()
ws = wb.active
ws['A1'] = 'You should see three logos below'
# create an image 此步需要pillow库的支持。需先安装pillow库才可正常运行。
img = Image('logo.png')
# add to worksheet and anchor next to cells
ws.add_image(img, 'A2')
wb.save('logo.xlsx')
2.7 折叠 (outline)
from openpyxl import Workbook
wb = Workbook()
ws = wb.create_sheet()
ws.column_dimensions.group('A','D', hidden=True)
ws.row_dimensions.group(1,10, hidden=True)
wb.save('group.xlsx')
===