欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python操作字節(jié)流中的Excel文檔

 更新時(shí)間:2025年01月02日 08:32:52   作者:Eiceblue  
這篇文章將為大家詳細(xì)介紹如何使用Python創(chuàng)建和保存Excel文件到字節(jié)流,以及讀取和修改字節(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)圖算法、堆操作和并查集代碼實(shí)例

    Python實(shí)現(xiàn)圖算法、堆操作和并查集代碼實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)圖算法、堆操作和并查集代碼實(shí)例,圖算法、堆操作和并查集是計(jì)算機(jī)科學(xué)中常用的數(shù)據(jù)結(jié)構(gòu)和算法,它們?cè)诮鉀Q各種實(shí)際問題中具有重要的應(yīng)用價(jià)值,需要的朋友可以參考下
    2023-08-08
  • python實(shí)例小練習(xí)之Turtle繪制南方的雪花

    python實(shí)例小練習(xí)之Turtle繪制南方的雪花

    Turtle庫是Python語言中一個(gè)很流行的繪制圖像的函數(shù)庫,想象一個(gè)小烏龜,在一個(gè)橫軸為x、縱軸為y的坐標(biāo)系原點(diǎn),(0,0)位置開始,它根據(jù)一組函數(shù)指令的控制,在這個(gè)平面坐標(biāo)系中移動(dòng),從而在它爬行的路徑上繪制了圖形
    2021-09-09
  • Python 格式化打印json數(shù)據(jù)方法(展開狀態(tài))

    Python 格式化打印json數(shù)據(jù)方法(展開狀態(tài))

    今天小編就為大家分享一篇Python 格式化打印json數(shù)據(jù)方法(展開狀態(tài)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python-pyinstaller、打包后獲取路徑的實(shí)例

    python-pyinstaller、打包后獲取路徑的實(shí)例

    今天小編就為大家分享一篇python-pyinstaller、打包后獲取路徑的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 利用python獲得時(shí)間的實(shí)例說明

    利用python獲得時(shí)間的實(shí)例說明

    在python中,它的time模塊功能十分強(qiáng)大,我們今天就來學(xué)習(xí)下,廢話少說,我們來看下實(shí)際的效果,下面貼出代碼:
    2013-03-03
  • python中判斷文件編碼的chardet(實(shí)例講解)

    python中判斷文件編碼的chardet(實(shí)例講解)

    下面小編就為大家分享一篇python中判斷文件編碼的chardet(實(shí)例講解),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 對(duì)Pycharm創(chuàng)建py文件時(shí)自定義頭部模板的方法詳解

    對(duì)Pycharm創(chuàng)建py文件時(shí)自定義頭部模板的方法詳解

    今天小編就為大家分享一篇對(duì)Pycharm創(chuàng)建py文件時(shí)自定義頭部模板的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02
  • 利用Python還原方陣游戲詳解

    利用Python還原方陣游戲詳解

    這篇文章的靈感來源于我玩游戲的時(shí)候,看見一個(gè)大佬在游戲里面建造了“還原方陣游戲”,就感覺很牛掰,就想著python不是有矩陣嗎,可以還原一下呢,感興趣的小伙伴可以了解一下
    2023-01-01
  • Python使用openpyxl實(shí)現(xiàn)Excel超鏈接批量化設(shè)置

    Python使用openpyxl實(shí)現(xiàn)Excel超鏈接批量化設(shè)置

    在Excel中,超鏈接是一種非常有用的功能,本文我們將介紹如何使用Python來處理Excel中的超鏈接,以及如何將超鏈接與對(duì)應(yīng)的工作表鏈接起來,需要的可以參考一下
    2023-07-07
  • 實(shí)現(xiàn)?Python?腳本生成命令行

    實(shí)現(xiàn)?Python?腳本生成命令行

    這篇文章主要介紹了實(shí)現(xiàn)?Python?腳本生成命令行,文章通過定義一個(gè)?scrape?方法展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05

最新評(píng)論