Un método para utilizar un navegador para leer Excel local, josn y otros archivos de datos
1. Antecedentes
En términos generales, por razones de seguridad del acceso a la red, los navegadores no pueden cargar archivos locales directamente. Los navegadores basados en IE proporcionan el control AX para leer archivos locales. Chrome 86 y versiones posteriores también proporcionan las API correspondientes, pero todas existen. Limitaciones y problemas de compatibilidad . A veces, los desarrolladores solo quieren usar el navegador para compilar algunos scripts simples para completar algunas tareas y no quieren aprender C, C ++ y Python para generar archivos ejecutables
例如使用JavaScript脚本读取本地一个excel文件进行统计分析
. Pero debido a la limitación de que el navegador no puede usar archivos locales, tuve que rendirme. Este artículo analiza un método非IE内核浏览器读取本地excel数据的方法
para eludir esta limitación.
Para lograr este objetivo se utilizan Python, JavaScript, json, HTML y otros conocimientos, al mismo tiempo que los blogueros también encontraron esta solución estudiando otros artículos.
Para artículos relacionados, consulte:
https://blog.csdn.net/qq_41581588/article/details/129681572
https://blog.csdn.net/qq_30337695/article/details/51788007
2. Ideas de solución
La solución al problema es la siguiente:
- Utilice Python para leer archivos locales y convertirlos a archivos .js en formato json;
- Utilice etiquetas en el encabezado del archivo HTML
<script>
para presentar el archivo de datos .js convertido; - Utilice Python para abrir el navegador y cargar el archivo HTML correspondiente.
3. Implementación específica
(1) Utilice Python para leer archivos locales y convertirlos a archivos .js en formato json
Aquí nos referimos al código Python en Internet para leer archivos locales. Hemos leído Excel como ejemplo. Usamos la biblioteca json y la biblioteca xlrd2 para escribir un archivo .js que lee un único archivo de Excel y lo convierte al formato de datos json. . Entre 参数path
ellos 待读取的excel文件路径
, 参数name
por 转换后保存的.js文件名
. El código principal es el siguiente:
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
Luego compile la función de ejecución para probar el código anterior, lea el 题库.xls
archivo actual y genere excel_data.js
el archivo. El código de la función de ejecución es el siguiente:
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()
Los resultados de ejecución son los siguientes, 题库.xls
convertidos a excel_data.js
.
Abra 题库.xls
y excel_data.js
podrá ver que cada fila en Excel se convierte en datos de objetos json.
(2) Utilice etiquetas en el encabezado del archivo HTML <script>
para presentar el archivo de datos .js convertido
Con eso .js文件
, puede usar etiquetas en el encabezado del archivo HTML <script>
para introducir el archivo de datos .js convertido, lo cual se src="excel_data.js"
logra aquí usando. El código específico es el siguiente:
<!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>
El resultado del navegador es el siguiente: todos los datos de Excel se imprimen en la consola, lo que demuestra que el archivo de Excel local se leyó correctamente y los datos de Excel se pueden contar y mostrar de acuerdo con los requisitos.
(3) Utilice Python para abrir el navegador y cargar el archivo HTML correspondiente
El último paso es automatizar los dos pasos de ahora: use Python para convertir automáticamente Excel en un archivo .js y llame al navegador local para abrir el HTML correspondiente para automatizar todo el proceso. El código específico es el siguiente:
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. Resumen
En realidad, hay muchas formas de usar un navegador para leer archivos locales, incluido el uso de tecnologías como Node.js y Electron Framework, pero son algo difíciles y técnicamente exigentes de usar. Este artículo utiliza la tecnología simple Python + JavaScript + HTML para lograr algunas de los requisitos Las necesidades de escenas pequeñas. El código completo es el siguiente:
Además, el blogger original creó una herramienta de cepillado de preguntas de examen basada en el kernel de IE, y ahora se ha implementado utilizando este método. Finalmente se puede ejecutar en varios navegadores y no es necesario considerar la compatibilidad y otros problemas.
Dirección de descarga: una herramienta gratuita de redacción de preguntas escrita en Python+JavaScript+html, que permite al navegador leer archivos de Excel locales y personalizar el banco de preguntas.