news 2026/4/17 12:22:20

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/13 11:50:27

中小企业 AI 专利轻量化落地策略:不烧钱也能搞定核心资产

在 AI 大模型专利赛道上,中小企业往往陷入 “不布局没竞争力,布局又烧钱” 的两难 —— 大企业动辄投入百万级算力、组建全栈团队,而中小企业资源有限,既扛不住高额研发成本,也耗不起漫长的专利周期。但实际上&#xf…

作者头像 李华
网站建设 2026/4/18 3:38:54

浏览器资源嗅探实战:猫抓扩展深度使用指南

浏览器资源嗅探实战:猫抓扩展深度使用指南 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页视频无法保存而苦恼?猫抓扩展作为一款高效的浏览器资源嗅探工具&#xff…

作者头像 李华
网站建设 2026/4/16 15:01:06

297. Java Stream API - Java Stream API 中的 reduce() 方法详解

文章目录297. Java Stream API - Java Stream API 中的 reduce() 方法详解🎯 第一种:reduce(identity, accumulator)✅ 特点:📌 示例讲解:⚠️ 注意:你提供的 identity 必须真的是该操作的单位元&#xff0…

作者头像 李华
网站建设 2026/4/11 12:34:22

OpenCore Simplify:智能自动化Hackintosh配置终极指南

OpenCore Simplify:智能自动化Hackintosh配置终极指南 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾经因为复杂的EFI配置而对Ha…

作者头像 李华
网站建设 2026/3/15 3:04:13

AMD处理器深度调优实战:解锁Ryzen隐藏性能的终极指南

AMD处理器深度调优实战:解锁Ryzen隐藏性能的终极指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://git…

作者头像 李华