Python模塊學習 - openpyxl


openpyxl模塊介紹

  openpyxl模塊是一個讀寫Excel 2010文檔的Python庫,如果要處理更早格式的Excel文檔,需要用到額外的庫,openpyxl是一個比較綜合的工具,能夠同時讀取和修改Excel文檔。其他很多的與Excel相關的項目基本只支持讀或者寫Excel一種功能。

安裝openpyxl模塊

  openpyxl是一個開源項目,這里使用如下命令安裝openpyxl模塊

pip3 install openpyxl

openpyxl基本用法

  想要操作Excel首先要了解Excel 基本概念,Excel中列以字幕命名,行以數字命名,比如左上角第一個單元格的坐標為A1,下面的為A2,右邊的B1。

  openpyxl中有三個不同層次的類,Workbook是對工作簿的抽象,Worksheet是對表格的抽象,Cell是對單元格的抽象,每一個類都包含了許多屬性和方法。

操作Excel的一般場景:

  1. 打開或者創建一個Excel需要創建一個Workbook對象
  2. 獲取一個表則需要先創建一個Workbook對象,然后使用該對象的方法來得到一個Worksheet對象
  3. 如果要獲取表中的數據,那么得到Worksheet對象以后再從中獲取代表單元格的Cell對象

Workbook對象

  一個Workbook對象代表一個Excel文檔,因此在操作Excel之前,都應該先創建一個Workbook對象。對於創建一個新的Excel文檔,直接進行Workbook類的調用即可,對於一個已經存在的Excel文檔,可以使用openpyxl模塊的load_workbook函數進行讀取,該函數包涵多個參數,但只有filename參數為必傳參數。filename 是一個文件名,也可以是一個打開的文件對象。

>>> import openpyxl
>>> excel = openpyxl.Workbook(‘hello.xlxs‘)
>>> excel1 = openpyxl.load_workbook(‘abc.xlsx‘)
>>> 

PS:Workbook和load_workbook相同,返回的都是一個Workbook對象。

  Workbook對象提供了很多屬性和方法,其中,大部分方法都與sheet有關,部分屬性如下:

  • active:獲取當前活躍的Worksheet
  • worksheets:以列表的形式返回所有的Worksheet(表格)
  • read_only:判斷是否以read_only模式打開Excel文檔
  • encoding:獲取文檔的字符集編碼
  • properties:獲取文檔的元數據,如標題,創建者,創建日期等
  • sheetnames:獲取工作簿中的表(列表)
>>> import openpyxl
>>> excel2 = openpyxl.load_workbook(‘abc.xlsx‘)
>>> excel2.active
<Worksheet "abc">
>>> excel.read_only
False
>>> excel2.worksheets
[<Worksheet "abc">, <Worksheet "def">]
>>> excel2.properties
<openpyxl.packaging.core.DocumentProperties object>
Parameters:
creator=‘openpyxl‘, title=None, description=None, subject=None, identifier=None, language=None, created=datetime.datetime(2006, 9, 16, 0, 0), modified=datetime.datetime(2018, 2, 5, 7, 25, 18), lastModifiedBy=‘Are you SuperMan‘, category=None, contentStatus=None, version=None, revision=None, keywords=None, lastPrinted=None
>>> excel2.encoding
‘utf-8‘
>>> 

  Workbook提供的方法如下:

  • get_sheet_names:獲取所有表格的名稱(新版已經不建議使用,通過Workbook的sheetnames屬性即可獲取)
  • get_sheet_by_name:通過表格名稱獲取Worksheet對象(新版也不建議使用,通過Worksheet[‘表名‘]獲取)
  • get_active_sheet:獲取活躍的表格(新版建議通過active屬性獲取)
  • remove_sheet:刪除一個表格
  • create_sheet:創建一個空的表格
  • copy_worksheet:在Workbook內拷貝表格
>>> excel2.get_sheet_names()

Warning (from warnings module):
  File "__main__", line 1
DeprecationWarning: Call to deprecated function get_sheet_names (Use wb.sheetnames).
[‘abc‘, ‘def‘]
>>> excel2.sheetnames
[‘abc‘, ‘def‘]
>>> excel2.get_sheet_by_name(‘def‘)

Warning (from warnings module):
  File "__main__", line 1
DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]).
<Worksheet "def">
>>> excel2[‘def‘]
<Worksheet "def">
>>> excel2.get_active_sheet()

Warning (from warnings module):
  File "__main__", line 1
DeprecationWarning: Call to deprecated function get_active_sheet (Use the .active property).
<Worksheet "abc">
>>> excel2.create_sheet(‘ghk‘)
<Worksheet "ghk">

Worksheet對象

  有了Worksheet對象以后,我們可以通過這個Worksheet對象獲取表格的屬性,得到單元格中的數據,修改表格中的內容。openpyxl提供了非常靈活的方式來訪問表格中的單元格和數據,常用的Worksheet屬性如下:

  • title:表格的標題
  • dimensions:表格的大小,這里的大小是指含有數據的表格的大小,即:左上角的坐標:右下角的坐標
  • max_row:表格的最大行
  • min_row:表格的最小行
  • max_column:表格的最大列
  • min_column:表格的最小列
  • rows:按行獲取單元格(Cell對象) - 生成器
  • columns:按列獲取單元格(Cell對象) - 生成器
  • freeze_panes:凍結窗格
  • values:按行獲取表格的內容(數據)  - 生成器

PS:freeze_panes,參數比較特別,主要用於在表格較大時凍結頂部的行或左邊的行。對於凍結的行,在用戶滾動時,是始終可見的,可以設置為一個Cell對象或一個端元個坐標的字符串,單元格上面的行和左邊的列將會凍結(單元格所在的行和列不會被凍結)。例如我們要凍結第一行那么設置A2為freeze_panes,如果要凍結第一列,freeze_panes取值為B1,如果要同時凍結第一行和第一列,那么需要設置B2為freeze_panes,freeze_panes值為none時 表示 不凍結任何列。

  常用的Worksheet方法如下:

  • iter_rows:按行獲取所有單元格,內置屬性有(min_row,max_row,min_col,max_col)
  • iter_columns:按列獲取所有的單元格
  • append:在表格末尾添加數據
  • merged_cells:合並多個單元格
  • unmerged_cells:移除合並的單元格
>>> for row in excel2[‘金融‘].iter_rows(min_row=2,max_row=4,min_col=2,max_col=4):
	print(row)

(<Cell ‘abc‘.B2>, <Cell ‘abc‘.C2>, <Cell ‘abc‘.D2>)
(<Cell ‘abc‘.B3>, <Cell ‘abc‘.C3>, <Cell ‘abc‘.D3>)
(<Cell ‘abc‘.B4>, <Cell ‘abc‘.C4>, <Cell ‘abc‘.D4>)

PS:從Worksheet對象的屬性和方法可以看到,大部分都是返回的是一個Cell對象,一個Cell對象代表一個單元格,我們可以使用Excel坐標的方式來獲取Cell對象,也可以使用Worksheet的cell方法獲取Cell對象。

>>> excel2[‘abc‘][‘A1‘]
<Cell ‘abc‘.A1>
>>> excel2[‘abc‘].cell(row=1,column=2)
<Cell ‘abc‘.B1>
>>> 

Cell對象

  Cell對象比較簡單,常用的屬性如下:

  • row:單元格所在的行
  • column:單元格坐在的列
  • value:單元格的值
  • coordinate:單元格的坐標
>>> excel2[‘abc‘].cell(row=1,column=2).coordinate
‘B1‘
>>> excel2[‘abc‘].cell(row=1,column=2).value
‘test‘
>>> excel2[‘abc‘].cell(row=1,column=2).row
1
>>> excel2[‘abc‘].cell(row=1,column=2).column
‘B‘

打印表中數據的幾種方式

# ---------- 方式1 ----------
>>> for row in excel2[‘abc‘].rows:
	print( *[ cell.value for cell in row ])



# ---------- 方式2 ----------
>>> for row in excel2[‘abc‘].values:
	print(*row)

  

操作實例:

1、 安裝

pip install openpyxl

想要在文件中插入圖片文件,需要安裝pillow安裝文件:PIL-fork-1.1.7.win-amd64-py2.7.exe

 

· font(字體類):字號、字體顏色、下划線等

· fill(填充類):顏色等

· border(邊框類):設置單元格邊框

· alignment(位置類):對齊方式

· number_format(格式類):數據格式

· protection(保護類):寫保護

 

2、 創建一個excel 文件,並寫入不同類的內容

 

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook wb = Workbook() #創建文件對象 # grab the active worksheet ws = wb.active #獲取第一個sheet # Data can be assigned directly to cells ws['A1'] = 42 #寫入數字 ws['B1'] = "你好"+"automation test" #寫入中文(unicode中文也可) # Rows can also be appended ws.append([1, 2, 3]) #寫入多個單元格 # Python types will automatically be converted import datetime import time ws['A2'] = datetime.datetime.now() #寫入一個當前時間 #寫入一個自定義的時間格式 ws['A3'] =time.strftime("%Y年%m月%d日 %H時%M分%S秒",time.localtime()) # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

3、 創建sheet

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook wb = Workbook() ws1 = wb.create_sheet("Mysheet") #創建一個sheet ws1.title = "New Title" #設定一個sheet的名字 ws2 = wb.create_sheet("Mysheet", 0) #設定sheet的插入位置 默認插在后面 ws2.title = u"你好" #設定一個sheet的名字 必須是Unicode  ws1.sheet_properties.tabColor = "1072BA" #設定sheet的標簽的背景顏色 #獲取某個sheet對象 print wb.get_sheet_by_name(u"你好" ) print wb["New Title" ] #獲取全部sheet 的名字,遍歷sheet名字 print wb.sheetnames for sheet_name in wb.sheetnames: print sheet_name print "*"*50 for sheet in wb: print sheet.title #復制一個sheet wb["New Title" ]["A1"]="zeke" source = wb["New Title" ] target = wb.copy_worksheet(source) # w3 = wb.copy_worksheet(wb['new title']) # ws3.title = 'new2' # wb.copy_worksheet(wb['new title']).title = 'hello' # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

4、 操作單元格

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook wb = Workbook() ws1 = wb.create_sheet("Mysheet") #創建一個sheet  ws1["A1"]=123.11 ws1["B2"]="你好" d = ws1.cell(row=4, column=2, value=10) print ws1["A1"].value print ws1["B2"].value print d.value # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

5、 操作批量的單元格

無論ws.rows還是ws.iter_rows都是一個對象

除上述兩個對象外 單行,單列都是一個元祖,多行多列是二維元祖

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook wb = Workbook() ws1 = wb.create_sheet("Mysheet") #創建一個sheet  ws1["A1"]=1 ws1["A2"]=2 ws1["A3"]=3 ws1["B1"]=4 ws1["B2"]=5 ws1["B3"]=6 ws1["C1"]=7 ws1["C2"]=8 ws1["C3"]=9 #操作單列 print ws1["A"] for cell in ws1["A"]: print cell.value #操作多列,獲取每一個值 print ws1["A:C"] for column in ws1["A:C"]: for cell in column: print cell.value #操作多行 row_range = ws1[1:3] print row_range for row in row_range: for cell in row: print cell.value print "*"*50 for row in ws1.iter_rows(min_row=1, min_col=1, max_col=3, max_row=3): for cell in row: print cell.value #獲取所有行 print ws1.rows for row in ws1.rows: print row print "*"*50 #獲取所有列 print ws1.columns for col in ws1.columns: print col wb.save("e:\\sample.xlsx")
復制代碼

 

使用百分數

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook from openpyxl import load_workbook wb = load_workbook('e:\\sample.xlsx') wb.guess_types = True ws=wb.active ws["D1"]="12%" print ws["D1"].value # Save the file wb.save("e:\\sample.xlsx") #結果會打印小數
復制代碼

 

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook from openpyxl import load_workbook wb = load_workbook('e:\\sample.xlsx') wb.guess_types = False ws=wb.active ws["D1"]="12%" print ws["D1"].value wb.save("e:\\sample.xlsx") #結果會打印百分數
復制代碼

 

獲取所有的行對象:

復制代碼
#coding=utf-8 from openpyxl import Workbook from openpyxl import load_workbook wb = load_workbook('e:\\sample.xlsx') ws=wb.active rows=[] for row in ws.iter_rows(): rows.append(row) print rows #所有行 print rows[0] #獲取第一行 print rows[0][0] #獲取第一行第一列的單元格對象 print rows[0][0].value #獲取第一行第一列的單元格對象的值 print rows[len(rows)-1] #獲取最后行 print rows[-1] print rows[len(rows)-1][len(rows[0])-1] #獲取第后一行和最后一列的單元格對象 print rows[len(rows)-1][len(rows[0])-1].value #獲取第后一行和最后一列的單元格對象的值
復制代碼

 

獲取所有的列對象:

復制代碼
#coding=utf-8 from openpyxl import Workbook from openpyxl import load_workbook wb = load_workbook('e:\\sample.xlsx') ws=wb.active cols=[] cols = [] for col in ws.iter_cols(): cols.append(col) print cols #所有列 print cols[0] #獲取第一列 print cols[0][0] #獲取第一列的第一行的單元格對象 print cols[0][0].value #獲取第一列的第一行的值 print "*"*30 print cols[len(cols)-1] #獲取最后一列 print cols[len(cols)-1][len(cols[0])-1] #獲取最后一列的最后一行的單元格對象 print cols[len(cols)-1][len(cols[0])-1].value #獲取最后一列的最后一行的單元格對象的值
復制代碼

 

6、 操作已經存在文件

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook from openpyxl import load_workbook wb = load_workbook('e:\\sample.xlsx') wb.guess_types = True #猜測格式類型 ws=wb.active ws["D1"]="12%" print ws["D1"].value # Save the file wb.save("e:\\sample.xlsx") #注意如果原文件有一些圖片或者圖標,則保存的時候可能會導致圖片丟失
復制代碼

 

7、 單元格類型

復制代碼
 # -*- coding: utf-8 -*- from openpyxl import Workbook from openpyxl import load_workbook import datetime wb = load_workbook('e:\\sample.xlsx') ws=wb.active wb.guess_types = True ws["A1"]=datetime.datetime(2010, 7, 21) print ws["A1"].number_format ws["A2"]="12%" print ws["A2"].number_format ws["A3"]= 1.1 print ws["A4"].number_format ws["A4"]= "中國" print ws["A5"].number_format # Save the file wb.save("e:\\sample.xlsx") 執行結果: yyyy-mm-dd h:mm:ss 0% General General #如果是常規,顯示general,如果是數字,顯示'0.00_ ',如果是百分數顯示0% 數字需要在Excel中設置數字類型,直接寫入的數字是常規類型
復制代碼

 

8、 使用公式

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook from openpyxl import load_workbook wb = load_workbook('e:\\sample.xlsx') ws1=wb.active ws1["A1"]=1 ws1["A2"]=2 ws1["A3"]=3 ws1["A4"] = "=SUM(1, 1)" ws1["A5"] = "=SUM(A1:A3)" print ws1["A4"].value #打印的是公式內容,不是公式計算后的值,程序無法取到計算后的值 print ws1["A5"].value #打印的是公式內容,不是公式計算后的值,程序無法取到計算后的值 # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

9、 合並單元格

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook from openpyxl import load_workbook wb = load_workbook('e:\\sample.xlsx') ws1=wb.active ws.merge_cells('A2:D2') ws.unmerge_cells('A2:D2') #合並后的單元格,腳本單獨執行拆分操作會報錯,需要重新執行合並操作再拆分 # or equivalently ws.merge_cells(start_row=2,start_column=1,end_row=2,end_column=4) ws.unmerge_cells(start_row=2,start_column=1,end_row=2,end_column=4) # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

10插入一個圖片

需要先安裝Pilow,安全文件:PIL-fork-1.1.7.win-amd64-py2.7.exe

復制代碼
# -*- coding: utf-8 -*- from openpyxl import load_workbook from openpyxl.drawing.image import Image wb = load_workbook('e:\\sample.xlsx') ws1=wb.active img = Image('e:\\1.png') ws1.add_image(img, 'A1') # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

11、 隱藏單元格

復制代碼
# -*- coding: utf-8 -*- from openpyxl import load_workbook from openpyxl.drawing.image import Image wb = load_workbook('e:\\sample.xlsx') ws1=wb.active ws1.column_dimensions.group('A', 'D', hidden=True) #隱藏a到d列范圍內的列 #ws1.row_dimensions 無group方法 # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

復制代碼
12、 畫一個柱狀圖
# -*- coding: utf-8 -*- from openpyxl import load_workbook from openpyxl import Workbook from openpyxl.chart import BarChart, Reference, Series wb = load_workbook('e:\\sample.xlsx') ws1=wb.active wb = Workbook() ws = wb.active for i in range(10): ws.append([i]) values = Reference(ws, min_col=1, min_row=1, max_col=1, max_row=10) chart = BarChart() chart.add_data(values) ws.add_chart(chart, "E15") # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

13、 畫一個餅圖

復制代碼
# -*- coding: utf-8 -*- from openpyxl import load_workbook from openpyxl import Workbook from openpyxl.chart import (PieChart , ProjectedPieChart, Reference) from openpyxl.chart.series import DataPoint data = [ ['Pie', 'Sold'], ['Apple', 50], ['Cherry', 30], ['Pumpkin', 10], ['Chocolate', 40], ] wb = Workbook() ws = wb.active for row in data: ws.append(row) pie = PieChart() labels = Reference(ws, min_col=1, min_row=2, max_row=5) data = Reference(ws, min_col=2, min_row=1, max_row=5) pie.add_data(data, titles_from_data=True) pie.set_categories(labels) pie.title = "Pies sold by category" # Cut the first slice out of the pie slice = DataPoint(idx=0, explosion=20) pie.series[0].data_points = [slice] ws.add_chart(pie, "D1") ws = wb.create_sheet(title="Projection") data = [ ['Page', 'Views'], ['Search', 95], ['Products', 4], ['Offers', 0.5], ['Sales', 0.5], ] for row in data: ws.append(row) projected_pie = ProjectedPieChart() projected_pie.type = "pie" projected_pie.splitType = "val" # split by value labels = Reference(ws, min_col=1, min_row=2, max_row=5) data = Reference(ws, min_col=2, min_row=1, max_row=5) projected_pie.add_data(data, titles_from_data=True) projected_pie.set_categories(labels) ws.add_chart(projected_pie, "A10") from copy import deepcopy projected_bar = deepcopy(projected_pie) projected_bar.type = "bar" projected_bar.splitType = 'pos' # split by position  ws.add_chart(projected_bar, "A27") # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

14、 設定一個表格區域,並設定表格的格式

復制代碼
# -*- coding: utf-8 -*- from openpyxl import load_workbook from openpyxl import Workbook from openpyxl.worksheet.table import Table, TableStyleInfo wb = Workbook() ws = wb.active data = [ ['Apples', 10000, 5000, 8000, 6000], ['Pears', 2000, 3000, 4000, 5000], ['Bananas', 6000, 6000, 6500, 6000], ['Oranges', 500, 300, 200, 700], ] # add column headings. NB. these must be strings ws.append(["Fruit", "2011", "2012", "2013", "2014"]) for row in data: ws.append(row) tab = Table(displayName="Table1", ref="A1:E5") # Add a default style with striped rows and banded columns style = TableStyleInfo(name="TableStyleMedium9", showFirstColumn=True, showLastColumn=True, showRowStripes=True, showColumnStripes=True) #第一列是否和樣式第一行顏色一行,第二列是否··· #是否隔行換色,是否隔列換色 tab.tableStyleInfo = style ws.add_table(tab) # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

15、給單元格設定字體顏色

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook from openpyxl.styles import colors from openpyxl.styles import Font wb = Workbook() ws = wb.active a1 = ws['A1'] d4 = ws['D4'] ft = Font(color=colors.RED) # color="FFBB00",顏色編碼也可以設定顏色 a1.font = ft d4.font = ft # If you want to change the color of a Font, you need to reassign it:: #italic 傾斜字體 a1.font = Font(color=colors.RED, italic=True) # the change only affects A1 a1.value = "abc" # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

16、設定字體和大小

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook from openpyxl.styles import colors from openpyxl.styles import Font wb = Workbook() ws = wb.active a1 = ws['A1'] d4 = ws['D4'] a1.value = "abc" from openpyxl.styles import Font from copy import copy ft1 = Font(name=u'宋體', size=14) ft2 = copy(ft1) #復制字體對象 ft2.name = "Tahoma" print ft1.name print ft2.name print ft2.size # copied from the  a1.font = ft1 # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

17、設定行和列的字體

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook from openpyxl.styles import Font wb = Workbook() ws = wb.active col = ws.column_dimensions['A'] col.font = Font(bold=True) #將A列設定為粗體 row = ws.row_dimensions[1] row.font = Font(underline="single") #將第一行設定為下划線格式 # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

18、設定單元格的邊框、字體、顏色大小邊框背景

 

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook from openpyxl.styles import Font from openpyxl.styles import NamedStyle, Font, Border, Side,PatternFill wb = Workbook() ws = wb.active highlight = NamedStyle(name="highlight") highlight.font = Font(bold=True, size=20,color= "ff0100") highlight.fill = PatternFill("solid", fgColor="DDDDDD")#背景填充 bd = Side(style='thick', color="000000") highlight.border = Border(left=bd, top=bd, right=bd, bottom=bd) print dir(ws["A1"]) ws["A1"].style =highlight # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 

19、常用的樣式屬性設置

復制代碼
# -*- coding: utf-8 -*- from openpyxl import Workbook from openpyxl.styles import Font from openpyxl.styles import NamedStyle, Font, Border, Side,PatternFill from openpyxl.styles import PatternFill, Border, Side, Alignment, Protection, Font wb = Workbook() ws = wb.active ft = Font(name=u'微軟雅黑', size=11, bold=False, italic=False, vertAlign=None, underline='none', strike=False, color='FF000000') fill = PatternFill(fill_type="solid", start_color='FFEEFFFF', end_color='FF001100') #邊框可以選擇的值為:'hair', 'medium', 'dashDot', 'dotted', 'mediumDashDot', 'dashed', 'mediumDashed', 'mediumDashDotDot', 'dashDotDot', 'slantDashDot', 'double', 'thick', 'thin'] #diagonal 表示對角線 bd = Border(left=Side(border_style="thin", color='FF001000'), right=Side(border_style="thin", color='FF110000'), top=Side(border_style="thin", color='FF110000'), bottom=Side(border_style="thin", color='FF110000'), diagonal=Side(border_style=None, color='FF000000'), diagonal_direction=0, outline=Side(border_style=None, color='FF000000'), vertical=Side(border_style=None, color='FF000000'), horizontal=Side(border_style=None, color='FF110000') ) alignment=Alignment(horizontal='general', vertical='bottom', text_rotation=0, wrap_text=False, shrink_to_fit=False, indent=0) number_format = 'General' protection = Protection(locked=True, hidden=False) ws["B5"].font = ft ws["B5"].fill =fill ws["B5"].border = bd ws["B5"].alignment = alignment ws["B5"].number_format = number_format ws["B5"].value ="zeke" # Save the file wb.save("e:\\sample.xlsx")
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM