简单用例

Simple Usage


编辑工作簿

  1. >>> from openpyxl import Workbook
  2. >>> from openpyxl.compat import range # import后的range 将覆盖标准库中的range函数
  3. >>> from openpyxl.cell import get_column_letter
  4. >>>
  5. >>> wb = Workbook() # 创建一个workbook
  6. >>>
  7. >>> dest_filename = 'empty_book.xlsx' # 保存使用的位置和文件名
  8. >>>
  9. >>> ws1 = wb.active # 获取工作表 (创建新工作簿时始终会有一个工作表)
  10. >>> ws1.title = "range names" # 为工作命名
  11. >>>
  12. >>> for row in range(1, 40): # 向工作表写入40行
  13. ... ws1.append(range(600)) # 向工作表写入600列
  14. >>>
  15. >>> ws2 = wb.create_sheet(title="Pi") # 创建第二个工作表,并命名为Pi
  16. >>>
  17. >>> ws2['F5'] = 3.14 # 给单元格'F5'赋值
  18. >>>
  19. >>> ws3 = wb.create_sheet(title="Data") # 创建第三个工作表,并命名为Data
  20. >>> for row in range(10, 20):
  21. ... for col in range(27, 54):
  22. ... _ = ws3.cell(column=col, row=row, value="%s" % get_column_letter(col)) # 将单元格的列名作为单元格的值
  23. >>> print(ws3['AA10'].value)
  24. AA
  25. >>>
  26. >>> ws4=wb.create_sheet('NEW_DATA')
  27. >>> for row in range(1,10):
  28. for col in range(1,10):
  29. # 如果没有使用赋值语句 "_ = .... ",结果如下
  30. ws4.cell(column=col,row=row, value="%s" % get_column_letter(col))
  31. <Cell NEW_DATA.A1>
  32. <Cell NEW_DATA.B1>
  33. <Cell NEW_DATA.C1>
  34. <Cell NEW_DATA.D1>
  35. <Cell NEW_DATA.E1>
  36. ...
  37. >>>
  38. >>> wb.save(filename = dest_filename) # 保存文件

读取xltx模板并另存为xlsx文件

  1. >>> from openpyxl import load_workbook
  2. >>>
  3. >>>
  4. >>> wb = load_workbook('sample_book.xltx') # 读取xltx文件
  5. >>> ws = wb.active # 获取工作表
  6. >>> ws['D2'] = 42 # 为单元格赋值
  7. >>>
  8. >>> wb.save('sample_book.xlsx') # 保存文件
  9. >>>
  10. >>> # 你也可以覆盖当前的文件模板
  11. >>> # wb.save('sample_book.xltx')

读取xltm模板并另存为xlsm文件

  1. >>> from openpyxl import load_workbook
  2. >>>
  3. >>>
  4. >>> wb = load_workbook('sample_book.xltm', keep_vba=True) # keep_vba=True 保留vba代码
  5. >>> ws = wb.active
  6. >>> ws['D2'] = 42
  7. >>>
  8. >>> wb.save('sample_book.xlsm')
  9. >>>
  10. >>> # 你也可以覆盖当前的文件模板
  11. >>> # wb.save('sample_book.xltm')

读取一个已存在的工作簿

  1. >>> from openpyxl import load_workbook
  2. >>> wb = load_workbook(filename = 'empty_book.xlsx') # 加载工作簿
  3. >>> sheet_ranges = wb['range names'] # 使用名为"range names"的工作表
  4. >>> print(sheet_ranges['D18'].value) # 打印单元格的值
  5. 3

Note

>

使用load_workbook时,有几个标记(flag)可以用。

  1. guess_types : 当读取单元格信息时,是否启用推测单元格格式,默认为不启用 False

  2. data_only :控制读取单元格时是否保留公式(formulae),默认为保留 False。或者直接读取单元格所存的最终值。

  3. keep_vba : 是否保留Visual Basic元素功能,默认为不保留 False。即使VB元素被保留,也不能被编辑。


Warning

>

openpyxl 目前不能完全读取Excel文件中的所有项目, 因此在打开和保存过程中使用相同的文件名,图片和图表会被丢失。


使用数字格式

  1. >>> import datetime
  2. >>> from openpyxl import Workbook
  3. >>> wb = Workbook(guess_types=True) #创建一个工作簿,并且使用单元格格式
  4. >>> ws = wb.active
  5. >>> # set date using a Python datetime
  6. >>> # 使用日期格式
  7. >>> ws['A1'] = datetime.datetime(2010, 7, 21)
  8. >>>
  9. >>> ws['A1'].number_format
  10. 'yyyy-mm-dd h:mm:ss'
  11. >>>
  12. >>> # set percentage using a string followed by the percent sign
  13. >>> # 使用百分数格式,需要在数字后面添加一个百分号。
  14. >>> ws['B1'] = '3.14%'
  15. >>>
  16. >>> ws['B1'].value
  17. 0.031400000000000004
  18. >>>
  19. >>> ws['B1'].number_format # 显示单元格B1的格式
  20. '0%'

使用公式

  1. >>> from openpyxl import Workbook
  2. >>> wb = Workbook()
  3. >>> ws = wb.active
  4. >>> # add a simple formula
  5. >>> # 是单元格的值为一个公式。实际上就是一个可以解析的字符串
  6. >>> ws["A1"] = "=SUM(1, 1)"
  7. >>> wb.save("formula.xlsx")

Warning >

函数名称必须使用英文字母;函数的参数必须使用逗号( , )分隔,不能使用其他符号,比如半角冒号。


openpyxl 不会执行公式,但可能会检查公式名称是否正确:

  1. >>> from openpyxl.utils import FORMULAE
  2. >>> "HEX2DEC" in FORMULAE # 查看公式名称是否在FORMULAE中
  3. True
  4. >>> print type(openpyxl.utils.FORMULAE)
  5. <type 'frozenset'>

If you’re trying to use a formula that isn’t known this could be because you’re using a formula that was not included in the initial specification. Such formulae must be prefixed with xlfn. to work.

如果你尝试使用一个并不常用的公式,可能这个公式没有包含在初始规范中。这种公式必须使用前缀xlfn.才能正常工作。

合并/拆分单元格

  1. >>> from openpyxl.workbook import Workbook
  2. >>>
  3. >>> wb = Workbook()
  4. >>> ws = wb.active
  5. >>>
  6. >>> ws.merge_cells('A1:B1') # 合并单元格
  7. >>> ws.unmerge_cells('A1:B1') # 拆分单元格
  8. >>>
  9. >>> # 或者使用单元格坐标进行操作
  10. >>> ws.merge_cells(start_row=2,start_column=1,end_row=2,end_column=4)
  11. >>> ws.unmerge_cells(start_row=2,start_column=1,end_row=2,end_column=4)

插入图片

  1. >>> from openpyxl import Workbook
  2. >>> from openpyxl.drawing.image import Image
  3. >>>
  4. >>> wb = Workbook()
  5. >>> ws = wb.active
  6. >>> ws['A1'] = 'You should see three logos below'
  7. >>> # create an image
  8. >>> img = Image('logo.png')
  9. >>> # add to worksheet and anchor next to cells
  10. >>> # 在单元格旁边插入图片
  11. >>> ws.add_image(img, 'A1')
  12. >>> wb.save('logo.xlsx')

Fold columns (outline)

折叠列 (outline)

  1. >>> import openpyxl
  2. >>> wb = openpyxl.Workbook(True)
  3. >>> ws = wb.create_sheet()
  4. >>> ws.column_dimensions.group('A','D', hidden=True)
  5. >>> wb.save('group.xlsx')

^ <-Previous | Next-> |