• 第十七章 Excel操作


    目录

    一、安装openpyxl

    二、创建一个excel 文件,并写入不同类的内容

    三、创建一个sheet

    四、操作单元格 

    五、批量操作单元格 

    5.1 打印百分数或小数

    5.2 获取所有行对象

    5.3 获取所有列对象

    六、操作已存在的文件

    七、单元格类型

    八、使用公式 

    九、合并/拆分单元格 

    十、插入一个图片

    十一、隐藏单元格

    十二、画一个柱状图

    十三、画一个饼图

    ​十四、设定一个表格区域,并设定表格的样式

     十五、给单元格设定字体颜色

    十六、设定字体和大小 

    十七、设定行和列的字体 

    十八、设定单元格的边框、字体、颜色、大小和边框背景

    十九、常用的样式和属性设置

    二十、给某个范围设定样式


    一、安装openpyxl

    pip install openpyxl==3.0.10

    想要在文件中插入图片文件,需要安装pillow:

    py -3 -m pip install pillow

    二、创建一个excel 文件,并写入不同类的内容

    创建空excel文件,默认会有一个sheet

    1. from openpyxl import Workbook
    2. wb = Workbook()
    3. wb.save(r"F:\python_18_excel\test.xlsx")

     

    1. # -*- coding: utf-8 -*-
    2. import locale
    3. from openpyxl import Workbook
    4. wb = Workbook() #创建文件对象
    5. # grab the active worksheet
    6. ws = wb.active #获取第一个sheet
    7. # Data can be assigned directly to cells
    8. ws['A1'] = 42 #写入数字
    9. ws['B1'] = "光荣之路"+"automation test" #写入中文
    10. # Rows can also be appended
    11. ws.append([1, 2, 3]) #写入多个单元格
    12. import datetime
    13. import time
    14. import locale
    15. ws['A3'] = datetime.datetime.now() #写入一个当前时间
    16. #写入一个自定义的时间格式
    17. locale.setlocale(locale.LC_ALL,'en')
    18. locale.setlocale(locale.LC_CTYPE, 'chinese')
    19. ws['A4'] =time.strftime("%Y年%m月%d日 %H时%M分%S秒",time.localtime())
    20. # Save the file
    21. wb.save(r"F:\python_18_excel\sample.xlsx")

    三、创建一个sheet

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import Workbook
    3. wb = Workbook()
    4. ws = wb.create_sheet("Mysheet1") #创建一个sheet,名字:Mysheet1
    5. ws1 = wb.create_sheet("Mysheet") #创建一个sheet名字:Mysheet
    6. ws1.title = "New Title" #Mysheet改名字为New Title
    7. ws2 = wb.create_sheet("Mysheet", 0) #设定sheet的插入位置
    8. ws2.title = "光荣之路自动化测试培训" #设定一个sheet的名字
    9. ws1.sheet_properties.tabColor = "1072BA" #设定sheet的标签的背景颜色
    10. #获取某个sheet对象
    11. print(wb["光荣之路自动化测试培训"])
    12. print(wb["New Title" ])
    13. #获取全部sheet 的名字,遍历sheet名字
    14. print(wb.sheetnames)
    15. for sheet_name in wb.sheetnames:
    16. print(sheet_name)
    17. print ("*"*50)
    18. #遍历获取sheet对象,按照sheet顺序获取
    19. for sheet in wb:
    20. print(sheet)
    21. for sheet in wb:
    22. print(sheet.title)
    23. wb["New Title"]["A1"]="gloryroad"
    24. source = wb["New Title"]
    25. target = wb.copy_worksheet(source) #复制一个sheet
    26. #删除某个sheet
    27. del wb["New Title" ]
    28. # Save the file
    29. wb.save(r"F:\python_18_excel\sample2.xlsx")

     

    四、操作单元格 

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import Workbook
    3. wb = Workbook()
    4. ws1 = wb.create_sheet("Mysheet") #创建一个sheet
    5. ws1["A1"]=123.11
    6. ws1["B2"]="光荣之路"
    7. d = ws1.cell(row=4, column=2, value=10)
    8. print(ws1["A1"].value)
    9. print(ws1["B2"].value)
    10. print(d.value)
    11. print(ws1.cell(row=4,column=2).value) #行号和列号从1开始
    12. # Save the file
    13. wb.save(r"F:\python_18_excel\sample3.xlsx")

     

    五、批量操作单元格 

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import Workbook
    3. wb = Workbook()
    4. ws1 = wb.create_sheet("Mysheet") #创建一个sheet
    5. ws1["A1"]=1
    6. ws1["A2"]=2
    7. ws1["A3"]=3
    8. # ws1["A6"]=100
    9. ws1["B1"]=4
    10. ws1["B2"]=5
    11. ws1["B3"]=6
    12. ws1["C1"]=7
    13. ws1["C2"]=8
    14. ws1["C3"]=9
    15. #操作单列
    16. print(ws1["A"])
    17. for cell in ws1["A"]:
    18. print(cell.value)
    19. #操作多列,获取每一个值
    20. print(ws1["A:C"])
    21. for column in ws1["A:C"]:
    22. for cell in column:
    23. print(cell.value)
    24. #操作多行
    25. row_range = ws1[1:3]
    26. print(row_range)
    27. for row in row_range:
    28. for cell in row:
    29. print(cell.value)
    30. print("*"*50)
    31. for row in ws1.iter_rows(min_row=1, min_col=1, max_col=3, max_row=3):
    32. for cell in row:
    33. print(cell.value)
    34. #获取所有行
    35. print(ws1.rows)
    36. for row in ws1.rows:
    37. print(row)
    38. print("*"*50)
    39. #获取所有列
    40. print(ws1.columns)
    41. for col in ws1.columns:
    42. print(col)
    43. print(ws1.max_row,ws1.max_column)
    44. print(ws1.min_row,ws1.min_column)
    45. # Save the file
    46. wb.save(r"F:\python_18_excel\sample4.xlsx")
    1. ('Mysheet'.A1>, 'Mysheet'.A2>, 'Mysheet'.A3>)
    2. 1
    3. 2
    4. 3
    5. (('Mysheet'.A1>, 'Mysheet'.A2>, 'Mysheet'.A3>), ('Mysheet'.B1>, 'Mysheet'.B2>, 'Mysheet'.B3>), ('Mysheet'.C1>, 'Mysheet'.C2>, 'Mysheet'.C3>))
    6. 1
    7. 2
    8. 3
    9. 4
    10. 5
    11. 6
    12. 7
    13. 8
    14. 9
    15. (('Mysheet'.A1>, 'Mysheet'.B1>, 'Mysheet'.C1>), ('Mysheet'.A2>, 'Mysheet'.B2>, 'Mysheet'.C2>), ('Mysheet'.A3>, 'Mysheet'.B3>, 'Mysheet'.C3>))
    16. 1
    17. 4
    18. 7
    19. 2
    20. 5
    21. 8
    22. 3
    23. 6
    24. 9
    25. **************************************************
    26. 1
    27. 4
    28. 7
    29. 2
    30. 5
    31. 8
    32. 3
    33. 6
    34. 9
    35. object Worksheet._cells_by_row at 0x00000220039C6570>
    36. ('Mysheet'.A1>, 'Mysheet'.B1>, 'Mysheet'.C1>)
    37. ('Mysheet'.A2>, 'Mysheet'.B2>, 'Mysheet'.C2>)
    38. ('Mysheet'.A3>, 'Mysheet'.B3>, 'Mysheet'.C3>)
    39. **************************************************
    40. object Worksheet._cells_by_col at 0x00000220039C6570>
    41. ('Mysheet'.A1>, 'Mysheet'.A2>, 'Mysheet'.A3>)
    42. ('Mysheet'.B1>, 'Mysheet'.B2>, 'Mysheet'.B3>)
    43. ('Mysheet'.C1>, 'Mysheet'.C2>, 'Mysheet'.C3>)
    44. 3 3
    45. 1 1

     

     

    5.1 打印百分数或小数

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import Workbook
    3. from openpyxl import load_workbook
    4. wb = load_workbook(r"F:\python_18_excel\sample4.xlsx") #从现有的文件中读取内容,不会删除原有内容
    5. wb.guess_types = True #猜测单元格类型,True时将单元格的百分数显示为小数;False时将单元格显示为百分数
    6. ws=wb.active
    7. ws["D1"]="12%"
    8. print(type(ws["D1"].value))
    9. print(ws["D1"].value)
    10. ws["D3"]=12
    11. print(type(ws["D3"].value))
    12. print(ws["D3"].value)
    13. ws["D4"]=3.14
    14. print(type(ws["D4"].value))
    15. print(ws["D4"].value)
    16. ws["D5"]="test"
    17. print(type(ws["D5"].value))
    18. print(ws["D5"].value)
    19. # Save the file
    20. wb.save(r"F:\python_18_excel\sample4.xlsx")

    但我不管设置 wb.guess_types = True orwb.guess_types = False时,print(ws["D1"].value)输出结果都是12%。不知道为什么?

     

    5.2 获取所有行对象

    1. #coding=utf-8
    2. from openpyxl import Workbook
    3. from openpyxl import load_workbook
    4. wb = load_workbook(r"F:\python_18_excel\sample6.xlsx")
    5. ws=wb.active #获取默认的sheet进行操作
    6. rows=[] #存储行对象
    7. for row in ws.iter_rows():#遍历所有行对象
    8. rows.append(row)
    9. print(rows) #所有行
    10. print(rows[0]) #获取第一行
    11. print(rows[0][0]) #获取第一行第一列的单元格对象
    12. print(rows[0][0].value) #获取第一行第一列的单元格对象的值
    13. print(rows[len(rows)-1]) #获取最后行
    14. print(rows[len(rows)-1][len(rows[0])-1]) #获取第后一行和最后一列的单元格对象
    15. print(rows[len(rows)-1][len(rows[0])-1].value) #获取第后一行和最后一列的单元格对象的值
    16. print(rows[-1]) #获取最后行
    17. print(rows[-1][len(rows[-1])-1]) #获取第后一行和最后一列的单元格对象
    18. print(rows[-1][len(rows[-1])-1].value) #获取第后一行和最后一列的单元格对象的值

     

    1. [('Sheet'.A1>, 'Sheet'.B1>, 'Sheet'.C1>, 'Sheet'.D1>, 'Sheet'.E1>), ('Sheet'.A2>, 'Sheet'.B2>, 'Sheet'.C2>, 'Sheet'.D2>, 'Sheet'.E2>), ('Sheet'.A3>, 'Sheet'.B3>, 'Sheet'.C3>, 'Sheet'.D3>, 'Sheet'.E3>)]
    2. ('Sheet'.A1>, 'Sheet'.B1>, 'Sheet'.C1>, 'Sheet'.D1>, 'Sheet'.E1>)
    3. 'Sheet'.A1>
    4. 1
    5. ('Sheet'.A3>, 'Sheet'.B3>, 'Sheet'.C3>, 'Sheet'.D3>, 'Sheet'.E3>)
    6. 'Sheet'.E3>
    7. 10
    8. ('Sheet'.A3>, 'Sheet'.B3>, 'Sheet'.C3>, 'Sheet'.D3>, 'Sheet'.E3>)
    9. 'Sheet'.E3>
    10. 10

    5.3 获取所有列对象

    1. #coding=utf-8
    2. from openpyxl import Workbook
    3. from openpyxl import load_workbook
    4. wb = load_workbook(r"F:\python_18_excel\sample6.xlsx")
    5. ws=wb.active
    6. cols=[]
    7. cols = []
    8. for col in ws.iter_cols():
    9. cols.append(col)
    10. print(cols) #所有列
    11. print(cols[0]) #获取第一列
    12. print(cols[0][0]) #获取第一列的第一行的单元格对象
    13. print(cols[0][0].value) #获取第一列的第一行的值
    14. print("*"*30)
    15. print(cols[len(cols)-1]) #获取最后一列
    16. print(cols[len(cols)-1][len(cols[0])-1]) #获取最后一列的最后一行的单元格对象
    17. print(cols[len(cols)-1][len(cols[0])-1].value) #获取最后一列的最后一行的单元格对象的值
    1. [('Sheet'.A1>, 'Sheet'.A2>, 'Sheet'.A3>), ('Sheet'.B1>, 'Sheet'.B2>, 'Sheet'.B3>), ('Sheet'.C1>, 'Sheet'.C2>, 'Sheet'.C3>), ('Sheet'.D1>, 'Sheet'.D2>, 'Sheet'.D3>), ('Sheet'.E1>, 'Sheet'.E2>, 'Sheet'.E3>)]
    2. ('Sheet'.A1>, 'Sheet'.A2>, 'Sheet'.A3>)
    3. 'Sheet'.A1>
    4. 1
    5. ******************************
    6. ('Sheet'.E1>, 'Sheet'.E2>, 'Sheet'.E3>)
    7. 'Sheet'.E3>
    8. 10

    六、操作已存在的文件

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import Workbook
    3. from openpyxl import load_workbook
    4. wb = load_workbook(r"F:\python_18_excel\sample6.xlsx")
    5. wb.guess_types = True #猜测格式类型
    6. ws=wb.active
    7. ws["D1"]="12%"
    8. print (ws["D1"].value)
    9. # Save the file
    10. wb.save("e:\\sample.xlsx")
    11. #注意如果原文件有一些图片或者图标,则保存的时候可能会导致图片丢失

    七、单元格类型

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import Workbook
    3. from openpyxl import load_workbook
    4. import datetime
    5. wb = load_workbook(r"F:\python_18_excel\test.xlsx")
    6. ws=wb.active
    7. wb.guess_types = True
    8. ws["A1"]=datetime.datetime(2010, 7, 21)
    9. print(ws["A1"].number_format)
    10. ws["A2"]="12%"
    11. print(ws["A2"].number_format)
    12. ws["A3"]= 1.1
    13. print(ws["A3"].number_format)
    14. ws["A4"]= "中国"
    15. print(ws["A4"].number_format)
    16. # Save the file
    17. wb.save(r"F:\python_18_excel\test.xlsx")

    八、使用公式 

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import Workbook
    3. from openpyxl import load_workbook
    4. wb = load_workbook(r"F:\python_18_excel\test.xlsx")
    5. ws1=wb.active
    6. ws1["A1"]=1
    7. ws1["A2"]=2
    8. ws1["A3"]=3
    9. ws1["A4"] = "=SUM(1, 1)"
    10. ws1["A5"] = "=SUM(A1:A3)"
    11. print (ws1["A4"].value) #打印的是公式内容,不是公式计算后的值,程序无法取到计算后的值
    12. print (ws1["A5"].value) #打印的是公式内容,不是公式计算后的值,程序无法取到计算后的值
    13. # Save the file
    14. wb.save(r"F:\python_18_excel\test.xlsx")

     

    九、合并/拆分单元格 

    1. from openpyxl import Workbook
    2. from openpyxl import load_workbook
    3. wb = load_workbook(r"F:\python_18_excel\a.xlsx")
    4. ws1=wb.active
    5. from openpyxl.workbook import Workbook
    6. wb = Workbook()
    7. ws = wb.active
    8. ws.merge_cells('A5:D5') #合并单元格
    9. ws.unmerge_cells('A5:D5') #拆分单元格
    10. # or equivalently
    11. ws.merge_cells(start_row=6,start_column=1,end_row=6,end_column=4)
    12. ws.unmerge_cells(start_row=6,start_column=1,end_row=2,end_column=4)
    13. # Save the file
    14. wb.save(r"F:\python_18_excel\a.xlsx")

    十、插入一个图片

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import load_workbook
    3. from openpyxl.drawing.image import Image
    4. wb = load_workbook(r"F:\python_18_excel\a.xlsx")
    5. ws1=wb.active
    6. img = Image(r"F:\python_18_excel\1.jpg")
    7. ws1.add_image(img, 'A1')
    8. # Save the file
    9. wb.save(r"F:\python_18_excel\a.xlsx")

    十一、隐藏单元格

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import load_workbook
    3. from openpyxl.drawing.image import Image
    4. wb = load_workbook(r"F:\python_18_excel\a.xlsx")
    5. ws1=wb.active
    6. ws1.column_dimensions.group('A', 'D', hidden=True) #隐藏a到d列范围内的列
    7. # Save the file
    8. wb.save(r"F:\python_18_excel\a.xlsx")

    十二、画一个柱状图

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import load_workbook
    3. from openpyxl import Workbook
    4. from openpyxl.chart import BarChart, Reference, Series
    5. wb = load_workbook(r"F:\python_18_excel\a.xlsx")
    6. ws1=wb.active
    7. wb = Workbook()
    8. ws = wb.active
    9. for i in range(10):
    10. ws.append([i])
    11. values = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10)
    12. chart = BarChart()
    13. chart.title = "Bar Chart"
    14. chart.y_axis.title = 'SN'
    15. chart.x_axis.title = 'Sample value'
    16. chart.add_data(values)
    17. ws.add_chart(chart, "E15")
    18. # Save the file
    19. wb.save(r"F:\python_18_excel\a.xlsx")

    十三、画一个饼图

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import load_workbook
    3. from openpyxl import Workbook
    4. from openpyxl.chart import (
    5. PieChart,
    6. ProjectedPieChart,
    7. Reference
    8. )
    9. from openpyxl.chart.series import DataPoint
    10. #5行数据
    11. data = [
    12. ['Pie', 'Sold'],
    13. ['Apple', 50],
    14. ['Cherry', 30],
    15. ['Pumpkin', 10],
    16. ['Chocolate', 40],
    17. ]
    18. wb = Workbook()
    19. ws = wb.active
    20. for row in data:#把5行的数据加入到excel的sheet中
    21. ws.append(row)
    22. pie = PieChart()
    23. labels = Reference(ws, min_col=1, min_row=2, max_row=5)
    24. data = Reference(ws, min_col=2, min_row=1, max_row=5)
    25. pie.add_data(data, titles_from_data=True)
    26. pie.set_categories(labels)
    27. pie.title = "Pies sold by category"
    28. # Cut the first slice out of the pie
    29. slice = DataPoint(idx=0, explosion=20)#idx表示让第几行突出,explosion=0则不突出
    30. pie.series[0].data_points = [slice]
    31. ws.add_chart(pie, "D1")
    32. # 映射图
    33. ws = wb.create_sheet(title="Projection")
    34. data = [
    35. ['Page', 'Views'],
    36. ['Search', 95],
    37. ['Products', 4],
    38. ['Offers', 0.5],
    39. ['Sales', 0.5],
    40. ]
    41. for row in data:
    42. ws.append(row)
    43. projected_pie = ProjectedPieChart()
    44. projected_pie.type = "pie"
    45. projected_pie.splitType = "val" # split by value
    46. labels = Reference(ws, min_col=1, min_row=2, max_row=5)
    47. data = Reference(ws, min_col=2, min_row=1, max_row=5)
    48. projected_pie.add_data(data, titles_from_data=True)
    49. projected_pie.set_categories(labels)
    50. ws.add_chart(projected_pie, "A10")
    51. from copy import deepcopy
    52. projected_bar = deepcopy(projected_pie)
    53. projected_bar.type = "bar"
    54. projected_bar.splitType = 'pos' # split by position
    55. ws.add_chart(projected_bar, "A27")
    56. # Save the file
    57. wb.save(r"F:\python_18_excel\a.xlsx")

    映射图: 

     explosion=0时:

     十四、设定一个表格区域,并设定表格的样式

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import load_workbook
    3. from openpyxl import Workbook
    4. from openpyxl.worksheet.table import Table, TableStyleInfo
    5. wb = Workbook()
    6. ws = wb.active
    7. data = [
    8. ['Apples', 10000, 5000, 8000, 6000],
    9. ['Pears', 2000, 3000, 4000, 5000],
    10. ['Bananas', 6000, 6000, 6500, 6000],
    11. ['Oranges', 500, 300, 200, 700],
    12. ]
    13. # add column headings. NB. these must be strings
    14. ws.append(["Fruit", "2011", "2012", "2013", "2014"])
    15. for row in data:
    16. ws.append(row)
    17. tab = Table(displayName="Table1", ref="A1:E5")
    18. # Add a default style with striped rows and banded columns
    19. style = TableStyleInfo(name="TableStyleMedium9", showFirstColumn=True,showLastColumn=True, showRowStripes=True, showColumnStripes=True)
    20. tab.tableStyleInfo = style
    21. ws.add_table(tab)
    22. # Save the file
    23. wb.save(r"F:\python_18_excel\a.xlsx")

     十五、给单元格设定字体颜色

    1. from openpyxl import Workbook
    2. from openpyxl.styles import colors
    3. from openpyxl.styles import Font
    4. wb = Workbook()
    5. ws = wb.active
    6. a1 = ws['A1']
    7. d4 = ws['D4']
    8. ft = Font(color='FFBB00') # color="FFBB00",颜色编码也可以设定颜色
    9. a1.font = ft
    10. d4.font = ft
    11. a1.font = Font(name="楷体",color=colors.BLUE,size=50,bold=True,underline="single",family=14) # the change only affects A1# the change only affects A1
    12. a1.value = "abc"
    13. #给某一个区域设置字体的格式:
    14. for i in range(1,4):
    15. for j in range(1,4):
    16. ws.cell(row=i, column=j).font = Font(name="楷体",color=colors.BLUE,size=50,bold=True,underline="single",family=1)
    17. # Save the file
    18. wb.save(r"F:\python_18_excel\a.xlsx")

    十六、设定字体和大小 

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import Workbook
    3. from openpyxl.styles import colors
    4. from openpyxl.styles import Font
    5. wb = Workbook()
    6. ws = wb.active
    7. a1 = ws['A1']
    8. d4 = ws['D4']
    9. a1.value = "abc"
    10. d4.value = 123
    11. from openpyxl.styles import Font
    12. from copy import copy
    13. ft1 = Font(name='宋体', size=14)
    14. ft2 = copy(ft1) #复制字体对象
    15. ft2.name = "Tahoma"
    16. print (ft1.name)
    17. print (ft2.name)
    18. print (ft2.size)
    19. a1.font = ft1
    20. d4.font = ft2
    21. # Save the file
    22. wb.save(r"F:\python_18_excel\a.xlsx")

     

     

    十七、设定行和列的字体 

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import Workbook
    3. from openpyxl.styles import Font
    4. wb = Workbook()
    5. ws = wb.active
    6. col = ws.column_dimensions['A']
    7. col.font = Font(bold=True) #将A列设定为粗体
    8. row = ws.row_dimensions[1]
    9. row.font = Font(underline="single") #将第一行设定为下划线格式
    10. col.width=10 #设定A列的宽度为10,否则A列会被隐藏
    11. # Save the file
    12. wb.save(r"F:\python_18_excel\a.xlsx")

     

    十八、设定单元格的边框、字体、颜色、大小和边框背景

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import Workbook
    3. from openpyxl.styles import Font
    4. from openpyxl.styles import NamedStyle, Font, Border, Side,PatternFill
    5. wb = Workbook()
    6. ws = wb.active
    7. highlight1 = NamedStyle(name="highlight")
    8. highlight1.font = Font(bold=True, size=20,color= "ff0100")
    9. highlight1.fill = PatternFill("solid", fgColor="DDDDDD")
    10. bd = Side(style='thick', color="000000")
    11. highlight1.border = Border(left=bd, top=bd, right=bd, bottom=bd)
    12. #print (dir(ws["A1"]))
    13. ws["A1"].value="我们"
    14. ws["A1"].style =highlight1
    15. # Save the file
    16. wb.save(r"F:\python_18_excel\a.xlsx")

    十九、常用的样式和属性设置

    1. # -*- coding: utf-8 -*-
    2. from openpyxl import Workbook
    3. from openpyxl.styles import Font
    4. from openpyxl.styles import NamedStyle, Font, Border, Side,PatternFill
    5. from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font
    6. wb = Workbook()
    7. ws = wb.active
    8. ft = Font(name=u'微软雅黑',
    9. size=11,
    10. bold=False,
    11. italic=False,
    12. vertAlign=None,
    13. underline='none',
    14. strike=False,
    15. color='FF000000')
    16. fill = PatternFill(fill_type="solid",
    17. start_color='FFEEFFFF',
    18. end_color='FF001100')
    19. #边框可以选择的值为:'hair', 'medium', 'dashDot', 'dotted', 'mediumDashDot', 'dashed', 'mediumDashed', 'mediumDashDotDot', 'dashDotDot', 'slantDashDot', 'double', 'thick', 'thin']
    20. #diagonal 表示对角线
    21. bd = Border(left=Side(border_style="thin",
    22. color='FF001000'),
    23. right=Side(border_style="thin",
    24. color='FF110000'),
    25. top=Side(border_style="thin",
    26. color='FF110000'),
    27. bottom=Side(border_style="thin",
    28. color='FF110000'),
    29. diagonal=Side(border_style=None,
    30. color='FF000000'),
    31. diagonal_direction=0,
    32. outline=Side(border_style=None,
    33. color='FF000000'),
    34. vertical=Side(border_style=None,
    35. color='FF000000'),
    36. horizontal=Side(border_style=None,
    37. color='FF110000')
    38. )
    39. alignment=Alignment(horizontal='general',
    40. vertical='bottom',
    41. text_rotation=0,
    42. wrap_text=False,
    43. shrink_to_fit=False,
    44. indent=0)
    45. number_format = 'General'
    46. protection = Protection(locked=True,
    47. hidden=False)
    48. ws["B5"].font = ft
    49. ws["B5"].fill =fill
    50. ws["B5"].border = bd
    51. ws["B5"].alignment = alignment
    52. ws["B5"].number_format = number_format
    53. ws["B5"].value ="glory road"
    54. # Save the file
    55. wb.save(r"F:\python_18_excel\a.xlsx")

     

    二十、给某个范围设定样式

    示例1:给合并后的单元格添加样式

    1. from openpyxl.styles import Border,Side,PatternFill,Font,GradientFill,Alignment
    2. from openpyxl.styles import Font, Border, Side,PatternFill
    3. from openpyxl import Workbook
    4. def style_range(ws,cell_range,border=Border(),fill=None,font=None,alignment=None):
    5. """
    6. App styles to a range of cells as if they were a single cell.
    7. :param ws:
    8. :param cell_range:
    9. :param border:
    10. :param fill:
    11. :param font:
    12. :param alignment:
    13. :return:
    14. """
    15. top = Border(top=border.top)
    16. left = Border(left=border.left)
    17. right = Border(right=border.right)
    18. bottom = Border(bottom=border.bottom)
    19. first_cell = ws[cell_range.split(":")[0]]
    20. if alignment:
    21. ws.merge_cells(cell_range)
    22. first_cell.alignment = alignment
    23. rows = ws[cell_range]
    24. if font:
    25. first_cell.font = font
    26. for cell in rows[0]:
    27. cell.border = cell.border + top
    28. for cell in rows[-1]:
    29. cell.border = cell.border + bottom
    30. for row in rows:
    31. L = row[0]
    32. r = row[-1]
    33. L.border = L.border + left
    34. r.border = r.border + right
    35. if fill:
    36. for c in row:
    37. c.fill = fill
    38. wb = Workbook()
    39. ws = wb.active
    40. my_cell = ws['B2']
    41. my_cell.value = "My Cell"
    42. thin = Side(border_style="thin",color = "000000")
    43. double = Side(border_style="double",color="ff0000")
    44. border = Border(top=double,left=thin,right=thin,bottom=double)
    45. fill = PatternFill("solid",fgColor="DDDDDD")
    46. fill = GradientFill(stop=("000000","FFFFFF"))
    47. font = Font(b=True,color="FF0000")
    48. al = Alignment(horizontal="center",vertical="center")
    49. style_range(ws,'B2:F4',border=border,fill=fill,font=font,alignment=al)
    50. wb.save(r"F:\LiFuChe\光荣之路\课堂编码练习\python_18_excel\a.xlsx")

     

    示例2:给每个单元格设定相同的样式

    1. from openpyxl.styles import Border,Side,PatternFill,Font,GradientFill,Alignment
    2. from openpyxl.styles import Font, Border, Side,PatternFill
    3. from openpyxl import Workbook
    4. def style_range(ws,cell_range,border=Border(),fill=None,font=None,alignment=None):
    5. """
    6. App styles to a range of cells as if they were a single cell.
    7. :param ws:
    8. :param cell_range:
    9. :param border:
    10. :param fill:
    11. :param font:
    12. :param alignment:
    13. :return:
    14. """
    15. top = Border(top=border.top)
    16. left = Border(left=border.left)
    17. right = Border(right=border.right)
    18. bottom = Border(bottom=border.bottom)
    19. first_cell = ws[cell_range.split(":")[0]]#"A1:D4",获取指定范围中的第一个单元格
    20. rows = ws[cell_range]#取到指定单元格的范围,是一个元组
    21. if font:#是否传入了font参数,如有,用你传入的字体样式
    22. first_cell.font = font
    23. for row in rows:
    24. for cell in row:
    25. cell.border = cell.border + top + bottom + right + left
    26. cell.fill = fill
    27. cell.font = font
    28. cell.alignment = alignment#对齐方式
    29. wb = Workbook()
    30. ws = wb.active
    31. my_cell = ws['B2']
    32. my_cell.value = "My Cell"
    33. thin = Side(border_style="thin",color = "000000")
    34. double = Side(border_style="double",color="ff0000")
    35. border = Border(top=double,left=thin,right=thin,bottom=double)
    36. fill = PatternFill("solid",fgColor="DDDDDD")#设置渐变填充样式
    37. #fill = GradientFill(stop=("000000","FFFFFF"))
    38. font = Font(b=True,color="FF0000")
    39. al = Alignment(horizontal="center",vertical="center")
    40. style_range(ws,'B2:F4',border=border,fill=fill,font=font,alignment=al)
    41. wb.save(r"F:\python_18_excel\a.xlsx")

     

     

  • 相关阅读:
    Jira Bug管理工具的操作步骤 提Bug的流程
    swagger简介
    【Linux】线程池
    Xilinx FPGA 7系列 GTX/GTH Transceivers (2)--IBERT
    人工智能技术概述_3.机器学习
    vue实现单页面仿照购物车案例——基于mint-ui和vue2.0
    【数据结构】&&【C++】封装哈希表模拟实现unordered_map和unordered_set容器
    36.Python实现马尔科夫链
    如果通过Java来完成大数据开发,需要学习哪些内容
    OpenTCS客户端开发之Web客户端(一)
  • 原文地址:https://blog.csdn.net/qq_22895113/article/details/126106158