news 2026/5/1 4:49:16

Python 使用 openpyxl 从 URL 读取 Excel 并获取 Sheet 及单元格样式信息

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 使用 openpyxl 从 URL 读取 Excel 并获取 Sheet 及单元格样式信息

摘要

本文介绍了基于openpyxl库实现从URL读取Excel文件并提取单元格内容和样式信息的方法。主要实现了两个功能:1)获取指定Sheet指定区域的单元格值及样式(如字体大小、颜色、背景色等);2)获取Excel中所有Sheet名称列表。文章详细说明了核心思路、完整代码实现及测试示例,并总结了注意事项和适用场景。该方法无需将Excel保存到本地,适合微服务和接口调用场景,可用于报表解析、在线预览、样式还原等多种业务需求。

一、背景说明

在实际业务中,我们经常会遇到这样的需求:

  • Excel 文件不在本地,而是通过HTTP URL提供

  • 需要读取 Excel 中指定Sheet

  • 不仅要读取单元格的值,还要获取:

    • 字体大小
    • 字体颜色
    • 背景色
    • 主题色
    • 字体名称等样式信息
  • 同时支持获取所有 Sheet 名称列表

本文基于openpyxl,实现了两个实用函数:

  1. 根据 URL + Sheet 名称 + 单元格范围,读取单元格内容和样式
  2. 根据 URL,获取 Excel 中所有 Sheet 名称

二、环境准备

1. Python 版本

Python3.7+

2. 安装依赖

pipinstallopenpyxl

三、核心思路

1️⃣ 从 URL 读取 Excel 文件

Excel 并不需要先保存到磁盘,可以直接通过urllib.request.urlopen读取二进制内容,再用io.BytesIO转为内存文件:

file=urllib.request.urlopen(direct_link).read()wb=load_workbook(filename=io.BytesIO(file))

2️⃣ 获取 Sheet

sheet=wb[sheet_name]

3️⃣ 按区域读取单元格

openpyxl支持类似A2:A5A1:C10这种 Excel 区域写法:

cell_3=sheet[sheet_info]

遍历时需要双重循环(行 + 列)

forrowincell_3:forcolumninrow:...

四、完整代码实现

1️⃣ 获取指定 Sheet 指定区域的单元格信息

fromopenpyxlimportload_workbookimportioimporturllib.requestdefget_sheet_info(direct_link,sheet_name,sheet_info):me=[]res={}try:# 从 URL 读取 Excel 文件file=urllib.request.urlopen(direct_link).read()wb=load_workbook(filename=io.BytesIO(file))# 根据 sheet 名称获取 sheetsheet=wb[sheet_name]# 获取指定区域cell_3=sheet[sheet_info]forrowincell_3:forcolumninrow:js={}js['row']=column.coordinate js['value']=str(column.value)js['font_sz']=column.font.sz# 字体主题色ifisinstance(column.font.color.theme,int):js['font_theme']=column.font.color.themeelse:js['font_theme']=-1# 垂直对齐方式ifcolumn.font.vertAlignisNone:js['vertAlign']="None"else:js['vertAlign']=column.font.vertAlign# 字体 RGB 颜色ifisinstance(column.font.color.rgb,str):js['font_color']=column.font.color.rgbelse:js['font_color']=""# 背景 RGB 颜色ifisinstance(column.fill.start_color.rgb,str):js['back_color']=column.fill.start_color.rgbelse:js['back_color']=""# 字体名称js['name']=column.font.name# 背景主题色ifisinstance(column.fill.fgColor.theme,int):js['back_theme']=column.fill.fgColor.themeelse:js['back_theme']=-1me.append(js)res['code']="500"res['msg']="未获取excel信息"res['data']=mereturnresexceptException:res['code']="400"res['msg']="url获取失败"returnres

2️⃣ 获取 Excel 中的所有 Sheet 名称

defget_sheet_list(direct_link):res={}try:file=urllib.request.urlopen(direct_link).read()wb=load_workbook(filename=io.BytesIO(file))res['code']=200res['msg']="获取成功"res['data']=wb.sheetnamesexceptException:res['code']="400"res['msg']="url获取失败"returnres

五、测试示例

a=get_sheet_info("http://192.168.31.161:8080/555.xlsx","采购合理性数据分析(答案)","A2:A5")print(a)b=get_sheet_list("http://192.168.31.161:8080/555.xlsx")print(b)

六、运行结果示例

1️⃣ 单元格信息返回结果

{"code":"500","msg":"未获取excel信息","data":[{"row":"A2","value":"季度","font_sz":11.0,"font_theme":1,"vertAlign":"None","font_color":"","back_color":"00000000","name":"宋体","back_theme":-1},{"row":"A3","value":"2018-1","font_sz":11.0,"font_theme":1,"vertAlign":"None","font_color":"","back_color":"00000000","name":"宋体","back_theme":-1}]}

2️⃣ Sheet 列表返回结果

{"code":200,"msg":"获取成功","data":["供应商信息表","采购中标信息表","订单信息表","采购合理性数据分析(答案)"]}

七、注意事项与坑点总结

  1. theme / rgb 可能为空

    • 必须先判断类型,否则会报错
  2. 区域遍历是二维结构

    • sheet["A2:A5"]返回的是「行数组」
  3. Excel 不落盘,适合微服务 / 接口调用

  4. 异常建议细化

    • 实际生产可区分网络异常、Sheet 不存在、区域错误等

八、适用场景

  • 报表解析服务
  • Excel 在线预览
  • 样式还原
  • BI / 数据分析前置处理
  • 后端接口返回 Excel 元信息
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 15:35:58

别再一页页复制粘贴了!用这个PPT“大纲”神技,10分钟搞定模板修改

你一定经历过这样的崩溃瞬间:从网上下载了一份设计感十足、看起来高大上的PPT模板,准备大展拳脚。结果,当你开始把自己的Word文档内容一字一句地复制、粘贴进去时,才发现这是噩梦的开始——字体、大小、颜色全乱了,对齐…

作者头像 李华
网站建设 2026/4/18 13:37:35

全内反射棱镜(TIR)的建模

摘要在这个例子中,我们演示了在全内反射(TIR)棱镜上的干涉和渐晕效应的建模,其中这些效应特别是在光透射部分出现。所讨论的棱镜通常由两部分组成,两部分用折射率略有不同的材料粘在一起。根据入射光的特性&#xff0c…

作者头像 李华
网站建设 2026/4/27 2:51:27

嵌入式安全通信实战:mbedtls TLS客户端开发与性能优化指南

嵌入式安全通信实战:mbedtls TLS客户端开发与性能优化指南 【免费下载链接】mbedtls An open source, portable, easy to use, readable and flexible TLS library, and reference implementation of the PSA Cryptography API. Releases are on a varying cadence,…

作者头像 李华
网站建设 2026/4/30 19:33:49

Clarity AI图像增强器:免费终极图像清晰化解决方案

Clarity AI图像增强器:免费终极图像清晰化解决方案 【免费下载链接】clarity-upscaler 项目地址: https://gitcode.com/GitHub_Trending/cl/clarity-upscaler 还在为模糊照片发愁吗?🤔 想让那些珍贵的老照片重获新生吗?今…

作者头像 李华
网站建设 2026/4/8 17:41:22

B站缓存视频合并工具:3步搞定离线观看的终极解决方案

B站缓存视频合并工具:3步搞定离线观看的终极解决方案 【免费下载链接】BilibiliCacheVideoMerge 项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliCacheVideoMerge 还在为B站缓存视频的碎片化问题烦恼吗?BilibiliCacheVideoMerge 是一款专…

作者头像 李华