一、背景
一般來說,為了網(wǎng)絡訪問安全,瀏覽器是不能直接加載本地文件的,IE內(nèi)核的瀏覽器提供了AX控件實現(xiàn)本地文件的讀取,Chrome 86 版本后也提供了相應的API,但都存在使用限制和兼容性問題。有時開發(fā)者只是想利用瀏覽器編制一些簡單的腳本完成一些任務,不想學習C、C++、Python生成exe這么大動作,
例如使用JavaScript腳本讀取本地一個excel文件進行統(tǒng)計分析
。但由于瀏覽器無法使用本地文件這個限制,只好放棄。本文討論研究一種非IE內(nèi)核瀏覽器讀取本地excel數(shù)據(jù)的方法
,繞開這個限制。
為了實現(xiàn)這個目標這里使用到了Python、JavaScript、json、HTML等知識,同時博主也是通過學習其他文章找了這種解決方案。
相關(guān)文章詳見:
https://blog.csdn.net/qq_41581588/article/details/129681572
https://blog.csdn.net/qq_30337695/article/details/51788007
二、解決思路
問題的解決思路如下:
- 使用python讀取本地文件并轉(zhuǎn)換為json格式的.js文件;
- 在HTML文件頭使用
<script>
標簽引入轉(zhuǎn)換后的.js數(shù)據(jù)文件; - 使用python打開瀏覽器加載對應的HTML文件。
三、具體實現(xiàn)
(一)使用python讀取本地文件并轉(zhuǎn)換為json格式的.js文件
這里參考了網(wǎng)上的python讀取本地文件代碼,已讀取excel為例子,使用了json庫、xlrd2庫編寫了讀取單個excel文件轉(zhuǎn)換為json數(shù)據(jù)格式的.js文件。其中參數(shù)path
為待讀取的excel文件路徑
,參數(shù)name
為轉(zhuǎn)換后保存的.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的名稱,行數(shù),列數(shù)
# 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函數(shù)測試上面的代碼,讀取當前目前下的題庫.xls
文件,輸出excel_data.js
文件,run函數(shù)代碼如下:
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()
運行結(jié)果如下,題庫.xls
轉(zhuǎn)換成了excel_data.js
。
打開題庫.xls
和excel_data.js
,可以看到excel里面的每一行轉(zhuǎn)換為json的對象數(shù)據(jù)。
(二)在HTML文件頭使用<script>標簽引入轉(zhuǎn)換后的.js數(shù)據(jù)文件
有了.js文件
,就可以在HTML文件頭使用<script>
標簽引入轉(zhuǎn)換后的.js數(shù)據(jù)文件,這里通過使用src="excel_data.js"
實現(xiàn)。具體代碼如下:
<!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>
瀏覽器輸出結(jié)果如下,把excel的數(shù)據(jù)都打印到控制臺了,證明讀取本地excel文件成功了,后續(xù)可以根據(jù)需求統(tǒng)計和展示excel的數(shù)據(jù)。
(三)使用python打開瀏覽器加載對應的HTML文件
最后就是剛才兩個步驟的自動化,使用python自動把excel轉(zhuǎn)為.js文件,調(diào)用本地瀏覽器打開對應的HTML,實現(xiàn)整個流程自動化。具體代碼如下:
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()
四、小結(jié)
使用瀏覽器讀取本地文件其實有很多實現(xiàn)方式,包括使用Node.js和Electron框架等技術(shù),但這些都使用起來多少有點難度和技術(shù)門檻,本文使用簡單的Python+JavaScript+HTML技術(shù)實現(xiàn),滿足一些小場景的需求。完整代碼如下:
下載地址:【一種使用瀏覽器讀取本地excel、josn等數(shù)據(jù)文件的方法】Python+JavaScript+HTML實現(xiàn)文章來源:http://www.zghlxwxcb.cn/news/detail-729255.html
另外,原來博主基于IE內(nèi)核做了一個考試刷題工具,現(xiàn)在也改成使用本方法實現(xiàn)了,終于可以在各種瀏覽器運行,不再需要考慮兼容性等問題。
下載地址:Python+JavaScript+html編寫的免費刷題工具,可以實現(xiàn)瀏覽器讀取本地excel文件,自定義題庫文章來源地址http://www.zghlxwxcb.cn/news/detail-729255.html
到了這里,關(guān)于【一種使用瀏覽器讀取本地excel、josn等數(shù)據(jù)文件的方法】Python+JavaScript+HTML實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!