使用Python操作字節(jié)流中的Excel文檔
Python能夠輕松地從字節(jié)流中加載文件,在不依賴于外部存儲(chǔ)的情況下直接對(duì)其進(jìn)行讀取、修改等復(fù)雜操作,并最終將更改后的文檔保存回字節(jié)串中。這種能力不僅極大地提高了數(shù)據(jù)處理的靈活性,還確保了數(shù)據(jù)的安全性和完整性,尤其是在網(wǎng)絡(luò)傳輸或內(nèi)存中處理敏感信息時(shí)。本文將介紹如何使用Python創(chuàng)建和保存Excel文件到字節(jié)流,以及讀取和修改字節(jié)流中的Excel文件。
本文所使用的方法需要用到Spire.XLS for Python,PyPI:pip install spire.xls
。
Python創(chuàng)建Excel文件并保存到字節(jié)流
我們可以通過創(chuàng)建一個(gè)Workbook實(shí)例從而創(chuàng)建一個(gè)Excel工作簿,然后向其中添加數(shù)據(jù)并設(shè)置好格式,最后使用Workbook.SaveToStream()方法將其保存到指定的bytes或bytearray中。以下是操作步驟示例:
- 導(dǎo)入所需模塊。
- 創(chuàng)建Workbook對(duì)象從而新建一個(gè)Excel工作簿,新建的工作簿中會(huì)有三個(gè)默認(rèn)工作表。
- 使用Workbook.Worksheets.get_Item()方法獲取一個(gè)工作表。
- 定義數(shù)據(jù)列表,或從其他地方導(dǎo)入數(shù)據(jù)。
- 通過Worksheet.Range.get_Item().Value或.NumberValue屬性寫入數(shù)據(jù)到工作表中。
- 通過CellRange.Style中的屬性設(shè)置單元格格式。
- 使用Worksheet.AutoFitColumn()方法自動(dòng)調(diào)整列寬。
- 創(chuàng)建Stream對(duì)象。
- 使用Workbook.SaveToStream()方法將Excel工作簿保存到Stream對(duì)象。
- 將Stream對(duì)象轉(zhuǎn)換為bytes或bytearray,或?qū)懭胍延械腷ytearray中。
- 釋放資源。
代碼示例
from spire.xls import Workbook, FileFormat, Stream, Color, HorizontalAlignType # 創(chuàng)建一個(gè)工作簿實(shí)例 workbook = Workbook() # 獲取第一個(gè)工作表 sheet = workbook.Worksheets.get_Item(0) # 創(chuàng)建或讀取一個(gè)二維數(shù)據(jù)列表 data = [ ["書名", "作者", "出版年份", "類型", "價(jià)格 (人民幣)"], ["了不起的蓋茨比", "F. Scott Fitzgerald", 1925, "小說", 10.99], ["殺死一只知更鳥", "Harper Lee", 1960, "小說", 8.99], ["1984", "George Orwell", 1949, "反烏托邦", 7.99], ["傲慢與偏見", "Jane Austen", 1813, "浪漫", 6.99], ["麥田里的守望者", "J.D. Salinger", 1951, "小說", 9.99], ["美麗新世界", "Aldous Huxley", 1932, "反烏托邦", 8.49], ["霍比特人", "J.R.R. Tolkien", 1937, "奇幻", 12.99], ["動(dòng)物莊園", "George Orwell", 1945, "寓言", 5.99], ["指環(huán)王", "J.R.R. Tolkien", 1954, "奇幻", 14.99], ["白鯨", "Herman Melville", 1851, "冒險(xiǎn)", 11.99] ] # 將數(shù)據(jù)插入到工作表中 for i, row in enumerate(data): for j, value in enumerate(row): if isinstance(value, str): sheet.Range.get_Item(i + 1, j + 1).Value = value else: sheet.Range.get_Item(i + 1, j + 1).NumberValue = value # 格式化標(biāo)題行 headerRow = sheet.AllocatedRange.Rows.get_Item(0) headerRow.Style.Color = Color.FromRgb(77, 189, 155) headerRow.Style.Font.FontName = "宋體" headerRow.Style.Font.Size = 14 headerRow.Style.Font.IsBold = True headerRow.Style.HorizontalAlignment = HorizontalAlignType.Center # 格式化數(shù)據(jù)行 for i in range(1, sheet.AllocatedRange.Rows.Count): row = sheet.AllocatedRange.Rows.get_Item(i) row.Style.Font.FontName = "宋體" row.Style.Font.Size = 12 row.Style.HorizontalAlignment = HorizontalAlignType.Left row.Style.Color = Color.FromRgb(255, 253, 208) if i % 2 == 0: row.Style.Color = Color.FromRgb(255, 248, 183) # 自動(dòng)調(diào)整列寬 for i in range(sheet.AllocatedRange.Columns.Count): sheet.AutoFitColumn(i + 1) # 創(chuàng)建一個(gè)流對(duì)象 stream = Stream() # 將工作簿保存到流中 workbook.SaveToStream(stream, FileFormat.Version2016) # 將流轉(zhuǎn)換為字節(jié) bytes_data = stream.ToArray() # 將字節(jié)寫入文件或按需要使用 with open("output/CreateExcelByStream.xlsx", "wb") as file: file.write(bytes_data)
運(yùn)行結(jié)果
Python直接讀取字節(jié)流中的Excel文件
我們可以使用Workbook.LoadFromStream(Stream(bytes))方法直接從字節(jié)流中加載PDF文檔,然后遍歷工作表中已使用的單元格的行和列,通過Worksheet.AllocatedRange.get_Item().Value屬性直接讀取單元格數(shù)據(jù)。以下是操作步驟示例:
- 導(dǎo)入所需模塊。
- 創(chuàng)建Workbook對(duì)象。
- 使用Workbook.LoadFromStream(Stream(bytes))方法從字節(jié)流中加載Excel文件。
- 使用Workbook.Worksheets.get_Item()方法獲取指定工作表。
- 遍歷工作表中已使用的行和列,使用Worksheet.AllocatedRange.get_Item().Value屬性獲取單元格數(shù)據(jù)。
- 輸出單元格數(shù)據(jù)或用于其他操作。
- 釋放資源。
代碼示例
from spire.xls import Workbook, Stream # 創(chuàng)建一個(gè)字節(jié)對(duì)象或使用現(xiàn)有的字節(jié)對(duì)象 with open("output/CreateExcelByStream.xlsx", "rb") as file: bytes_data = file.read() # 創(chuàng)建一個(gè)工作簿實(shí)例 workbook = Workbook() # 從字節(jié)流加載Excel文件 workbook.LoadFromStream(Stream(bytes_data)) # 獲取第一個(gè)工作表 sheet = workbook.Worksheets.get_Item(0) # 從工作表讀取數(shù)據(jù) # 創(chuàng)建一個(gè)列表來存儲(chǔ)數(shù)據(jù) data = [] for i in range(sheet.AllocatedRange.Rows.Count): # 獲取一行數(shù)據(jù) row = sheet.AllocatedRange.Rows.get_Item(i) # 創(chuàng)建一個(gè)列表來存儲(chǔ)該行的數(shù)據(jù) row_data = [] for j in range(row.Cells.Count): # 獲取單元格的值 cellValue = sheet.AllocatedRange.get_Item(i + 1, j + 1).Value row_data.append(cellValue) data.append(row_data) # 打印數(shù)據(jù)或按需使用 for row in data: print(row) # 釋放資源 workbook.Dispose()
運(yùn)行結(jié)果
Python編輯字節(jié)流中的Excel文件
同樣,我們也可以使用Workbook.LoadFromStream(Stream(bytes))方法直接從bytes或bytearray中加載PDF文檔,并對(duì)其進(jìn)行修改編輯,然后使用Workbook.SaveToStream()方法將其保存回字節(jié)流中,從而實(shí)現(xiàn)編輯字節(jié)流中的Excel文件。以下是操作步驟示例:
- 導(dǎo)入所需模塊。
- 創(chuàng)建Workbook對(duì)象。
- 使用字節(jié)流創(chuàng)建Stream對(duì)象。
- 使用Workbook.LoadFromStream()方法從Stream對(duì)象加載Excel文件。
- 使用Workbook.Worksheets.get_Item()方法獲取指定工作表。
- 根據(jù)需要修改格式。
- 使用Workbook.SaveToStream()方法將Excel工作簿保存回Stream對(duì)象。
- 將Stream對(duì)象轉(zhuǎn)換為bytes或bytearray。
- 將字節(jié)流寫入文件或用于其他用途。
- 釋放資源。
代碼示例
from spire.xls import Workbook, Stream, HorizontalAlignType, Color, FileFormat # 創(chuàng)建一個(gè)字節(jié)對(duì)象或使用現(xiàn)有的字節(jié)對(duì)象 with open("output/CreateExcelByStream.xlsx", "rb") as file: bytes_data = file.read() # 創(chuàng)建一個(gè)工作簿實(shí)例 workbook = Workbook() # 從字節(jié)流加載Excel文件 stream = Stream(bytes_data) workbook.LoadFromStream(stream) stream.Close() # 刪除多余的工作表 #for i in range(1, workbook.Worksheets.Count): # workbook.Worksheets.Remove(workbook.Worksheets.get_Item(i)) # 獲取第一個(gè)工作表 sheet = workbook.Worksheets.get_Item(0) # 修改標(biāo)題行的樣式 headerRow = sheet.AllocatedRange.Rows.get_Item(0) headerRow.Style.Font.Bold = False headerRow.Style.Font.FontName = "Calibri" headerRow.Style.Font.Size = 12 headerRow.Style.HorizontalAlignment = HorizontalAlignType.Left headerRow.Style.Color = Color.FromRgb(92, 64, 131) # 修改數(shù)據(jù)行的樣式 for i in range(1, sheet.AllocatedRange.Rows.Count): row = sheet.AllocatedRange.Rows.get_Item(i) row.Style.Font.FontName = "Calibri" row.Style.Font.Size = 11 row.Style.Color = Color.FromRgb(255, 237, 206) if i % 2 == 0: row.Style.Color = Color.FromRgb(255, 228, 181) # 自動(dòng)調(diào)整列寬 for i in range(sheet.AllocatedRange.Columns.Count): sheet.AutoFitColumn(i + 1) # 保存修改后的Excel文件 streamTemp = Stream() workbook.SaveToStream(streamTemp, FileFormat.Version2016) # 將流轉(zhuǎn)換回字節(jié) bytes_data = streamTemp.ToArray() # 將字節(jié)寫入文件或按需使用 with open("output/ModifiedExcel.xlsx", "wb") as file: file.write(bytes_data)
運(yùn)行結(jié)果
到此這篇關(guān)于使用Python操作字節(jié)流中的Excel文檔的文章就介紹到這了,更多相關(guān)Python操作字節(jié)流Excel內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中struct模塊對(duì)字節(jié)流/二進(jìn)制流的操作教程
- Python 字節(jié)流,字符串,十六進(jìn)制相互轉(zhuǎn)換實(shí)例(binascii,bytes)
- Python 二進(jìn)制字節(jié)流數(shù)據(jù)的讀取操作(bytes與bitstring)
- Python實(shí)現(xiàn)對(duì)Excel表格的操作詳解
- python自動(dòng)化辦公操作excel的示例詳解
- 使用Python操作Excel中的各項(xiàng)頁面設(shè)置功能
- Python使用xlrd模塊實(shí)現(xiàn)操作Excel讀寫的方法匯總
- Python使用OpenPyXL庫操作Excel表的操作指南
相關(guān)文章
python打包exe文件并隱藏執(zhí)行CMD命令窗口問題
這篇文章主要介紹了python打包exe文件并隱藏執(zhí)行CMD命令窗口問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01python3 實(shí)現(xiàn)的人人影視網(wǎng)站自動(dòng)簽到
這里給大家分享的是使用Python3結(jié)合計(jì)劃任務(wù),實(shí)現(xiàn)的人人影視網(wǎng)站自動(dòng)簽到功能的代碼,非常的實(shí)用,有需要的小伙伴可以參考下2016-06-06DjangoRestFramework 使用 simpleJWT 登陸認(rèn)證完整記錄
Djangorestframework-simplejwt是Django REST Framework框架的一個(gè)jwt插件,使用 python http 工具進(jìn)行接口測(cè)試的方法文中給大家提到,重點(diǎn)給大家分享djangorestframework-simplejwt 使用記錄及登陸認(rèn)證的完成過程,感興趣的朋友跟隨小編一起看看吧2021-06-06Python用threading實(shí)現(xiàn)多線程詳解
這篇文章主要給大家介紹了Python用threading實(shí)現(xiàn)多線程的方法示例,文中介紹的很詳細(xì),對(duì)大家具有一定的參考借鑒價(jià)值,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。2017-02-02python判斷變量是否為int、字符串、列表、元組、字典的方法詳解
這篇文章主要介紹了python判斷變量是否為int、字符串、列表、元組、字典的方法詳解,需要的朋友可以參考下2020-02-02Python進(jìn)行有限元仿真的使用及創(chuàng)建
這篇文章主要為大家介紹了Python進(jìn)行有限元仿真的創(chuàng)建及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10對(duì)python dataframe邏輯取值的方法詳解
今天小編就為大家分享一篇對(duì)python dataframe邏輯取值的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01