当前位置:   article > 正文

Python3操作文件系列(三):OpenPyXl模块三大对象操作Excel文件_python3 openpyxl

python3 openpyxl



Python3操作文件系列(一):判断文件|目录是否存在三种方式

Python3操作文件系列(二):文件数据读写|二进制数据读写

Python3数据文件读取与写入

Python3操作文件系列(三):excel文件读写数据



Python操作Excel的三大对象认知升维:
Excel对象模型:
    excel脚本编程的主要内容包括脚本编程和Excel对象模型两大部分。对应脚本语言,它提供了一个叙事和交流的平台。
    而对象模型,提供了与应用程序图形用户界面相关的对象,这些对象提供了属性及方法等接口,通过它们,可以用脚本语言向这些对象编程,
    从而通过编程控制程序;
Excel图形用户界面中的对话框或界面元素被抽象为Excel对象。在OpenPyXL中:
(1)Excel工作簿被抽象为Workbook对象
(2)工作表被抽象为Worksheet对象
(3)单元格被抽象为Cell对象
这三个对象称为OpenPyXL的三大对象,还有表示图标的Chart对象等。所有Excel对象组合在一起,构成了Excel对象模型;
OpenPyXL的三大对象有着简单的包含关系;工作簿对象包含工作表对象,工作表对象包含单元格对象。所以在使用OpenPyxl进行编程时,Workbook对象,Worksheet对象和
Cell对象有着对应的层级应用关系



一: excel文件创建写入尝鲜 

openpyxl操作excel文件,实现数据分析与挖掘与智能化办公|数据可视化直观图等

  1. import os
  2. import pathlib
  3. from openpyxl import Workbook
  4. '''
  5. openpyxl操作excel文件尝鲜
  6. '''
  7. excelPath = os.getcwd()
  8. print("创建操作excel文件对象workbook")
  9. # 创建工作簿
  10. wb = Workbook()
  11. # 创建表单页
  12. ws = wb.create_sheet()
  13. ws['A1'] = '数量'
  14. ws['B1'] = '重量'
  15. ws['C1'] = '长度'
  16. ws.append([10, 200, 30])
  17. ws.append([100, 80, 90])
  18. ws.append([10, 500, 60])
  19. ws.append([20, 400, 80])
  20. ws.append([30, 540, 80])
  21. ws.append([10, 500, 30])
  22. ws.append([50, 600, 10])
  23. ws.append([90, 800, 60])
  24. ws.append([10, 500, 30])
  25. ws.append([50, 600, 10])
  26. ws.append([90, 800, 60])
  27. ws.append([10, 500, 30])
  28. ws.append([50, 600, 10])
  29. ws.append([90, 800, 60])
  30. try:
  31. path = pathlib.Path(excelPath + "\\data\\test.xlsx")
  32. print("path是否存在: ", path.exists())
  33. if path.exists():
  34. print("如果excel中对应单元格有数据,数据将会被覆盖")
  35. wb.save(r"" + excelPath + "\\data\\test.xlsx")
  36. print(
  37. "------------------也可设置工作簿对象的template属性值为True,可以将当前工作簿保存为模版,模版文件的拓展名为xltx")
  38. wb.template = True
  39. wb.save(excelPath + "\\data\\temp.xltx")
  40. else:
  41. with open(excelPath + "\\data\\test.xlsx", 'w') as f:
  42. print("文件创建成功!")
  43. except FileNotFoundError as err:
  44. print("系统异常: ", err)
  45. finally:
  46. print("释放资源")
  47. wb.close()

运行效果:


 

二: 创建|删除|管理工作表单

  1. import os
  2. import pathlib
  3. from openpyxl import load_workbook
  4. '''
  5. Python操作Excel的三大对象认知升维:
  6. Excel对象模型:
  7. excel脚本编程的主要内容包括脚本编程和Excel对象模型两大部分。对应脚本语言,它提供了一个叙事和交流的平台。
  8. 而对象模型,提供了与应用程序图形用户界面相关的对象,这些对象提供了属性及方法等接口,通过它们,可以用脚本语言向这些对象编程,
  9. 从而通过编程控制程序;
  10. Excel图形用户界面中的对话框或界面元素被抽象为Excel对象。在OpenPyXL中:
  11. (1)Excel工作簿被抽象为Workbook对象
  12. (2)工作表被抽象为Worksheet对象
  13. (3)单元格被抽象为Cell对象
  14. 这三个对象称为OpenPyXL的三大对象,还有表示图标的Chart对象等。所有Excel对象组合在一起,构成了Excel对象模型;
  15. OpenPyXL的三大对象有着简单的包含关系;工作簿对象包含工作表对象,工作表对象包含单元格对象。所以在使用OpenPyxl进行编程时,Workbook对象,Worksheet对象和
  16. Cell对象有着对应的层级应用关系
  17. '''
  18. print("使用load_workbook()函数加载已经存在的工作簿文件")
  19. excelPath = os.getcwd()
  20. try:
  21. path = pathlib.Path(excelPath + "\\data\\test01.xlsx")
  22. if path.exists():
  23. print("创建工作簿对象")
  24. print("通过这种方式创建的workbook没有返回值,使用with语句会报错:")
  25. print("'Workbook' object does not support the context manager protocol")
  26. print("绝对路径:", path.absolute())
  27. wb = load_workbook(path.absolute(), False, True, False, True)
  28. print("创建工作表对象")
  29. """
  30. title为工作表标题
  31. index为该工作表的索引位置,0表示放置最前面
  32. 当index为负数时,表示从后往前编号,-1表示在倒数第二个位置插入新工作表
  33. """
  34. ws = wb.create_sheet(title="国家统计局GDP入表数据", index=0)
  35. print("表格的标题:%s" % ws.title)
  36. ws1 = wb.create_sheet(title="MySheet")
  37. print(ws1.title)
  38. # 删除工作表单
  39. del wb[ws1.title]
  40. ws2 = wb.create_sheet(title="2023年汽车销售量")
  41. ws3 = wb.create_sheet(title="MySheet3")
  42. print("管理工作表单")
  43. print("获取所有的表单对象")
  44. sheets = wb.worksheets
  45. for sheet in sheets:
  46. print("工作簿中表单: ", sheet)
  47. print()
  48. print("更改MySheet3的名称为'2022年北京市就业统计'")
  49. sheets[1].title = '2021年北京市失业人数汇总'
  50. sheets[3].title = '2022年北京市就业统计'
  51. for sheet in sheets:
  52. print("修改后工作簿中表单: ", sheet)
  53. print("工作簿中有多少个工作表单: %d (张)" % len(sheets))
  54. # 删除工作表单
  55. # wb.remove(ws1)
  56. print("------------------------------------------------")
  57. print("引用工作表单")
  58. sheetList = wb.worksheets
  59. print("通过索引引用工作表单:", sheetList[0].title)
  60. print("通过索引引用工作表单:", sheetList[1].title)
  61. print("使用名称引用工作表单:", wb['2023年汽车销售量'])
  62. print("使用工作簿的get_sheet_by_name()函数引用表单:", wb.get_sheet_by_name(['2021年北京市失业人数汇总']))
  63. print('-----------------------------------------------------------------------')
  64. """
  65. 对应不知道表单的名字,可以使用工作簿的sheetnames属性获取所有的工作表单名称
  66. 然后使用表单名称引用表单
  67. """
  68. sheetNameList = wb.sheetnames
  69. for name in sheetNameList:
  70. print("工作簿中的表单:", name)
  71. else:
  72. print(path, ",文件不存在,请手动创建一个")
  73. except Exception as err:
  74. print("系统异常: ", err)
 
 

运行效果:


D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\file\excel\ExcelFileReadWriteByPyXlRelation.py 
使用load_workbook()函数加载已经存在的工作簿文件
创建工作簿对象
通过这种方式创建的workbook没有返回值,使用with语句会报错:
'Workbook' object does not support the context manager protocol
绝对路径: D:\program_file_worker\python_source_work\SSO\grammar\file\excel\data\test01.xlsx
创建工作表对象
表格的标题:国家统计局GDP入表数据
MySheet
管理工作表单
获取所有的表单对象
工作簿中表单:  <Worksheet "国家统计局GDP入表数据">
工作簿中表单:  <Worksheet "Sheet1">
工作簿中表单:  <Worksheet "2023年汽车销售量">
工作簿中表单:  <Worksheet "MySheet3">

更改MySheet3的名称为'2022年北京市就业统计'
修改后工作簿中表单:  <Worksheet "国家统计局GDP入表数据">
修改后工作簿中表单:  <Worksheet "2021年北京市失业人数汇总">
修改后工作簿中表单:  <Worksheet "2023年汽车销售量">
修改后工作簿中表单:  <Worksheet "2022年北京市就业统计">
工作簿中有多少个工作表单: 4 (张)
------------------------------------------------
引用工作表单
通过索引引用工作表单: 国家统计局GDP入表数据
通过索引引用工作表单: 2021年北京市失业人数汇总
使用名称引用工作表单: <Worksheet "2023年汽车销售量">
系统异常:  "Worksheet ['2021年北京市失业人数汇总'] does not exist."
D:\program_file_worker\python_source_work\SSO\grammar\file\excel\ExcelFileReadWriteByPyXlRelation.py:65: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
  print("使用工作簿的get_sheet_by_name()函数引用表单:", wb.get_sheet_by_name(['2021年北京市失业人数汇总']))

Process finished with exit code 0
 

红色部分报错:

获取工作表时,使用了get_sheet_by_name()方法,或报错: 

解决方案一:  Use wb[sheetname]   及这样取值:wb['2023年汽车销售量']

解决方案二: 

import warnings

warnings.filterwarnings("ignore")


再次运行效果:


D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\file\excel\ExcelFileReadWriteByPyXlRelation.py 
使用load_workbook()函数加载已经存在的工作簿文件
创建工作簿对象
通过这种方式创建的workbook没有返回值,使用with语句会报错:
'Workbook' object does not support the context manager protocol
绝对路径: D:\program_file_worker\python_source_work\SSO\grammar\file\excel\data\test01.xlsx
创建工作表对象
表格的标题:国家统计局GDP入表数据
MySheet
管理工作表单
获取所有的表单对象
工作簿中表单:  <Worksheet "国家统计局GDP入表数据">
工作簿中表单:  <Worksheet "Sheet1">
工作簿中表单:  <Worksheet "2023年汽车销售量">
工作簿中表单:  <Worksheet "MySheet3">

更改MySheet3的名称为'2022年北京市就业统计'
修改后工作簿中表单:  <Worksheet "国家统计局GDP入表数据">
修改后工作簿中表单:  <Worksheet "2021年北京市失业人数汇总">
修改后工作簿中表单:  <Worksheet "2023年汽车销售量">
修改后工作簿中表单:  <Worksheet "2022年北京市就业统计">
工作簿中有多少个工作表单: 4 (张)
------------------------------------------------
引用工作表单
通过索引引用工作表单: 国家统计局GDP入表数据
通过索引引用工作表单: 2021年北京市失业人数汇总
使用名称引用工作表单: <Worksheet "2023年汽车销售量">
使用工作簿的get_sheet_by_name()函数引用表单: <Worksheet "2021年北京市失业人数汇总">
-----------------------------------------------------------------------
工作簿中的表单: 国家统计局GDP入表数据
工作簿中的表单: 2021年北京市失业人数汇总
工作簿中的表单: 2023年汽车销售量
工作簿中的表单: 2022年北京市就业统计

Process finished with exit code 0

三: 添加复制|移动|行列操作


  1. import os
  2. import pathlib
  3. from openpyxl import Workbook
  4. '''
  5. Python操作Excel的三大对象认知升维:
  6. '''
  7. workBook = Workbook()
  8. print("使用Workbook对象相应方法操作工作表单")
  9. excelPath = os.getcwd()
  10. try:
  11. path = pathlib.Path(excelPath + "\\data\\test02.xlsx")
  12. if path.exists():
  13. print("激活当前工作表单")
  14. workSheet = workBook.active
  15. workSheet.title = '第一个sheet表单'
  16. # 赋值当前工作表单
  17. print("赋值工作表单:")
  18. new_copy_sheet = workBook.copy_worksheet(workSheet)
  19. new_copy_sheet.title = '第二个sheet表单'
  20. last_new_copy_sheet = workBook.copy_worksheet(workSheet)
  21. print('修改表单的名称')
  22. last_new_copy_sheet.title = '第三个sheet表单'
  23. print("复制工作表单完成")
  24. print()
  25. print('-----------------移动工作表单-------------------------------')
  26. print(
  27. "把第一个sheet表单移动到第3个索引位置;move_sheet()offset为整数,则移动向右移动数字的索引位置,如果为负数,则向左一定")
  28. workBook.move_sheet(workSheet, 3)
  29. workBook.move_sheet(workSheet, -1)
  30. print("在表单中新增行|列")
  31. workSheet.append([10, 20, 30])
  32. workSheet.append(['老杨', 80, 1023])
  33. print("添加两行字典")
  34. workSheet.append({'A': '李广', "B": "徐佳莹", "C": "89"})
  35. workSheet.append({1: '李广00', 2: "徐佳莹00", 3: "8900"})
  36. print('---------------------使用循环添加数据------------------------')
  37. for row in range(1, 10):
  38. workSheet.append(range(10, 20))
  39. print('------------------获取行/列或者多行/多列------------------')
  40. print("""
  41. 获取行和列,即引用行和列。使用引用行号引用行,使用列对应的字母引用列;
  42. 如下: 获取10行和第3列
  43. """)
  44. row10 = workSheet[10] # 返回的是元组
  45. print("第10组(元组)数据:", row10)
  46. colC = workSheet['C']
  47. print("第3列(元组)数据:", colC)
  48. for item in row10:
  49. print("第10行数据: ", item.value)
  50. print()
  51. print('-----------------------------------------------')
  52. for item in colC:
  53. print("第三列数据:", item.value)
  54. print("------------------------------------------------")
  55. print("使用嵌套的for循环变量第1-3行,并输出个单元格中的数据")
  56. for row in workSheet["1:3"]:
  57. for col in row:
  58. print("1-3行每个单元格的数据: ", col.value)
  59. print()
  60. print('使用嵌套的for循环变量1-3列,并输出个单元格中的数据')
  61. for column in workSheet["A:C"]:
  62. for cell in column:
  63. print("1-3列每个单元格的数据: ", cell.value)
  64. print()
  65. print('---------------------了解下工作表对象的其他数据和方法---------------------------------')
  66. print("工作表格的标题: ", workSheet.title)
  67. print("工作表格的可见状态: ", workSheet.sheet_state)
  68. print("表格中含有数据的部分的大小:", workSheet.dimensions)
  69. print("工作表格相关属性:", workSheet.sheet_properties)
  70. print()
  71. print("设置选项卡标签处的背景色")
  72. workSheet.sheet_properties.tabColor = 'FF5500'
  73. print("活动单元格: ", workSheet.active_cell)
  74. print("选中的单元格: ", workSheet.selected_cell)
  75. print("----------------------获取第一列列的1,2,3单元格的值------------------")
  76. print("A1数据:", workSheet['A1'].value)
  77. print("A2数据:", workSheet['A2'].value)
  78. print("A3数据:", workSheet['A3'].value)
  79. print("----------------------获取第二列的1,2,3单元格的值------------------")
  80. print("B1数据:", workSheet['B1'].value)
  81. print("B2数据:", workSheet['B2'].value)
  82. print("B3数据:", workSheet['B3'].value)
  83. print("----------------------获取第三列的1,2,3单元格的值------------------")
  84. print("C1数据:", workSheet['C1'])
  85. print("C2数据:", workSheet['C2'])
  86. print("C3数据:", workSheet['C3'])
  87. print("--------------------------变量某个区域(A1:C3)块的数据--------------------")
  88. data = []
  89. for row in workSheet['A1:C3']:
  90. rv = []
  91. for cell in row:
  92. rv.append(cell.value) # rv列表存放的是每一行的数据
  93. data.append(rv) # 每一列作为外层列表的一个元素
  94. print("data: ", data)
  95. print()
  96. i = 0
  97. for line in data:
  98. i += 1
  99. print(" 第 %d 行数据: " % i, line)
  100. workBook.save(path)
  101. else:
  102. with open(excelPath + "\\data\\test02.xlsx", 'w') as f:
  103. print("文件创建成功!")
  104. except FileNotFoundError as err:
  105. print("系统异常: ", err)
  106. finally:
  107. print()
  108. print("释放资源")
  109. workBook.close()

 

 
 

运行效果:


D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\file\excel\ExcelFileReadWriteByPyXlRelationMoveCopyRowColumns.py 
使用Workbook对象相应方法操作工作表单
激活当前工作表单
赋值工作表单:
修改表单的名称
复制工作表单完成

-----------------移动工作表单-------------------------------
把第一个sheet表单移动到第3个索引位置;move_sheet()offset为整数,则移动向右移动数字的索引位置,如果为负数,则向左一定
在表单中新增行|列
添加两行字典
---------------------使用循环添加数据------------------------
------------------获取行/列或者多行/多列------------------

            获取行和列,即引用行和列。使用引用行号引用行,使用列对应的字母引用列;
            如下: 获取10行和第3列
        
第10组(元组)数据: (<Cell '第一个sheet表单'.A10>, <Cell '第一个sheet表单'.B10>, <Cell '第一个sheet表单'.C10>, <Cell '第一个sheet表单'.D10>, <Cell '第一个sheet表单'.E10>, <Cell '第一个sheet表单'.F10>, <Cell '第一个sheet表单'.G10>, <Cell '第一个sheet表单'.H10>, <Cell '第一个sheet表单'.I10>, <Cell '第一个sheet表单'.J10>)
第3列(元组)数据: (<Cell '第一个sheet表单'.C1>, <Cell '第一个sheet表单'.C2>, <Cell '第一个sheet表单'.C3>, <Cell '第一个sheet表单'.C4>, <Cell '第一个sheet表单'.C5>, <Cell '第一个sheet表单'.C6>, <Cell '第一个sheet表单'.C7>, <Cell '第一个sheet表单'.C8>, <Cell '第一个sheet表单'.C9>, <Cell '第一个sheet表单'.C10>, <Cell '第一个sheet表单'.C11>, <Cell '第一个sheet表单'.C12>, <Cell '第一个sheet表单'.C13>)
第10行数据:  10
第10行数据:  11
第10行数据:  12
第10行数据:  13
第10行数据:  14
第10行数据:  15
第10行数据:  16
第10行数据:  17
第10行数据:  18
第10行数据:  19

-----------------------------------------------
第三列数据: 30
第三列数据: 1023
第三列数据: 89
第三列数据: 8900
第三列数据: 12
第三列数据: 12
第三列数据: 12
第三列数据: 12
第三列数据: 12
第三列数据: 12
第三列数据: 12
第三列数据: 12
第三列数据: 12
------------------------------------------------
使用嵌套的for循环变量第1-3行,并输出个单元格中的数据
1-3行每个单元格的数据:  10
1-3行每个单元格的数据:  20
1-3行每个单元格的数据:  30
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  老杨
1-3行每个单元格的数据:  80
1-3行每个单元格的数据:  1023
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  李广
1-3行每个单元格的数据:  徐佳莹
1-3行每个单元格的数据:  89
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None
1-3行每个单元格的数据:  None

使用嵌套的for循环变量1-3列,并输出个单元格中的数据
1-3列每个单元格的数据:  10
1-3列每个单元格的数据:  老杨
1-3列每个单元格的数据:  李广
1-3列每个单元格的数据:  李广00
1-3列每个单元格的数据:  10
1-3列每个单元格的数据:  10
1-3列每个单元格的数据:  10
1-3列每个单元格的数据:  10
1-3列每个单元格的数据:  10
1-3列每个单元格的数据:  10
1-3列每个单元格的数据:  10
1-3列每个单元格的数据:  10
1-3列每个单元格的数据:  10
1-3列每个单元格的数据:  20
1-3列每个单元格的数据:  80
1-3列每个单元格的数据:  徐佳莹
1-3列每个单元格的数据:  徐佳莹00
1-3列每个单元格的数据:  11
1-3列每个单元格的数据:  11
1-3列每个单元格的数据:  11
1-3列每个单元格的数据:  11
1-3列每个单元格的数据:  11
1-3列每个单元格的数据:  11
1-3列每个单元格的数据:  11
1-3列每个单元格的数据:  11
1-3列每个单元格的数据:  11
1-3列每个单元格的数据:  30
1-3列每个单元格的数据:  1023
1-3列每个单元格的数据:  89
1-3列每个单元格的数据:  8900
1-3列每个单元格的数据:  12
1-3列每个单元格的数据:  12
1-3列每个单元格的数据:  12
1-3列每个单元格的数据:  12
1-3列每个单元格的数据:  12
1-3列每个单元格的数据:  12
1-3列每个单元格的数据:  12
1-3列每个单元格的数据:  12
1-3列每个单元格的数据:  12

---------------------了解下工作表对象的其他数据和方法---------------------------------
工作表格的标题:  第一个sheet表单
工作表格的可见状态:  visible
表格中含有数据的部分的大小: A1:J13
工作表格相关属性: <openpyxl.worksheet.properties.WorksheetProperties object>
Parameters:
codeName=None, enableFormatConditionsCalculation=None, filterMode=None, published=None, syncHorizontal=None, syncRef=None, syncVertical=None, transitionEvaluation=None, transitionEntry=None, tabColor=None, outlinePr=<openpyxl.worksheet.properties.Outline object>
Parameters:
applyStyles=None, summaryBelow=True, summaryRight=True, showOutlineSymbols=None, pageSetUpPr=<openpyxl.worksheet.properties.PageSetupProperties object>
Parameters:
autoPageBreaks=None, fitToPage=None

设置选项卡标签处的背景色
活动单元格:  A1
选中的单元格:  A1
----------------------获取第一列列的1,2,3单元格的值------------------
A1数据: 10
A2数据: 老杨
A3数据: 李广
----------------------获取第二列的1,2,3单元格的值------------------
B1数据: 20
B2数据: 80
B3数据: 徐佳莹
----------------------获取第三列的1,2,3单元格的值------------------
C1数据: <Cell '第一个sheet表单'.C1>
C2数据: <Cell '第一个sheet表单'.C2>
C3数据: <Cell '第一个sheet表单'.C3>
--------------------------变量某个区域块的数据--------------------
data:  [[10, 20, 30], ['老杨', 80, 1023], ['李广', '徐佳莹', '89']]

 第 1 行数据:  [10, 20, 30]
 第 2 行数据:  ['老杨', 80, 1023]
 第 3 行数据:  ['李广', '徐佳莹', '89']

释放资源

Process finished with exit code 0
 

四: 单元格对象操作:数据插入|设置背景|字体|颜色|插入图片 


  1. import os
  2. import pathlib
  3. from openpyxl import Workbook
  4. from openpyxl.drawing.image import Image
  5. from openpyxl.styles import Font, Side, Border
  6. from openpyxl.styles import PatternFill, GradientFill
  7. '''
  8. Python操作Excel的单元格对象操作:
  9. 单元格取值,修改,设置背景,设置字体,合并单元格,设置边框等
  10. '''
  11. workbook = Workbook()
  12. print("使用Workbook对象相应方法操作工作表单")
  13. excelPath = os.getcwd()
  14. try:
  15. path = pathlib.Path(excelPath + "\\data\\test002.xlsx")
  16. if path.exists():
  17. # 创建工作表单
  18. sheet = workbook.active
  19. # 修改默认的标题
  20. sheet.title = '销售数据统计表'
  21. print("引用单元格的区域(C3:E8),并插入下面的data列表数据至指定的区域")
  22. print("""
  23. Font(
  24. name=字体名称,
  25. size=字体大小,
  26. bold=是否加粗,
  27. italic=是否斜体,
  28. color=字体颜色)
  29. """)
  30. font = Font(name="微软雅黑", size=12, bold=True, italic=True, color="11993333")
  31. cellArea = sheet['C3:K8']
  32. data = [
  33. ['张大伟', 90, 665, 10, 20, 30, 40, 30, 10],
  34. ['孙权', 56, 665, 11, 20, 30, 430, 30, 20],
  35. ['白珊珊', 78, 5765, 10, 22, 30, 49, 40, 40],
  36. ['唐云', 65, 56, 10, 20, 60, 40, 50, 40],
  37. ['李广', 77, 56, 10, 26, 30, 10, 30, 20],
  38. ['孙琦', 65, 567, 10, 20, 38, 40, 50, 20]
  39. ]
  40. # 二维类别的下标从0开始,i表示外层元素的索引,j表示内层元素的索引
  41. i = -1
  42. for row in cellArea: # 遍历一块二维一块数据区域
  43. i += 1
  44. j = -1
  45. for cell in row: # 遍历区域的每一行
  46. j += 1
  47. # 给单元格赋值
  48. cell.value = data[i][j]
  49. # 设置单元格字体
  50. cell.font = font
  51. print("合并单元格操作")
  52. sheet.merge_cells('A1:B6')
  53. sheet.merge_cells('C9:K11')
  54. sheet.merge_cells('A8:B11')
  55. print("撤销合并操作,但是数据不能恢复")
  56. sheet.unmerge_cells('A8:B11')
  57. print('---------------------------设置背景样式-----------------------------')
  58. print()
  59. print("""
  60. PatternFill(
  61. fill_type=填充样式,
  62. fgColor=填充颜色)
  63. """)
  64. print("----------------------------设置单元格-------------------------------")
  65. sheet['A1'].fill = PatternFill(fill_type="solid", start_color="00FF00")
  66. fill = PatternFill(fill_type="lightGray", fgColor="0000FF")
  67. print("---------------------设置第二列样式-----------------------------------")
  68. sheet.column_dimensions['B'].fill = fill
  69. print('-----------------------------------设置边框-------------------------------------')
  70. print("""
  71. Side(style=边线样式,color=边线颜色)
  72. style 参数的种类:
  73. 'double',
  74. 'mediumDashDotDot',
  75. 'slantDashDot',
  76. 'dashDotDot',
  77. 'dotted',
  78. 'hair',
  79. 'mediumDashed',
  80. 'dashed',
  81. 'dashDot',
  82. 'thin',
  83. 'mediumDashDot',
  84. 'medium',
  85. 'thick'
  86. Border(left=左边线样式,right=右边线样式,top=上边线样式,bottom=下边线样式)
  87. """)
  88. cell = sheet["C16"]
  89. side1 = Side(style="thin", color="FF00FF")
  90. side2 = Side(style="thick", color="FFFF1100")
  91. border = Border(left=side1, right=side1, top=side2, bottom=side2)
  92. cell.border = border
  93. print('---------------------------插入图片-----------------------')
  94. img_path = r"./images/白珊珊.png"
  95. img = Image(img_path)
  96. # 将图片添加到A1单元格
  97. sheet.add_image(img, "C9")
  98. # 提交表单,让修改生效
  99. workbook.save(path)
  100. else:
  101. with open(excelPath + "\\data\\test002.xlsx", 'w') as f:
  102. print("文件创建成功!")
  103. except FileNotFoundError as err:
  104. print("系统异常: ", err)
  105. finally:
  106. print()
  107. print("释放资源")
  108. workbook.close()

 

 
 

运行效果:



D:\program_file_worker\anaconda\python.exe D:\program_file_worker\python_source_work\SSO\grammar\file\excel\ExcelFileReadWriteByPyXlRelationRowColumns.py 
使用Workbook对象相应方法操作工作表单
引用单元格的区域(C3:E8),并插入下面的data列表数据至指定的区域

                     Font(
                       name=字体名称,
                       size=字体大小,
                       bold=是否加粗,
                       italic=是否斜体,
                       color=字体颜色)
                     
合并单元格操作
撤销合并操作,但是数据不能恢复
---------------------------设置背景样式-----------------------------


             PatternFill(
                fill_type=填充样式,
                fgColor=填充颜色)
        
----------------------------设置单元格-------------------------------
---------------------设置第二列样式-----------------------------------
-----------------------------------设置边框-------------------------------------

        Side(style=边线样式,color=边线颜色)
style 参数的种类: 
    'double', 
    'mediumDashDotDot', 
    'slantDashDot', 
    'dashDotDot',
    'dotted',
    'hair', 
    'mediumDashed', 
    'dashed', 
    'dashDot', 
    'thin', 
    'mediumDashDot',
    'medium', 
    'thick'
Border(left=左边线样式,right=右边线样式,top=上边线样式,bottom=下边线样式)
        
---------------------------插入图片-----------------------

释放资源

Process finished with exit code 0
 


忙着去耍帅,后期补充完整 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/444262
推荐阅读
相关标签
  

闽ICP备14008679号