当前位置: 首页 > news >正文

用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()方法将其保存到指定的bytesbytearray中。以下是操作步骤示例:

  1. 导入所需模块。
  2. 创建Workbook对象从而新建一个Excel工作簿,新建的工作簿中会有三个默认工作表。
  3. 使用Workbook.Worksheets.get_Item()方法获取一个工作表。
  4. 定义数据列表,或从其他地方导入数据。
  5. 通过Worksheet.Range.get_Item().Value.NumberValue属性写入数据到工作表中。
  6. 通过CellRange.Style中的属性设置单元格格式。
  7. 使用Worksheet.AutoFitColumn()方法自动调整列宽。
  8. 创建Stream对象。
  9. 使用Workbook.SaveToStream()方法将Excel工作簿保存到Stream对象。
  10. Stream对象转换为bytesbytearray,或写入已有的bytearray中。
  11. 释放资源。

代码示例

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工作簿保存为字节流

Python直接读取字节流中的Excel文件

我们可以使用Workbook.LoadFromStream(Stream(bytes))方法直接从字节流中加载PDF文档,然后遍历工作表中已使用的单元格的行和列,通过Worksheet.AllocatedRange.get_Item().Value属性直接读取单元格数据。以下是操作步骤示例:

  1. 导入所需模块。
  2. 创建Workbook对象。
  3. 使用Workbook.LoadFromStream(Stream(bytes))方法从字节流中加载Excel文件。
  4. 使用Workbook.Worksheets.get_Item()方法获取指定工作表。
  5. 遍历工作表中已使用的行和列,使用Worksheet.AllocatedRange.get_Item().Value属性获取单元格数据。
  6. 输出单元格数据或用于其他操作。
  7. 释放资源。

代码示例

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文件的数据

Python编辑字节流中的Excel文件

同样,我们也可以使用Workbook.LoadFromStream(Stream(bytes))方法直接从bytesbytearray中加载PDF文档,并对其进行修改编辑,然后使用Workbook.SaveToStream()方法将其保存回字节流中,从而实现编辑字节流中的Excel文件。以下是操作步骤示例:

  1. 导入所需模块。
  2. 创建Workbook对象。
  3. 使用字节流创建Stream对象。
  4. 使用Workbook.LoadFromStream()方法从Stream对象加载Excel文件。
  5. 使用Workbook.Worksheets.get_Item()方法获取指定工作表。
  6. 根据需要修改格式。
  7. 使用Workbook.SaveToStream()方法将Excel工作簿保存回Stream对象。
  8. Stream对象转换为bytesbytearray
  9. 将字节流写入文件或用于其他用途。
  10. 释放资源。

代码示例

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工作簿

本文演示了如何用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. 获取转录结果 使用示例结果示例最佳实践与注意事项总结 引言 在当今数字化时代,将音频内容转换为文本的需求越来越普遍。无论是会议记录、视频字幕生成&#xff0c…...

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

数据结构与算法之动态规划: LeetCode 72. 编辑距离 (Ts版)

编辑距离 https://leetcode.cn/problems/edit-distance/description/ 描述 给你两个单词 word1 和 word2&#xff0c; 请返回将 word1 转换成 word2 所使用的最少操作数你可以对一个单词进行如下三种操作&#xff1a; 插入一个字符删除一个字符替换一个字符 示例 1 输入&…...

集团化全员学习企业在线学习平台选型指南|政企专属解决方案

在数字化人才培养浪潮下&#xff0c;集团化全员学习已成为央企、国企、大型上市公司的核心战略&#xff0c;而一款稳定、可管控、高合规的企业在线学习平台&#xff0c;是支撑万人级培训的核心底座。传统分散式培训存在管理混乱、标准不统一、效果不可追溯等痛点&#xff0c;本…...

外部系统调用SAP数据?用ABAP RFC函数搭个“桥梁”其实很简单(含Function Group创建避坑)

跨系统数据整合&#xff1a;ABAP RFC函数的设计哲学与实战指南 当企业数字化转型进入深水区&#xff0c;业务系统间的数据孤岛问题日益凸显。某零售企业的供应链总监最近就面临这样的挑战&#xff1a;"我们的电商平台需要实时获取SAP中的库存数据&#xff0c;但每次手工导…...

快速傅里叶变换(FFT)原理与工程实践:从分治算法到信号处理应用

1. 从时域到频域&#xff1a;为什么我们需要FFT&#xff1f;如果你曾经处理过音频信号、图像数据&#xff0c;或者调试过通信系统&#xff0c;那你一定对“频谱”这个概念不陌生。我们生活的世界是时间的函数&#xff0c;声音随着时间起伏&#xff0c;图像像素在空间上排列&…...

DeepSeek-R1 MoE架构逆向工程报告(基于HuggingFace源码+NCCL trace分析):专家粒度、FFN维度与token路由热力图首次披露

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek-R1 MoE架构逆向工程总览 DeepSeek-R1 是一款基于稀疏混合专家&#xff08;Mixture of Experts, MoE&#xff09;架构的大语言模型&#xff0c;其推理与训练行为在公开文档中未完全披露。本章聚焦于通…...

小白程序员必看:四步轻松构建你的第一个AI编码Agent,收藏学习!

本文详细介绍了如何通过四个步骤构建一个基础的AI编码Agent&#xff0c;包括接入大型语言模型&#xff08;LLM&#xff09;、添加实用工具&#xff08;如读取、写入和执行文件&#xff09;、构建Agent循环以及实现对话循环。文章以Python语言为例&#xff0c;逐步引导读者完成整…...

影刀RPA跨境店群自动化实战:Python协同Chromium底层调度与容器化环境隔离系统架构

定了。在这场旷日持久的跨境电商反爬风控拉锯战中&#xff0c;我们终于用一套基于 Python 深度协同的分布式微服务调度架构&#xff0c;重塑了跨境千店矩阵的自动化底座。 这几天&#xff0c;科技圈被“DeepSeek V4 首发华为昇腾芯片&#xff0c;国产 AI 开始打破英伟达 CUDA …...

Sitara处理器PRU-ICSS架构解析:工业自动化信息传输系统设计实战

1. 项目概述&#xff1a;工业自动化中的信息传输挑战与Sitara方案在工业自动化领域&#xff0c;信息传输的实时性、可靠性与灵活性&#xff0c;直接决定了生产线的“智商”与“反应速度”。想象一下&#xff0c;一条高速运转的汽水装瓶线&#xff0c;如果无法在毫秒级内感知到原…...

手把手教你创建CST自定义材料:以吸波材料为例,导入厂家S参数曲线

手把手教你创建CST自定义材料&#xff1a;以吸波材料为例&#xff0c;导入厂家S参数曲线 在电磁仿真领域&#xff0c;材料参数的精确建模往往是决定仿真结果可靠性的关键因素。当我们需要模拟特殊频段的吸波材料、频率色散介质或各向异性材料时&#xff0c;仅依赖CST内置材料库…...

保姆级教程:在Ubuntu 22.04上为DCU-Z100(ZiFang)安装ROCm 4.5.2驱动及完整工具链

国产AI加速卡DCU-Z100&#xff08;ZiFang&#xff09;全栈部署指南&#xff1a;从驱动安装到开发环境配置 在人工智能计算领域&#xff0c;国产硬件正逐步崭露头角。DCU-Z100&#xff08;代号ZiFang&#xff09;作为一款自主研发的深度学习计算单元&#xff0c;为开发者提供了全…...

Gregwar/Captcha图像效果详解:扭曲、线条、背景与透明度的艺术

Gregwar/Captcha图像效果详解&#xff1a;扭曲、线条、背景与透明度的艺术 【免费下载链接】Captcha PHP Captcha library 项目地址: https://gitcode.com/gh_mirrors/capt/Captcha 在PHP验证码开发中&#xff0c;Gregwar/Captcha库以其出色的图像效果和安全性能脱颖而出…...