只讀模式?
有時(shí)收恢,您需要打開或編寫非常大的XLSX文件究孕,而openpyxl中的常用方式將無法處理庸毫。幸運(yùn)的是,有兩種模式使您能夠以固定或接近固定的內(nèi)存消耗讀取和寫入無限的數(shù)據(jù)量合是。
簡介:class:openpyxl.worksheet._read_only.ReadOnlyWorksheet:
from openpyxl import load_workbook
wb = load_workbook(filename='large_file.xlsx', read_only=True)
ws = wb['big_data']
for row in ws.rows:
for cell in row:
print(cell.value)
警告
- :class:
openpyxl.worksheet._read_only.ReadOnlyWorksheet
是只讀的
返回的單元格類型不是:class:openpyxl.cell.cell.Cell了罪,而是:class:openpyxl.cell._read_only.ReadOnlyCell。
工作表尺寸?
只讀模式依賴于創(chuàng)建文件的應(yīng)用程序和庫所提供有關(guān)工作表的正確信息聪全,特別是其中已使用部分信息泊藕,即尺寸。有些應(yīng)用程序設(shè)置尺寸信息不正確难礼。您可以使用ws.calculate_dimension()
來檢查該信息娃圆。如果返回一個(gè)錯(cuò)誤范圍汽久,簡單地重置max_row和max_column屬性就可以使用該文件:
ws.reset_dimensions()
只寫模式?
在write- only
模式下,openpyxl.worksheet.worksheet.Worksheet
已被一個(gè)更快的替代項(xiàng)替換踊餐,:class:openpyxl.worksheet._write_only.WriteOnlyWorksheet
。如果要轉(zhuǎn)儲大量數(shù)據(jù)臀稚,請確保已安裝lxml
庫吝岭。
>>> from openpyxl import Workbook
>>> wb = Workbook(write_only=True)
>>> ws = wb.create_sheet()
>>>
>>> # now we'll fill it with 100 rows x 200 columns
>>>
>>> for irow in range(100):
... ws.append(['%d' % i for i in range(200)])
>>> # save the file
>>> wb.save('new_big_file.xlsx')
如果單元格包含樣式或注釋信息,請使用:func:openpyxl.cell.WriteOnlyCell
>>> from openpyxl import Workbook
>>> wb = Workbook(write_only = True)
>>> ws = wb.create_sheet()
>>> from openpyxl.cell import WriteOnlyCell
>>> from openpyxl.comments import Comment
>>> from openpyxl.styles import Font
>>> cell = WriteOnlyCell(ws, value="hello world")
>>> cell.font = Font(name='Courier', size=36)
>>> cell.comment = Comment(text="A comment", author="Author's Name")
>>> ws.append([cell, 3.14, None])
>>> wb.save('write_only_file.xlsx')
這將創(chuàng)建一個(gè)只有一張工作表的只寫工作簿吧寺,并附加一個(gè)包含3個(gè)單元格的行:一個(gè)具有自定義字體和注釋的文本單元格窜管、一個(gè)浮點(diǎn)數(shù)單元格和一個(gè)空單元格(將被丟棄)。
請注意
- 與普通工作簿不同稚机,新創(chuàng)建的只寫工作簿不包含任何工作表幕帆;必須使用:func:
create_sheet()
方法來創(chuàng)建工作表。 - 在只寫工作簿中赖条,只能使用以下:func:
append()
方法來添加行失乾。不能在任意位置使用:func:cell()
或者:func:iter_rows()
方法寫入(或讀取)單元格纬乍。 - 它可以導(dǎo)出無限量的數(shù)據(jù)(甚至超過Excel的實(shí)際處理能力)碱茁,同時(shí)將內(nèi)存使用量控制在10Mb以下。
- 只寫工作簿只能保存一次仿贬。之后纽竣,每次嘗試保存工作簿或使用
append()
附加到現(xiàn)有工作表時(shí)都會引發(fā)一個(gè):class:openpyxl.utils.exceptions.WorkbookAlreadySaved
異常。 - 在單元格數(shù)據(jù)之前出現(xiàn)在文件中的所有內(nèi)容都必須在添加單元格之前創(chuàng)建茧泪,因?yàn)樗仨氃趩卧裰皩懭胛募寻薄@纾瑧?yīng)在添加單元格之前設(shè)置
freeze_panes
凍結(jié)窗口队伟。