用Python操作字节流中的Excel文档
Python能够轻松地从字节流中加载文件,在不依赖于外部存储的情况下直接对其进行读取、修改等复杂操作,并最终将更改后的文档保存回字节串中。这种能力不仅极大地提高了数据处理的灵活性,还确保了数据的安全性和完整性,尤其是在网络传输或内存中处理敏感信息时。本文将介绍如何使用Python创建和保存Excel文件到字节流,以及读取和修改字节流中的Excel文件。
文章目录
- Python创建Excel文件并保存到字节流
- Python直接读取字节流中的Excel文件
- Python编辑字节流中的Excel文件
本文所使用的方法需要用到Spire.XLS for Python,PyPI:pip install spire.xls
。
Python创建Excel文件并保存到字节流
我们可以通过创建一个Workbook
实例从而创建一个Excel工作簿,然后向其中添加数据并设置好格式,最后使用Workbook.SaveToStream()
方法将其保存到指定的bytes
或bytearray
中。以下是操作步骤示例:
- 导入所需模块。
- 创建
Workbook
对象从而新建一个Excel工作簿,新建的工作簿中会有三个默认工作表。 - 使用
Workbook.Worksheets.get_Item()
方法获取一个工作表。 - 定义数据列表,或从其他地方导入数据。
- 通过
Worksheet.Range.get_Item().Value
或.NumberValue
属性写入数据到工作表中。 - 通过
CellRange.Style
中的属性设置单元格格式。 - 使用
Worksheet.AutoFitColumn()
方法自动调整列宽。 - 创建
Stream
对象。 - 使用
Workbook.SaveToStream()
方法将Excel工作簿保存到Stream
对象。 - 将
Stream
对象转换为bytes
或bytearray
,或写入已有的bytearray
中。 - 释放资源。
代码示例
from spire.xls import Workbook, FileFormat, Stream, Color, HorizontalAlignType# 创建一个工作簿实例
workbook = Workbook()# 获取第一个工作表
sheet = workbook.Worksheets.get_Item(0)# 创建或读取一个二维数据列表
data = [["书名", "作者", "出版年份", "类型", "价格 (人民币)"],["了不起的盖茨比", "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],["动物庄园", "George Orwell", 1945, "寓言", 5.99],["指环王", "J.R.R. Tolkien", 1954, "奇幻", 14.99],["白鲸", "Herman Melville", 1851, "冒险", 11.99]
]# 将数据插入到工作表中
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 = valueelse:sheet.Range.get_Item(i + 1, j + 1).NumberValue = value# 格式化标题行
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# 格式化数据行
for i in range(1, sheet.AllocatedRange.Rows.Count):row = sheet.AllocatedRange.Rows.get_Item(i)row.Style.Font.FontName = "宋体"row.Style.Font.Size = 12row.Style.HorizontalAlignment = HorizontalAlignType.Leftrow.Style.Color = Color.FromRgb(255, 253, 208)if i % 2 == 0:row.Style.Color = Color.FromRgb(255, 248, 183)# 自动调整列宽
for i in range(sheet.AllocatedRange.Columns.Count):sheet.AutoFitColumn(i + 1)# 创建一个流对象
stream = Stream()# 将工作簿保存到流中
workbook.SaveToStream(stream, FileFormat.Version2016)# 将流转换为字节
bytes_data = stream.ToArray()# 将字节写入文件或按需要使用
with open("output/CreateExcelByStream.xlsx", "wb") as file:file.write(bytes_data)
运行结果
Python直接读取字节流中的Excel文件
我们可以使用Workbook.LoadFromStream(Stream(bytes))
方法直接从字节流中加载PDF文档,然后遍历工作表中已使用的单元格的行和列,通过Worksheet.AllocatedRange.get_Item().Value
属性直接读取单元格数据。以下是操作步骤示例:
- 导入所需模块。
- 创建
Workbook
对象。 - 使用
Workbook.LoadFromStream(Stream(bytes))
方法从字节流中加载Excel文件。 - 使用
Workbook.Worksheets.get_Item()
方法获取指定工作表。 - 遍历工作表中已使用的行和列,使用
Worksheet.AllocatedRange.get_Item().Value
属性获取单元格数据。 - 输出单元格数据或用于其他操作。
- 释放资源。
代码示例
from spire.xls import Workbook, Stream# 创建一个字节对象或使用现有的字节对象
with open("output/CreateExcelByStream.xlsx", "rb") as file:bytes_data = file.read()# 创建一个工作簿实例
workbook = Workbook()# 从字节流加载Excel文件
workbook.LoadFromStream(Stream(bytes_data))# 获取第一个工作表
sheet = workbook.Worksheets.get_Item(0)# 从工作表读取数据
# 创建一个列表来存储数据
data = []
for i in range(sheet.AllocatedRange.Rows.Count):# 获取一行数据row = sheet.AllocatedRange.Rows.get_Item(i)# 创建一个列表来存储该行的数据row_data = []for j in range(row.Cells.Count):# 获取单元格的值cellValue = sheet.AllocatedRange.get_Item(i + 1, j + 1).Valuerow_data.append(cellValue)data.append(row_data)# 打印数据或按需使用
for row in data:print(row)# 释放资源
workbook.Dispose()
运行结果
Python编辑字节流中的Excel文件
同样,我们也可以使用Workbook.LoadFromStream(Stream(bytes))
方法直接从bytes
或bytearray
中加载PDF文档,并对其进行修改编辑,然后使用Workbook.SaveToStream()
方法将其保存回字节流中,从而实现编辑字节流中的Excel文件。以下是操作步骤示例:
- 导入所需模块。
- 创建
Workbook
对象。 - 使用字节流创建
Stream
对象。 - 使用
Workbook.LoadFromStream()
方法从Stream
对象加载Excel文件。 - 使用
Workbook.Worksheets.get_Item()
方法获取指定工作表。 - 根据需要修改格式。
- 使用
Workbook.SaveToStream()
方法将Excel工作簿保存回Stream
对象。 - 将
Stream
对象转换为bytes
或bytearray
。 - 将字节流写入文件或用于其他用途。
- 释放资源。
代码示例
from spire.xls import Workbook, Stream, HorizontalAlignType, Color, FileFormat# 创建一个字节对象或使用现有的字节对象
with open("output/CreateExcelByStream.xlsx", "rb") as file:bytes_data = file.read()# 创建一个工作簿实例
workbook = Workbook()# 从字节流加载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))# 获取第一个工作表
sheet = workbook.Worksheets.get_Item(0)# 修改标题行的样式
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)# 修改数据行的样式
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 = 11row.Style.Color = Color.FromRgb(255, 237, 206)if i % 2 == 0:row.Style.Color = Color.FromRgb(255, 228, 181)# 自动调整列宽
for i in range(sheet.AllocatedRange.Columns.Count):sheet.AutoFitColumn(i + 1)# 保存修改后的Excel文件
streamTemp = Stream()
workbook.SaveToStream(streamTemp, FileFormat.Version2016)# 将流转换回字节
bytes_data = streamTemp.ToArray()# 将字节写入文件或按需使用
with open("output/ModifiedExcel.xlsx", "wb") as file:file.write(bytes_data)
运行结果
本文演示了如何用Python创建Excel工作簿保存到字节流,以及读取和修改字节流中的Excel工作簿。
申请免费License
相关文章:

用Python操作字节流中的Excel文档
Python能够轻松地从字节流中加载文件,在不依赖于外部存储的情况下直接对其进行读取、修改等复杂操作,并最终将更改后的文档保存回字节串中。这种能力不仅极大地提高了数据处理的灵活性,还确保了数据的安全性和完整性,尤其是在网络…...

python 桶排序(Bucket Sort)
桶排序(Bucket Sort) 桶排序是一种分布式排序算法,适用于对均匀分布的数据进行排序。它的基本思想是:将数据分到有限数量的桶中,每个桶分别排序,最后将所有桶中的数据合并。 桶排序的步骤: 划…...

Elasticsearch:探索 Elastic 向量数据库的深度应用
Elasticsearch:探索 Elastic 向量数据库的深度应用 一、Elasticsearch 向量数据库简介 1. Elasticsearch 向量数据库的概念 Elasticsearch 本身是一个基于 Lucene 的搜索引擎,提供了全文搜索和分析的功能。随着技术的发展,Elasticsearch 也…...

【每日学点鸿蒙知识】属性变量key、waterflow卡顿问题、包无法上传、Video控件播放视频、Vue类似语法
1、HarmonyOS 属性变量常量是否可以作为object对象的key? a: object new Object() this.a[Constants.TEST_KEY] "456" 可以先定义,再赋值 2、首页点击回到waterflow的首节点,0~index全部节点被重建,导致卡顿 使用s…...

小程序中引入echarts(保姆级教程)
hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…...

基于 Node.js 的 ORM(对象关系映射)工具——Sequelize介绍与使用,并举案例分析
便捷性介绍 支持多种数据库,包括 PostgreSQL、MySQL、MariaDB、SQLite 和 Microsoft SQL Server。Sequelize 提供了丰富的功能,帮助开发者用 JavaScript(或 TypeScript)代码操作数据库,而无需直接书写 SQL 语句。 Se…...

python 插入排序(Insertion Sort)
插入排序(Insertion Sort) 插入排序是一种简单的排序算法。它的基本思想是:将数组分为已排序部分和未排序部分,然后逐个将未排序部分的元素插入到已排序部分的正确位置。插入排序类似于整理扑克牌的过程。 插入排序的步骤&#…...

电子应用设计方案81:智能AI冲奶瓶系统设计
智能 AI 冲奶瓶系统设计 一、引言 智能 AI 冲奶瓶系统旨在为父母或照顾者提供便捷、准确和卫生的冲奶服务,特别是在夜间或忙碌时,减轻负担并确保婴儿获得适宜的营养。 二、系统概述 1. 系统目标 - 精确调配奶粉和水的比例,满足不同年龄段婴…...

JAVA高并发总结
JAVA高并发编程总结 在现代应用中,高并发编程是非常重要的一部分,尤其是在分布式系统、微服务架构、实时数据处理等领域。Java 提供了丰富的并发工具和技术,帮助开发者在多线程和高并发的场景下提高应用的性能和稳定性。以下是 Java 高并发编…...

【AIGC】使用Java实现Azure语音服务批量转录功能:完整指南
文章目录 引言技术背景环境准备详细实现1. 基础架构设计2. 实现文件上传功能3. 提交转录任务crul4. 获取转录结果 使用示例结果示例最佳实践与注意事项总结 引言 在当今数字化时代,将音频内容转换为文本的需求越来越普遍。无论是会议记录、视频字幕生成,…...

arcgis模版空库怎么用(一)
这里以某个项目的数据为例: 可以看到,属性表中全部只有列标题,无数据内容 可能有些人会认为空库是用来往里面加入信息的,其实不是,正确的用法如下: 一、下图是我演示用的数据,我们可以看到其中…...

【电机控制】基于STC8H1K28的六步换向——方波驱动(软件篇)
【电机控制】基于STC8H1K28的六步换向——方波驱动(软件篇) 文章目录 [TOC](文章目录) 前言一、main.c二、GPIO.c三、PWMA.c四、ADC.c五、CMP.c六、Timer.c七、PMSM.c八、参考资料总结 前言 【电机控制】STC8H无感方波驱动—反电动势过零检测六步换向法 …...

小程序配置文件 —— 13 全局配置 - window配置
全局配置 - window配置 这里讲解根目录 app.json 中的 window 字段,window 字段用于设置小程序的状态栏、导航条、标题、窗口背景色; 状态栏:顶部位置,有网络信号、时间信息、电池信息等;导航条:有一个当…...

全球域名市场科普之域名交易平台介绍——Sedo与Afternic
关于Dynadot Dynadot是通过ICANN认证的域名注册商,自2002年成立以来,服务于全球108个国家和地区的客户,为数以万计的客户提供简洁,优惠,安全的域名注册以及管理服务。 Dynadot平台操作教程索引(包括域名邮…...

leetcode108:将有序数组转化为二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确…...

截图技术方案
安卓截屏技术附带悬浮窗自动存储功能_安卓截图浮窗-CSDN博客 https://chat.baidu.com/search?dyTabStrMCwxMiwzLDEsMiwxMyw3LDYsNSw5&pdcsaitab&setypecsaitab&extParamsJson%7B%22apagelid%22%3A%2210990774271994514433%22%2C%22enter_type%22%3A%22a_ai_index%…...

程序员测试日常小工具
作为一名程序员,或者测试人员,日常工作最常用的工具有哪些,截图,截图漂浮,翻译,日期处理,api调用..., 当你拿到一串报文后,想要json转换时,是不是要打…...

Kubernetes: NetworkPolicy 的实践应用
一、Network Policy 是什么,在云原生领域有和作用 Network Policy 是 Kubernetes 官方提出来的一种网络策略的规范,用户通过编写符合对应规范的规则来控制 k8s 集群内 L3 和 L4 层的网络流量。 NetworkPolicy 主要的功能就是实现在云原生领域的容器网络管控它给用…...

HTML5滑块(Slider)
HTML5 的滑块(Slider)控件允许用户通过拖动滑块来选择数值。以下是如何实现一个简单的滑块组件的详细说明。 HTML5 滑块组件 1. 基本结构 使用 <input type"range"> 元素可以创建一个滑块。下面是基本实现的代码示例: <…...

数据结构与算法之动态规划: LeetCode 72. 编辑距离 (Ts版)
编辑距离 https://leetcode.cn/problems/edit-distance/description/ 描述 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 示例 1 输入&…...

洪水灾害多智能体分布式模拟示例代码
1. 环境定义:支持灾害动态、地理数据和分布式架构 import numpy as np import random import matplotlib.pyplot as plt# 新疆主要城市及邻接关系 XINJIANG_CITIES {Urumqi: [Changji, Shihezi],Changji: [Urumqi, Shihezi, Turpan],Shihezi: [Urumqi, Changji, K…...

【前端】Node.js使用教程
目录 一、?Node.js开发环境和编译 1.1 安装Node.js 1.2 创建一个Node.js项目 1.3 编写Node.js程序 1.4 运行Node.js程序 1.5 使用Node.js模块 二、高级的Node.js编程概念和示例 2.1 异步编程 2.2 错误处理 2.3 网络请求 2.4 构建Web服务器 2.5 数据库交互 三、No…...

django33全栈班2025年004 录入数据
前言 通过前面的学习, 我们已经算是Python基本入门了. 如果你能熟练的掌握的话, 至少让你换台电脑, 在新电脑上搭建Python的开发环境肯定是没问题的. 我们呢也学习了第一行Python代码, 但是我们不知道这行代码是什么意思, 为什么能够运行, 怎么就能输出到控制台呢? 还有, …...

小白投资理财 - 看懂 EPS 每股收益
小白投资理财 - 看懂 EPS 每股收益 什么是 EPSEPS 缺陷EPS 优点EPS 跟自己比EPS 跟别人比 总结 投资一家公司就要选择会赚钱的公司,我们最为关心的莫过于公司的盈利能力,只有会下蛋的鸡才是好鸡,买股票为的就是获得利润。想成为一位成功的投资…...

Pandas-apply自定义函数
文章目录 一. Series的apply方法1. 一个元素一个元素的传入2. apply传入一个参数函数2.apply传入多个参数函数 二. DataFrame的apply方法1. axis参数指定按行/ 按列(默认)传入数据2. apply使用 三. apply 使用案例1. 栗子12. 栗子2-列3. 栗子3-行 四. 向量化函数1. 使用np.vect…...

github 项目分享
今天和大家分享一些github上面搜到关于卫星遥感和水环境相关的项目。 一、WaterDetect 使用端到端算法去识别水体范围的算法,针对哨兵2卫星遥感数据可用。 项目地址: https://github.com/cordmaur/WaterDetect 二、DeepWaterMap 深度卷积神经网络去…...

与你共度的烟火日常
见过不少人、经过不少事、也吃过不少苦,感悟世事无常、人心多变,靠着回忆将往事串珠成链,聊聊感情、谈谈发展,我慢慢写、你一点一点看...... 我和她一起收拾完屋子,忙完已经中午了。她说:“咱们去趟超市吧&…...

基于Python的社交音乐分享平台
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...

Kafka的acks机制和ISR列表
Kafka 是一个流行的分布式流处理平台,用于构建实时数据流管道和应用程序。在 Kafka 中,acks 机制和 ISR(In-Sync Replicas)列表是两个重要的概念,它们共同确保消息的持久性和可靠性。 acks 机制 acks 机制是 Kafka 生…...

FreeRTOS: ISR(中断服务例程)和 TCB(任务控制块)
在讨论 ISR(中断服务例程)和 TCB(任务控制块,Task Control Block)时,我们实际上是在探讨 FreeRTOS 中两个不同但又相互关联的概念:一个是用于处理硬件或软件触发的中断事件,另一个是…...