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

作者:

文章目录
  • 本文介绍了基于openpyxl库实现从URL读取Excel文件并提取单元格内容和样式信息的方法。主要实现了两个功能:1)获取指定Sheet指定区域的单元格值及样式(如字体大小、颜色、背景色等);2)获取Excel中所有Sheet名称列表。文章详细说明了核心思路、完整代码实现及测试示例,并总结了注意事项和适用场景。该方法无需将Excel保存到本地,适合微服务和接口调用场景,可用于报表解析、在线预览、样式还原等多种业务需求。
  • 在实际业务中,我们经常会遇到这样的需求: Excel 文件不在本地,而是通过 HTTP URL 提供 需要读取 Excel 中指定 Sheet 不仅要读取单元格的值,还要获取: 字体大小 字体颜色 背景色 主题色 字体名称等样式信息 同时支持获取 所有 Sheet 名称列表 本文基于 openpyxl,实现了两个实用函数: 根据 URL + Sheet 名称 + 单元格范围,读取单元格内容和样式 根据 URL,获取 Excel 中所有 Sheet 名称
  • 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)
  • theme / rgb 可能为空:必须先判断类型,否则会报错 区域遍历是二维结构:sheet["A2:A5"] 返回的是「行数组」 Excel 不落盘,适合微服务 / 接口调用 异常建议细化:实际生产可区分网络异常、Sheet 不存在、区域错误等
  • 报表解析服务 Excel 在线预览 样式还原 BI / 数据分析前置处理 后端接口返回 Excel 元信息 到此这篇关于Python使用openpyxl从URL读取Excel并获取单元格样式的文章就介绍到这了,更多相关Python openpyxl读取Excel内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: Python使用openpyxl与pandas读取Excel文件的对比详解 从基础到高级技巧详解Python openpyxl设置Excel边框的完全指南 Python基于PyQt5和openpyxl实现Excel单元格合并工具 Python使用openpyxl读取Excel的操作详解 python使用Openpyxl操作Excel文件的实现 python使用openpyxl打开及读取excel表格过程 如何在python中使用openpyxl库读写Excel.xlsx文件(有参考列程)
  • 目录
    • 摘要
    • 一、背景说明
    • 二、环境准备
      • 1. Python 版本
      • 2. 安装依赖
    • 三、核心思路
      • 从 URL 读取 Excel 文件
      • 获取 Sheet
      • 按区域读取单元格
    • 四、完整代码实现
      • 获取指定 Sheet 指定区域的单元格信息
      • 获取 Excel 中的所有 Sheet 名称
    • 五、测试示例
      • 六、运行结果示例
        • 单元格信息返回结果
        • Sheet 列表返回结果
      • 七、注意事项与坑点总结
        • 八、适用场景

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

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

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

          需要读取 Excel 中指定 Sheet

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

          • 字体大小
          • 字体颜色
          • 背景色
          • 主题色
          • 字体名称等样式信息

          同时支持获取 所有 Sheet 名称列表

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

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

          Python 3.7+
          

          pip install openpyxl
          

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

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

          sheet = wb[sheet_name]
          

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

          cell_3 = sheet[sheet_info]
          

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

          for row in cell_3:
              for column in row:
                  ...
          

          from openpyxl import load_workbook
          import io
          import urllib.request
          
          def get_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 名称获取 sheet
                  sheet = wb[sheet_name]
          
                  # 获取指定区域
                  cell_3 = sheet[sheet_info]
          
                  for row in cell_3:
                      for column in row:
                          js = {}
                          js['row'] = column.coordinate
                          js['value'] = str(column.value)
                          js['font_sz'] = column.font.sz
          
                          # 字体主题色
                          if isinstance(column.font.color.theme, int):
                              js['font_theme'] = column.font.color.theme
                          else:
                              js['font_theme'] = -1
          
                          # 垂直对齐方式
                          if column.font.vertAlign is None:
                              js['vertAlign'] = "None"
                          else:
                              js['vertAlign'] = column.font.vertAlign
          
                          # 字体 RGB 颜色
                          if isinstance(column.font.color.rgb, str):
                              js['font_color'] = column.font.color.rgb
                          else:
                              js['font_color'] = ""
          
                          # 背景 RGB 颜色
                          if isinstance(column.fill.start_color.rgb, str):
                              js['back_color'] = column.fill.start_color.rgb
                          else:
                              js['back_color'] = ""
          
                          # 字体名称
                          js['name'] = column.font.name
          
                          # 背景主题色
                          if isinstance(column.fill.fgColor.theme, int):
                              js['back_theme'] = column.fill.fgColor.theme
                          else:
                              js['back_theme'] = -1
          
                          me.append(js)
          
                  res['code'] = "500"
                  res['msg'] = "未获取excel信息"
                  res['data'] = me
                  return res
          
              except Exception:
                  res['code'] = "400"
                  res['msg'] = "url获取失败"
                  return res
          

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

          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)
          

          {
            "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
              }
            ]
          }
          

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

          theme / rgb 可能为空:必须先判断类型,否则会报错

          区域遍历是二维结构:sheet["A2:A5"] 返回的是「行数组」

          Excel 不落盘,适合微服务 / 接口调用

          异常建议细化:实际生产可区分网络异常、Sheet 不存在、区域错误等

          • 报表解析服务
          • Excel 在线预览
          • 样式还原
          • BI / 数据分析前置处理
          • 后端接口返回 Excel 元信息

          到此这篇关于Python使用openpyxl从URL读取Excel并获取单元格样式的文章就介绍到这了,更多相关Python openpyxl读取Excel内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

          您可能感兴趣的文章:

          • Python使用openpyxl与pandas读取Excel文件的对比详解
          • 从基础到高级技巧详解Python openpyxl设置Excel边框的完全指南
          • Python基于PyQt5和openpyxl实现Excel单元格合并工具
          • Python使用openpyxl读取Excel的操作详解
          • python使用Openpyxl操作Excel文件的实现
          • python使用openpyxl打开及读取excel表格过程
          • 如何在python中使用openpyxl库读写Excel.xlsx文件(有参考列程)

          站内搜索