Um método para usar um navegador para ler Excel local, josn e outros arquivos de dados
1. Fundo
De modo geral, por uma questão de segurança de acesso à rede, os navegadores não podem carregar arquivos locais diretamente. Os navegadores baseados no IE fornecem o controle AX para ler arquivos locais. O Chrome 86 e versões posteriores também fornecem APIs correspondentes, mas todas existem. Limitações e problemas de compatibilidade . Às vezes, os desenvolvedores desejam apenas usar o navegador para compilar alguns scripts simples para concluir algumas tarefas e não querem aprender C, C++ e Python para gerar exe, um passo tão grande
例如使用JavaScript脚本读取本地一个excel文件进行统计分析
. Mas devido à limitação de que o navegador não pode usar arquivos locais, tive que desistir. Este artigo discute um método非IE内核浏览器读取本地excel数据的方法
para contornar essa limitação.
Para atingir esse objetivo são utilizados Python, JavaScript, json, HTML e outros conhecimentos.Ao mesmo tempo, os blogueiros também encontraram essa solução estudando outros artigos.
Para artigos relacionados, consulte:
https://blog.csdn.net/qq_41581588/article/details/129681572
https://blog.csdn.net/qq_30337695/article/details/51788007
2. Ideias de soluções
A solução para o problema é a seguinte:
- Use python para ler arquivos locais e convertê-los em arquivos .js no formato json;
- Use tags no cabeçalho do arquivo HTML
<script>
para apresentar o arquivo de dados .js convertido; - Use python para abrir o navegador e carregar o arquivo HTML correspondente.
3. Implementação específica
(1) Use python para ler arquivos locais e convertê-los em arquivos .js no formato json
Aqui nos referimos ao código python na Internet para leitura de arquivos locais. Lemos o Excel como exemplo. Usamos a biblioteca json e a biblioteca xlrd2 para escrever um arquivo .js que lê um único arquivo Excel e o converte em formato de dados json . Entre 参数path
eles 待读取的excel文件路径
, 参数name
para 转换后保存的.js文件名
. O código principal é o seguinte:
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
Em seguida, compile a função de execução para testar o código acima, leia o 题库.xls
arquivo atual e produza excel_data.js
o arquivo. O código da função de execução é o seguinte:
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()
Os resultados da execução são os seguintes, 题库.xls
convertidos em excel_data.js
.
Aberto 题库.xls
e excel_data.js
, você pode ver que cada linha no Excel é convertida em dados do objeto JSON.
(2) Use tags no cabeçalho do arquivo HTML <script>
para apresentar o arquivo de dados .js convertido
Com isso .js文件
, você pode usar <script>
tags no cabeçalho do arquivo HTML para apresentar o arquivo de dados .js convertido, o que é src="excel_data.js"
feito aqui usando. O código específico é o seguinte:
<!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>
A saída do navegador é a seguinte: Todos os dados do Excel são impressos no console, o que prova que o arquivo Excel local foi lido com sucesso. Os dados do Excel podem ser contados e exibidos de acordo com os requisitos.
(3) Use python para abrir o navegador e carregar o arquivo HTML correspondente
A última etapa é automatizar as duas etapas agora: use python para converter automaticamente o Excel em um arquivo .js e chame o navegador local para abrir o HTML correspondente para automatizar todo o processo. O código específico é o seguinte:
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()
4. Resumo
Na verdade, existem muitas maneiras de usar um navegador para ler arquivos locais, incluindo o uso de tecnologias como Node.js e estrutura Electron, mas elas são um tanto difíceis e tecnicamente exigentes de usar. Este artigo usa tecnologia simples Python+JavaScript+HTML para alcançar alguns dos requisitos.As necessidades de pequenas cenas. O código completo é o seguinte:
Além disso, o blogueiro original criou uma ferramenta de escovação de perguntas do exame baseada no kernel do IE, e agora ela foi implementada usando esse método, podendo finalmente ser executada em vários navegadores e não há necessidade de considerar compatibilidade e outros problemas.
Endereço de download: Uma ferramenta gratuita de escovação de perguntas escrita em Python+JavaScript+html, que permite ao navegador ler arquivos Excel locais e personalizar o banco de perguntas