python读取Excel内容并展示成json

news2025/1/21 16:30:03

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。

伙伴们,又是许久未曾见面了。最近也是在忙着加班,加上没有新技术的输入和产出,所以推迟了一些。

今天分享的主题是:python读取Excel内容并展示成json

还是先来介绍一下我的背景:昨天突然接到了这样的活,需要用python解析Excel中多个sheet文件的内容,并最终展示成格式化的json。一想,这个我拿手啊,记得shigen之前有一篇这样的文章:如何在终端查看excel内容,岂不是可以直接派上场了。然而事实是我大意了,我没有考虑到excel中存在的部分单元格是函数计算出来的情况。为了更好的说明问题,我先来模拟一个表格看看:

带函数的表格

表格中的数据全都是我用程序生成的,可参考文章:一个脚本,实现随机数据生成自由

那我们依旧用之前的程序读取会怎么样子呢?

控制台读取Excel

发现很正常,但昨天就是不行,是我多疑了?我一看,昨天的文件是xlsm格式的,意思也就是现在的文件是带有的。那到时候继续用那个文件试试吧。

现在,我们来实现读取文件并选取指定的范围展示成json的格式。先来看看实现的效果吧:

文件内容矩阵显示

json的格式显示

发现基本是符合预期的,那现在看看代码吧,主要的依赖库可以直接先安装:

pip3 install numpy xlwings

直接执行一下的代码即可,具体的代码、函数调用可参考代码中的注释和文档:

# -*- encoding: utf-8 -*-
__date__ = '2023/12/23 12:04:32'

import json
import numpy as np
import xlwings as xw


def get_sheet_matrix(file_path: str, sheet_name: str, start_cell: str, end_cell: str) ->np.ndarray:
    """
    从指定的 Excel 文件中获取指定工作表、区域的数据,并返回一个 NumPy 矩阵。

    Args:
        file_path (str): Excel 文件的路径。
        sheet_name (str): 要读取数据的工作表名称。
        start_cell (str): 起始单元格的位置,例如 'A1'。
        end_cell (str): 结束单元格的位置,例如 'C3'。

    Returns:
        numpy.ndarray: 包含指定区域数据的二维数组矩阵。

    Raises:
        FileNotFoundError: 如果文件路径不存在或无法访问。
        ValueError: 如果起始单元格或结束单元格的位置格式不正确。

    Example:
        # 示例用法
        file_path = 'path/to/file.xlsx'
        sheet_name = 'Sheet1'
        start_cell = 'A1'
        end_cell = 'C3'
        matrix = get_sheet_matrix(file_path, sheet_name, start_cell, end_cell)
        print(matrix)
    """
    app = xw.App(visible=False)
    workbook = app.books.open(file_path)
    sheet = workbook.sheets[sheet_name]
    # 获取指定区域的值并构建二维列表
    values = sheet.range(start_cell, end_cell).value
    # 将二维列表转换为 NumPy 矩阵
    matrix = np.array(values)
    workbook.close()
    app.quit()

    return matrix

def matrix_to_json(matrix: np.ndarray) -> str:
    """
    将矩阵数据转换为 JSON 格式。

    Args:
        matrix: 二维 NumPy 数组,包含表头和数据。

    Returns:
        JSON 格式的字符串。
    """
    headers = matrix[0]
    data = matrix[1:]

    json_data = []
    for row in data:
        item = {}
        for i in range(len(headers)):
            item[headers[i]] = row[i]
        json_data.append(item)

    json_str = json.dumps(json_data, indent=2, ensure_ascii=False)
    return json_str

if __name__ == '__main__':
    # 此处必须写绝对路径
    file_path = '/Users/zzzz/Downloads/demo.xlsm'
    sheet_name = 'Sheet1'
    start_cell = 'A1'
    end_cell = 'D11'
    matrix = get_sheet_matrix(file_path, sheet_name, start_cell, end_cell)
    print(matrix)
    print(matrix_to_json(matrix))

关于解析xlsm文件中的单元格为函数的问题,后期也会持续的分享,欢迎持续的关注。


以上就是今天分享的全部内容了,觉得不错的话,记得点赞 在看 关注支持一下哈,您的鼓励和支持将是shigen坚持日更的动力。同时,shigen在多个平台都有文章的同步,也可以同步的浏览和订阅:

平台账号链接
CSDNshigen01shigen的CSDN主页
知乎gen-2019shigen的知乎主页
掘金shigen01shigen的掘金主页
腾讯云开发者社区shigenshigen的腾讯云开发者社区主页
微信公众平台shigen公众号名:shigen

shigen一起,每天不一样!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1330557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpaceDesk如何连接平板/PC(生产力副屏)

1、下载安装 分为安卓端和PC端,两个设备都需要安装对应的软件。 SpaceDesk官网 https://link.zhihu.com/?targethttp%3A//spacedesk.net/ 需要魔法上网。安装过程比较简单,无脑下一步即可。 我已经把安装包准备好了,如果不想自己找&#…

公众号申请已达上限解决方法

一般可以申请多少个公众号?自2018年11月16日起,进行申请上限调整:1、同一个邮箱只能申请1个公众号;2、同一个手机号码可绑定5个公众号;3、同一身份证申请个人类型公众号数量上限为1个;4、同一企业、个体工商…

WebAssembly 的魅力:高效、安全、跨平台(上)

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

ElasticSearch学习篇9_文本相似度计算方法现状以及基于改进的 Jaccard 算法代码实现

背景 XOP亿级别题库的试题召回以及搜题的举一反三业务场景都涉及使用文本相似搜索技术,学习此方面技术以便更好的服务于业务场景。 目前基于集合的Jaccard算法以及基于编辑距离的Levenshtein在计算文本相似度场景中有着各自的特点,为了优化具体的计算时…

windos/ubuntu20.4下UE4.27.2像素流送

windows/ubuntu20.4下UE4.27.2像素流送 像素流送技术可以将服务器端打包的虚幻引擎应用程序在客户端的浏览器上运行,用户可以通过浏览器操作虚幻引擎应用程序,客户端无需下载虚幻引擎,本文实现两台机器通过物理介质网线实现虚幻引擎应用程序…

Jenkins Pipeline脚本优化:为Kubernetes应用部署增加状态检测

引言 在软件部署的世界中,Jenkins已经成为自动化流程的代名词。不断变化的技术环境要求我们持续改进部署流程以满足现代应用部署的需要。在本篇博客中,作为一位资深运维工程师,我将分享如何将Jenkins Pipeline进化至不仅能支持部署应用直至R…

【电源专题】Buck电源上电震荡谁的错?

在文章:【电源专题】案例:Buck芯片上电瞬间波形震荡?从别的人案例中来学习软启参数中我们通过别人的文章了解到了Buck芯片上电瞬间波形震荡有几个方法可以解决,但主要还是围绕着软启动参数去学习。因为文章中无法知道编者所用的电源芯片和电路,所以无法进行分析。 最近我…

Mysql之约束下篇

Mysql之约束下篇 自增列(AUTO_INCREMENT)关键字特点和要求添加自增约束删除自增约束Mysql8.0新特性-自增变量的持久化 FOREIGN KEY 约束关键字主表和从表/父表和子表特点添加外键约束约束等级删除外键约束面试问题 DEFAULT约束作用关键字添加默认值约束删除默认值约束 CHECK约束…

Leetcode—445.两数相加II【中等】

2023每日刷题(六十七) Leetcode—445.两数相加II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2…

k8s启动docker容器Error: Could not find or load main class ${start-class}报错

前行提要: 今天部署采集点服务(docker项目)发现报这个错误。 提出假设: 1,配置文件错误(工程需要配置的东西比较多) 之后开始一一排查,发现配置有问题,但是不是这个错误…

Blazor 混合开发_MAUI+Vue_WPF+Vue

MAUI+Vue 混合开发 背景混合开发的核心为什么必须使用 wwwroot 文件夹放置 Web 项目文件 创建 MAUI 项目创建 wwwroot 文件夹服务注册创建 _import.razor添加 Main.razor 组件修改 MainPage.xaml 文件 创建 WPF 项目创建 wwwroot 文件夹服务注册创建 _import.razor添…

DALL-E:Zero-Shot Text-to-Image Generation

DALL-E 论文是一个文本生成图片模型。 训练分为两个阶段 第一阶段,训练一个dVAE(discrete variational autoencoder离散变分自动编码器),其将256 x 256的RGB图片转换为32 x 32的图片token。目的:降低图片的分辨率。图…

12 Vue3中使用v-if指令实现条件渲染

概述 v-if指令主要用来实现条件渲染,在实际项目中使用得也非常多。 v-if通常会配合v-else-if、v-else指令一起使用,可以达到多个条件执行一个,两个条件执行一个,满足一个条件执行等多种场景。 下面,我们分别演示这三…

最新国内AI绘画Midjourney绘画提示词Prompt分享

一、Midjourney绘画工具 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭…

Linux的常用命令及用法案例

概述 Linux 文件与目录结构 Linux 文件 Linux 系统中一切皆文件。 Linux 目录结构 VI/VIM 编辑器 是什么 VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器。 VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器。可以主动的以字体颜 色辨别语法的正确性…

GrayLog日志平台的基本使用-docker容器日志接入

1、/etc/docker/daemon.json中加入如下配置并重启服务 [rootlocalhost src]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"], "log-driver": "gelf", "log-opts":…

Vue2+Vue3组件间通信方式汇总(2)------$emit

组件间通信方式是前端必不可少的知识点,前端开发经常会遇到组件间通信的情况,而且也是前端开发面试常问的知识点之一。接下来开始组件间通信方式第二弹------$emit,并讲讲分别在Vue2、Vue3中的表现。 Vue2Vue3组件间通信方式汇总(1&#xff0…

linux基础06—windows下打不开wsl的ubuntu的子系统

一小时前还好好的,然后就打不开了,显示如下白板: (1)检查wsl 命令行输入:wsl -l -v 看是否有反应,如下所示: ctrlc退出,如果问题是控制流保护(Control Flow Guard)导致的…

WT2605C音频蓝牙语音芯片:单芯片实现蓝牙+MP3+BLE+电话本多功能应用

在当今的电子产品领域,多功能、高集成度成为了一种趋势。各种产品都需要具备多种功能,以满足用户多样化的需求。针对这一市场趋势,唯创知音推出了一款集成了蓝牙、MP3播放、BLE和电话本功能的音频蓝牙语音芯片——WT2605C,实现了单…

多用户商城系统哪个好,我的B2B2C电商系统选型之路

选择适合自己的B2B2C电商系统需要考虑多个因素,包括系统功能、易用性、扩展性、安全性和成本等。以下是一些常见的多用户商城系统供您参考: 1. 商淘云 基本情况:广州商淘信息科技有限公司旗下品牌,这家起步过程在国内商户中算比较…