大屏开发-无Input读取本地Excel文件的两种方式

281 阅读1分钟

开发大屏的时候,读取excel作为数据源,但并不用上传按钮做手工上传,二是读取本地文件

1.JS读取Excel

excel文件和js文件同目录

  fetch("./demo.xlsx",{
    responseType: 'blob'
  }).then(res=>{
    return res.blob();
  }).then(result=>{
    //此处格式是blob
    afterFetch(result);
  })
const afterFetch = (blob)=>{
    //将blob格式转换成文件格式,如果是input控件上传,此处得到的直接是file格式,就不需要用fetch读取文件blob再进行转换了。
    const f = new File([blob], 'aa', {type: blob.type});
    //构建reader对象
    let reader = new FileReader();
    reader.onload = function(e){
          //获取文件二进制数据流
          let data = e.currentTarget.result;
          //利用XLSX解析二进制文件为xlsx对象
          let workbook = read(data,{type:'binary'});
          //利用XLSX把wb第一个sheet转换成JSON对象
          //workbook.SheetNames[0]是获取Sheets中第一个Sheet的名字
          //workbook.Sheets[Sheet名]获取为Sheet名称的数据
          title_data.value = utils.sheet_to_json(workbook.Sheets[wb.SheetNames[0]])[0];
          //在此处进行数据/业务逻辑的操作
          //TODO
     }
     //使用reader对象以二进制读取文件对象f,
     reader.readAsBinaryString(f);
}

2.python读取excel

import pandas as pd

#读取 read_excel
#sheet_name如果为数字则是读取excel第n个sheet,如果是字符串则是读取sheet名为此的sheet
#nrows是前400行内容
#header是以第4行为表头
datas = pd.read_excel("./demo.xlsx", sheet_name=13,nrows=400,header=4)

#排序sort_values
#按照表头为name的列进行排序,ascending为true是正序,false是倒序
datas =datas.sort_values(by='name',ascending=False)

#连表查询merge
datas2 = pd.read_excel("./demo2.xlsx", sheet_name=1,nrows=400,header=1)
#选取sn和count2列
datas2.loc[:,["sn","count"]]
#以sn为连接字段,得到sn相同的 datas中的字段和datas2中的count,类似于sql中的join on
datas = datas.merge(datas2,on='sn')