python+excel=openpyxl(一)
原計劃寫一個openpyxl的操作文件,普及下python如何來操作excel,結果人家官方的文件已經寫的非常
完美了,就臨時改主意把人家的文件翻譯了一遍。可以閱讀英文文件的同學,建議大家直接去看官方的
API操作文件
官網地址:Openpyxl
建立一個excel檔案
使用openpyxl模組工作時,我們並需要在系統檔案中建立一個excel檔案。只需要匯入Workbook類就可以
了:
>>> from openpyxl import Workbook
>>> wb = Workbook()
一個excel檔案總是會自動建立至少一張表,也就是所謂的sheet
新夢想技術分享
你可以透過使用命令Workbook物件名.active來獲取這張sheet
>>> ws = wb.active
注意:active預設獲取下標0的表。除非你自行指定了下標,否則你將永遠都只能獲取到第一張表。
你可以使用命令Workbook物件.create_sheet()來建立sheet表單:
>>> ws1 = wb.create_sheet("Mysheet") # insert at the end (default)
# or
>>> ws2 = wb.create_sheet("Mysheet", 0) # insert at first position
# or
>>> ws3 = wb.create_sheet("Mysheet", -1) # insert at the penultimate position
自行建立的sheet表單都會自動的生成一個名字。類似與sheet、sheet1、sheet2…你隨時都可以修改這
個名字,只要透過屬性title:
wb.title = ‘new title’
預設情況下,改標題表單下的表格是白色的。你可以透過屬性:表單物件.sheet_properties.tabColor
來設定
ws.sheet_properties.tabColor = "1072BA"
一旦你定義了sheet表單的標題之後,你就可以將其作為workbook物件的key來進行呼叫:
>>> ws3 = wb["New Title"]
透過sheetname屬性你可以瀏覽workbook物件下所有sheet表單的標題
>>> print(wb.sheetnames)
['Sheet2', 'New Title', 'Sheet1']
你也可以迴圈遍歷所有的sheet表單
>>> for sheet in wb:
... print(sheet.title)
你可以在當前檔案中,建立sheet表單的副本
>>> source = wb.active
>>> target = wb.copy_worksheet(source)
注意:
只有單元格(包括值、樣式、超連結和註釋)和某些表格工作屬性(包括尺寸、格式和屬性)。不能復
制所有其他檔案/表單的屬性,比如:影像、圖表
也不能在工作簿之間賦值sheet表。如果工作簿是隻讀或者只寫的模式,那麼你也不能賦值它。
運算元據
訪問一個單元格
現在我們已經知道了如何取獲取一個sheet表單,現在可以開始修改表單中單元格的內容了。單元格可以
作為表單的key來直接訪問
>>> c = ws['A4']
上面命令將會返回A4單元格,如果A4不存在的話,那命令執行完成之後會自動建立一個。可以直接進行
賦值操作
>>> ws['A4'] = 4
openpyxl也提供了cell()函式。
這個函式可以透過行和列更精確的訪問單元格
>>> d = ws.cell(row=4, column=2, value=10)
注意:
記憶體中的sheet表不存在任何的單元格。所有你操作的單元格都是在訪問的同時建立的正是由於此特性,
所以即使你沒有給他們分配值,也可以透過滾動的瀏覽的方式在記憶體中建立單元格
類似於下列方法
>>> for x in range(1,101):
... for y in range(1,101):
... ws.cell(row=x, column=y)
這個程式碼塊將會建立一個100*100的單元格,但沒有什麼實際意義
訪問多個單元格
可以透過切片來訪問多個單元格
>>> cell_range = ws['A1':'C2']
也可以使用類似的方法來獲取行或者列的範圍
>>> colC = ws['C']
>>> col_range = ws['C:D']
>>> row10 = ws[10]
>>> row_range = ws[5:10]
你也可以使用iter_row()方法:
>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2):
... for cell in row:
... print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.B1>
<Cell Sheet1.C1>
<Cell Sheet1.A2>
<Cell Sheet1.B2>
<Cell Sheet1.C2>
同樣使用iter_cols()方法可以返回列:
>>> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2):
... for cell in col:
... print(cell)
<Cell Sheet1.A1>
<Cell Sheet1.A2>
<Cell Sheet1.B1>
<Cell Sheet1.B2>
<Cell Sheet1.C1>
<Cell Sheet1.C2>
注意:
出於效能原因,Worksheet.iter_cols()方法在只讀模式下不可用。
如果你需要遍歷所有的行或者列的話,你可以使用row屬性或者columns屬性
>>> ws = wb.active
>>> ws['C9'] = 'hello world'
>>> tuple(ws.rows)
((<Cell Sheet.A1>, <Cell Sheet.B1>, <Cell Sheet.C1>),
(<Cell Sheet.A2>, <Cell Sheet.B2>, <Cell Sheet.C2>),
(<Cell Sheet.A3>, <Cell Sheet.B3>, <Cell Sheet.C3>),
(<Cell Sheet.A4>, <Cell Sheet.B4>, <Cell Sheet.C4>),
(<Cell Sheet.A5>, <Cell Sheet.B5>, <Cell Sheet.C5>),
(<Cell Sheet.A6>, <Cell Sheet.B6>, <Cell Sheet.C6>),
(<Cell Sheet.A7>, <Cell Sheet.B7>, <Cell Sheet.C7>),
(<Cell Sheet.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
(<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>))
>>> tuple(ws.columns)
((<Cell Sheet.A1>,
<Cell Sheet.A2>,
<Cell Sheet.A3>,
<Cell Sheet.A4>,
<Cell Sheet.A5>,
<Cell Sheet.A6>,
...
<Cell Sheet.B7>,
<Cell Sheet.B8>,
<Cell Sheet.B9>),
(<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>))
注意:
處於效能原因的考慮,columns屬性在只讀模式下不可以用
僅獲取單元格的值
如果你只是想獲取sheet表單中的值的話,可以使用屬性valus。這將遍歷工作表中所有的行,但僅返回
單元格的值
for row in ws.values:
for value in row:
print(value)
iter_rows()和iter_cols()函式透過引數 values_only也都可以之返回值
>>> for row in ws.iter_rows(min_row=1, max_col=3, max_row=2, values_only=True):
... print(row)
(None, None, None)
(None, None, None)
資料儲存
一旦我們有了一個單元格之後,我們可以指定它的值
>>> c.value = 'hello, world'
>>> print(c.value)
'hello, world'
>>> d.value = 3.14
>>> print(d.value)
3.14
儲存到檔案
最簡單以及最安全的用來儲存workbook的方法,是透過使用workbook類物件的save()方法
>>> wb = Workbook()
>>> wb.save('balances.xlsx')
注意:
此操作將會重寫已存在的檔案內容,並且不會給出警告
檔名副檔名不是強制為xlsx或xlsm,如果你不使用官方副檔名,那你可能無法透過其他應用程式直接
開啟此檔案。
由於OOXML檔案基本上是ZIP檔案,因此您也可以使用自己喜歡的ZIP存檔管理器將其開啟。
儲存為流
如果你想將檔案儲存到流物件中,比如,在你使用一些像Pyramid、Flask或者Django這樣的web框架時,
你只需要透過一個NameTemporaryFile()物件
>>> from tempfile import NamedTemporaryFile
>>> from openpyxl import Workbook
>>> wb = Workbook()
>>> with NamedTemporaryFile() as tmp:
wb.save(tmp.name)
tmp.seek(0)
stream = tmp.read()
你可以設定屬性template=True,將workbook物件儲存為一個模板
>>> wb = load_workbook('document.xlsx')
>>> wb.template = True
>>> wb.save('document_template.xltx')
或者將屬性設定為False(預設值),將workbook物件儲存為一個檔案
>>> wb = load_workbook('document_template.xltx')
>>> wb.template = False
>>> wb.save('document.xlsx', as_template=False)
載入已有的檔案
與建立檔案相同,透過openpyxl.load_workbook()可以開啟一個現有的檔案
>>> from openpyxl import load_workbook
>>> wb2 = load_workbook('test.xlsx')
>>> print wb2.sheetnames
['Sheet2', 'New Title', 'Sheet1']
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69940641/viewspace-2928748/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python+excel=openpyxl(二)PythonExcel
- openpyxl Worksheet
- openpyxl styles 模組
- openpyxl utils 模組
- python openpyxl筆記Python筆記
- python excel pandas openpyxlPythonExcel
- 使用openpyxl處理表格資料
- openpyxl庫寫入列表資料
- Python中用OpenPyXL處理Excel表格PythonExcel
- openpyxl 操作 Excel表的格基本用法Excel
- Python處理Excel文件之openpyxlPythonExcel
- openpyxl 的基本操作 (辦公自動化)
- Python Excel處理庫openpyxl詳解PythonExcel
- PythonModule_openpyxl_styles樣式處理Python
- 使用openpyxl庫讀取Excel檔案資料Excel
- Python-使用openpyxl讀取excel內容PythonExcel
- 【python介面自動化】- openpyxl讀取excel資料PythonExcel
- Python基礎之openpyxl如何實現vlookup函式Python函式
- openpyxl設定單元格大小(行高和列寬)
- 直播網站程式原始碼,【openpyxl】只讀模式、只寫模式網站原始碼模式
- Python 利用pymysql和openpyxl操作MySQL資料庫並插入Excel資料PythonMySql資料庫Excel
- python_excel_openpyxl成功操作單元格位置變化並報數PythonExcel
- python 報錯:raise IllegalCharacterError(f"{value} cannot be used in worksheets.") openpyxl.utils.exceptions.IllegalCharacterErrorPythonAIErrorException
- PYTHON openpyxl 讀取課程表,輪值排班表,輸出每日班級簡報Python
- 【python小記】使用openpyxl庫在同一個工作表下複製單元格(包括它們的值、樣式和合並屬性)Python
- 用python庫openpyxl操作excel,從源excel表中提取資訊複製到目標excel表中PythonExcel
- Python常用的資料檔案儲存的4種格式(txt/json/csv/excel)及操作Excel相關的第三方庫(xlrd/xlwt/pandas/openpyxl)(2021最新版)PythonJSONExcel
- 一筆一劃教你寫一簽名
- 一主一物一邏備庫
- 一步一步實現一個PromisePromise
- 一、JVM專欄之一JVM
- 冪的一個公式(一)公式
- mybatis 一對一關聯MyBatis
- 弘一法師語錄一
- 一對一直播原始碼助力一對一教育,進入直播3.0時代!原始碼
- MyBatis 使用resultMap 以及 一對一和一對多MyBatis
- 一步一步,實現自己的ButterKnife(一)
- 一步一步帶你實現virtualdom(一)