Python+JavaScript实现浏览器读取本地excel数据

 更新时间:2025年09月10日 09:36:56   作者:神奇的代码在哪里  
一般来说,为了网络访问安全,浏览器是不能直接加载本地文件的,本文主要讨论研究一种非IE内核浏览器读取本地excel数据的方法,绕开这个限制,希望对大家有所帮助

一、背景

一般来说,为了网络访问安全,浏览器是不能直接加载本地文件的,IE内核的浏览器提供了AX控件实现本地文件的读取,Chrome 86 版本后也提供了相应的API,但都存在使用限制和兼容性问题。有时开发者只是想利用浏览器编制一些简单的脚本完成一些任务,不想学习C、C++、Python生成exe这么大动作,例如使用JavaScript脚本读取本地一个excel文件进行统计分析。但由于浏览器无法使用本地文件这个限制,只好放弃。本文讨论研究一种非IE内核浏览器读取本地excel数据的方法,绕开这个限制。

为了实现这个目标这里使用到了Python、JavaScript、json、HTML等知识,同时博主也是通过学习其他文章找了这种解决方案。

二、解决思路

问题的解决思路如下:

  • 使用python读取本地文件并转换为json格式的.js文件;
  • 在HTML文件头使用<script>标签引入转换后的.js数据文件;
  • 使用python打开浏览器加载对应的HTML文件。

三、具体实现

使用python读取本地文件并转换为json格式的.js文件

这里参考了网上的python读取本地文件代码,已读取excel为例子,使用了json库、xlrd2库编写了读取单个excel文件转换为json数据格式的.js文件。其中参数path为待读取的excel文件路径,参数name为转换后保存的.js文件名。主要代码如下:

import os
import json
import xlrd2
import excel2json
import webbrowser

fileTypeArray = [".xlsx", ".xls"]
def readExecl(path, name):
    print(path)
    workbook = xlrd2.open_workbook(path)
    sheet2_name = workbook.sheet_names()[0]
    sheet = workbook.sheet_by_name(sheet2_name)  
    # sheet索引从0开始
    # sheet的名称,行数,列数
    # print sheet.name,sheet.nrows,sheet.ncols

    adict = {}

    for i in range(1, sheet.nrows):
        data = {}
        for j in range(0, sheet.ncols):
            value = TransformationType(sheet.cell_value(i, j))
            if isinstance(value, str):
                if isJsonString(value):
                    data[TransformationType(sheet.cell_value(0, j))] = eval(value)
                else:
                    data[TransformationType(sheet.cell_value(0, j))] = value
            else:
                data[TransformationType(sheet.cell_value(0, j))] = value
            adict[TransformationType(sheet.cell_value(i, 0))] = data

    data = json.dumps(adict, indent=1, ensure_ascii=False)
    excel_data = "data = " + data
    _json_save_path = os.getcwd() + "/" + name + '.js'
    f = open(_json_save_path, 'w', encoding='utf-8')
    f.write(excel_data)
    f.close()
    print("already create json:" + path)
    return data, _json_save_path

def isJsonString(str):
    try:
        eval(str)
    except Exception as e:
        return False
    return True


def TransformationType(var):
    if isinstance(var, float):  # type(var) == 'float':
        str1 = int(var)
    elif isinstance(var, str):  # type(var) == 'unicode':
        str1 = var
    else:
        raise Exception("type is not deal")
        str1 = var
    return str1

然后编制run函数测试上面的代码,读取当前目前下的题库.xls文件,输出excel_data.js文件,run函数代码如下:

def run():
    _file_path = os.getcwd() + "/" + "题库.xls"
    _filename = os.path.basename(_file_path)
    _json_data = excel2json.readExecl(_file_path, "excel_data")

if __name__ == '__main__':
    run()

运行结果如下,题库.xls转换成了excel_data.js

打开题库.xlsexcel_data.js,可以看到excel里面的每一行转换为json的对象数据。

在HTML文件头使用<script>标签引入转换后的.js数据文件

有了.js文件,就可以在HTML文件头使用<script>标签引入转换后的.js数据文件,这里通过使用src="excel_data.js"实现。具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>读取excel</title>
    <script type="text/javascript" src="excel_data.js"></script>
</head>
<body>
    <script type="text/javascript">
      let data_list = Object.values(data)
	  data_len = data_list.length
	  console.log(data_list)
	  console.log(data_len)
    </script>
</body>
</html>

浏览器输出结果如下,把excel的数据都打印到控制台了,证明读取本地excel文件成功了,后续可以根据需求统计和展示excel的数据。

使用python打开浏览器加载对应的HTML文件

最后就是刚才两个步骤的自动化,使用python自动把excel转为.js文件,调用本地浏览器打开对应的HTML,实现整个流程自动化。具体代码如下:

def run():
    _file_path = os.getcwd() + "/" + "题库.xls"
    _filename = os.path.basename(_file_path)
    _json_data = excel2json.readExecl(_file_path, "excel_data")
    _url = os.getcwd() + "/" + "index.html"
    webbrowser.open(_url)

if __name__ == '__main__':
    run()

四、小结

使用浏览器读取本地文件其实有很多实现方式,包括使用Node.js和Electron框架等技术,但这些都使用起来多少有点难度和技术门槛,本文使用简单的Python+JavaScript+HTML技术实现,满足一些小场景的需求。

到此这篇关于Python+JavaScript实现浏览器读取本地excel数据的文章就介绍到这了,更多相关Python浏览器读取本地文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中def()函数的实战练习题

    Python中def()函数的实战练习题

    def是define的缩写,用来自定义函数,下面这篇文章主要给大家介绍了关于Python中def()函数的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Python图像分割之均匀性度量法分析

    Python图像分割之均匀性度量法分析

    均匀性度量图像分割是图像像素分割的一种方法,当然还有其他很多的方法。本文将主要介绍下其原理和实现代码,感兴趣的小伙伴可以学习一下
    2021-12-12
  • Python实现简易超市管理系统

    Python实现简易超市管理系统

    这篇文章主要为大家详细介绍了python如何实现简易超市管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-09-09
  • 如何利用python多线程爬取天气网站图片并保存

    如何利用python多线程爬取天气网站图片并保存

    最近做个天 气方面的APP需要用到一些天气数据,所以下面这篇文章主要给大家介绍了关于如何利用python多线程爬取天气网站图片并保存的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-11-11
  • python爬取51job中hr的邮箱

    python爬取51job中hr的邮箱

    这篇文章主要为大家详细介绍了python爬取51job中hr的邮箱的相关资料,需要的朋友可以参考下
    2016-05-05
  • python标准库模块之json库的基础用法

    python标准库模块之json库的基础用法

    json库是处理JSON格式的Python标准库,json库主要包括两类函数,操作函数和解析函数,下面这篇文章主要给大家介绍了关于python标准库模块之json库的基础用法,需要的朋友可以参考下
    2022-06-06
  • Python中利用all()来优化减少判断的实例分析

    Python中利用all()来优化减少判断的实例分析

    在本篇文章里小编给大家整理的是一篇关于Python中利用all()来优化减少判断的实例分析内容,有需要的朋友们可以学习下。
    2021-06-06
  • Django 登录注册的实现示例

    Django 登录注册的实现示例

    本文主要介绍了Django 登录注册的实现示例,这是做网页登录和注册基本上都是必要一步,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • python 实现在Excel末尾增加新行

    python 实现在Excel末尾增加新行

    下面小编就为大家分享一篇python 实现在Excel末尾增加新行,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python 将日期戳(五位数时间)转换为标准时间

    python 将日期戳(五位数时间)转换为标准时间

    这篇文章主要介绍了python 将日期戳(五位数时间)转换为标准时间的实现方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07

最新评论