微信小程序导入导出到excel

补充在最前面:导入不一定用这么复杂的,比如下面的思路就是,把数据复制到粘贴板,然后从粘贴板上取数据,数据处理完成后,可以导入云数据库,也可以导出到站贴板。下面这段看起来有点乱。主要是处理省市县镇村 5级,把表格数据转换成json数据,一开始用导入excle在处理的想法,现在看太愚蠢了,既然数据有了,从粘贴板拿是最方便的。拿来怎么处理就看你自己需求。

//复制第一次
 copyabc()
  {
    let that=this
    var firstarr={}
    var copyarr={}
    wx.getClipboardData({
      success (res){
        let str=res.data
        str = str.replace(/[\r\n]/g,"");
   //  console.log(str);
   //  str='{"_id":"1","c":['+str+']}';
   //  console.log(str);
   copyarr=JSON.parse(str)
   copy234=copyarr.c
   //  console.log(copy234)
      }
    })     
  },
// 复制第二次
  copypost(){
    let that=this
    var arr=[]
    var zoom=[]
    var copyarr={}
    var isbk=false
    wx.getClipboardData({
      success (res){
        let str=res.data
        str = str.replace(/[\r\n]/g,"");
      //  str = str.replace(/}/g,"");
     //   str = str.replace(/{/g,"");
     //   console.log(str)
     str=str.slice(0,-1);
  //   console.log(str);
     str='{"_id":"1","c":['+str+']}';
   //  console.log(str);
     copyarr=JSON.parse(str)
     console.log(copyarr)
     arr=copyarr.c;

     for(let i=0;i<arr.length;i++)
     {
      let ccode=arr[i].c
      let cname=arr[i].n
      for(let j1=0;copy234.length;j1++)
      {
        let arr1=copy234[j1]
       if(ccode.substr(0,4)==arr1.c)
       {
         let arr1d=arr1.d
        for(let j2=0;arr1d.length;j2++)
        {
          let arr2=arr1d[j2]
          if(ccode.substr(0,6)==arr2.c)
         { let arr2d=arr2.d
          for(let j3=0;arr2d.length;j3++)
          {
            let arr3=arr2d[j3]
            if(ccode.substr(0,9)==arr3.c)
            {
             arr3.d.push(arr[i])
             isbk=true
             break;
            }
         
          }
         }
         if(isbk)
         {break}
        }
       }
       if(isbk)
       {break}
      }
    isbk=false

     }

   //  console.log(copy234)
  let outarr=[]
  let outstr=''
     for(let i=0;i<copy234.length;i++)
     {
       let arr=copy234[i]
       let js1={
         _id:arr.c,
        n:arr.n,
        d:arr.d
     }
     outstr=outstr+JSON.stringify(js1)+'\n'
      }
    //  console.log(outstr)
      
      wx.setClipboardData({
        data:outstr,
        success: function(res) {
        },
        fail: function(res) {
        }
      });  
    }
   
  })
   //console.log(tdate)

  },

导入excel到微信参考文字:小程序读取excel表格数据,并存储到云数据库 | 微信开放社区

测试过,能够成功;下面是几个代码段,复制方便一点,

小程序端的代码

  chooseExcel (){
    let that = this 
    wx.chooseMessageFile ({
    count :1,
    type :'file',
    success ( res ){
    let path = res . tempFiles [0]. path ;
    console . log ("选择 excel 成功", path )
     that . uploadExcel ( path );
     }
    })},
    uploadExcel ( path ){
      let that = this 
      wx.cloud.uploadFile ({
      cloudPath : new Date (). getTime ()+'.xls', 
      filePath : path ,//文件路径
      success : res =>{
      console .log("上传成功", res.fileID)
      that.jiexi ( res . fileID )},
      fail: err =>{
      console . log ("上传失败", err )}
     }) },
     jiexi ( fileId ){
      wx.cloud. callFunction ({
      name :"excel",
      data :{
      fileID : fileId},
      success ( res ){
      console . log ("解析并上传成功", res )},
      fail ( res ){
      console . log ("解析失败", res )}
     }) },

云函数的代码---数据库里边先建个intable表,应该就能成功了

const cloud = require('wx-server-sdk')
cloud.init({env: 'alpha-xxxx'})
var xlsx = require('node-xlsx');
const db = cloud.database()
exports.main = async(event, context) => {
  let {
    fileID
  } = event
  //1,通过fileID下载云存储里的excel文件
  const res = await cloud.downloadFile({
    fileID: fileID,
  })
  const buffer = res.fileContent

  const tasks = [] //用来存储所有的添加数据操作
  //2,解析excel文件里的数据
  const all_excel_data = [] 
  var colmax=1;
  var idtop='';
  var sheets = xlsx.parse(buffer); //获取到所有sheets
  sheets.forEach(function(sheet) {
    console.log(sheet['name']);
    var col= sheet['data'][0];
    for(let i=0;i<50;i++){
      if(col[i]==""||col[i]==undefined)
      {colmax=i;
        console.log(colmax+'')
        break}
    }
    for (var rowId in sheet['data']) {
      console.log(rowId);
      var row = sheet['data'][rowId]; //第几行数据
      if (rowId < 3+1){
        for(let i=0;i<colmax;i++){
        row[i]=row[i]+'';
        idtop=idtop+'"hd'+String(rowId)+String(i)+'":"'+row[i].trim()+'",'
        };

      }
      
      if (rowId > 3 && row) { //第一行是表格标题,所有我们要从第2行开始读
        //3,把解析到的数据存到excelList数据表里
        var idetail=''
        for(let i=0;i<colmax;i++){
          if(row[i]==undefined){row[i]=''}
          row[i]=row[i]+'';
          idetail=idetail+'"bd'+String(i)+'":"'+row[i].trim()+'",'
          };
        idetail=idetail.slice(0,-1);
        console.log(idetail)
        all_excel_data.push(JSON.parse('{'+idetail+'}'))
      }
    }
  });

  // 等待所有数据添加完成
  idtop=idtop.slice(0,-1);
  console.log(idtop)
  idtop=JSON.parse('{'+idtop+'}')
  console.log(idtop)
  var result=await db.collection('intable').add({data:
    {
    tbody:all_excel_data,
    thead:idtop,
    colmax:colmax,
    dt:new Date(). getTime()
    }}).then(res=>{
    return res
  }).catch(err=>{return err})
  return result
}

--导出到excel,两个方案

第一个还是按上面文字类似的思路,云函数解决(本地解决就要本地安装这个包,包本身可能太大,小程序打包完了不一定能够上传,本人没测试过),第一步读取数据-打包生成excel,然后上传到云存储,返回链接,把链接给客户。

第二个思路:

简单一点,1、读取数据,拼接成文字 2、文字复制到粘贴板,

3、客户把数据粘贴到微信留言,然后粘贴到或者直接粘贴到excel,excel分列,完成

(用excel 里边分列是 \t,分行是回车\n,单元格内的回车暂时没办法用JS解决,现在的解决方案是在vba中解决,用替换的方式解决,就是比如js中替换成****,然后在vba中替换成char(10),下面这段代码放在thiswordbook中,()换成回车,后面这段代码是用来调整行距的,加了回车,自动调整一下行距比较舒服)

Sub abc()

For Each c In Range("A1:B100")
If InStr(c.Value, "()") > 0 Then c.Value = Replace(c.Value, "()", Chr(10))
Next

 
Rem 第1行到第100行进行一次循环(可根据需要自己改行数)
For i = 1 To 100
 
Rem 隐藏行不执行(可根据需要自己修改,进行了更新,如果需要执行隐藏行请参考下面图片里的代码)
If Not Rows(i).Hidden Then
 
Rem 第i行调整为最适合行高(如果不需要此步骤删除下面的代码)
Rows(i).AutoFit
 
Rem 第i行高度+6(可根据需要自己改高度)
Rows(i).RowHeight = Rows(i).RowHeight + 6
 
End If
 
Next

End Sub

下面是拼成文本和复制到粘贴板的代码,都没修改,用的是源码,没把里边的多余去掉

  getnew()
  { let that=this
    inlist.limit(1).get().then(res => {
      /**
      
       */
      if (res.data.length == 0) {
        wx.showToast({
          title: '无出入库数据',
          icon: 'none'
        });
			return;	
      }
   let arr=res.data[0].incar
   var instr='carno;cname;tel;cardid;cfrom;cto;inidtime;rk\n';
   var outstr='carno;cname;tel;cardid;cfrom;cto;inidtime;outtime;rk\n';
   for(let j=0;j<arr.length;j++){
    //var obj2={sobj:JSON.stringify(arr[j]),tdate:that.js_date_time(tdate)}
    let obj2={jid:j,selfdt:that.js_ymd(arr[j].inid)}
    let obj3={...arr[j],...obj2} 
  that.data.inlist.push(obj3)
  instr=instr+arr[j].carno+';'+arr[j].cname+';'+arr[j].tel+';'+arr[j].cardid+';'+arr[j].cfrom+';'+arr[j].cto+';'+that.js_ymd(arr[j].inid)+';'+arr[j].rk+';\n';
}
    let arr2=res.data[0].outcar
    for(let j=0;j<arr2.length;j++){
     //var obj2={sobj:JSON.stringify(arr[j]),tdate:that.js_date_time(tdate)}
     let obj2={jid:j,selfdt:that.js_ymd(arr2[j].outid),inidtime:that.js_ymd(arr2[j].inid)}
     let obj3={...arr2[j],...obj2} 
     outstr=outstr+arr2[j].carno+';'+arr2[j].cname+';'+arr2[j].tel+';'+arr2[j].cardid+';'+arr2[j].cfrom+';'+arr2[j].cto+';'+that.js_ymd(arr2[j].inid)+';'+that.js_ymd(arr2[j].outid)+';'+arr2[j].rk+';\n';
   that.data.outlist.push(obj3)
     }
that.data.instr=instr;
that.data.outstr=outstr;
    })
  },
  copyin(){
    let that=this
    wx.setClipboardData({
      data: that.data.instr,
      success: function(res) {
      },
      fail: function(res) {
      }
    });

  },
  copyout(){
    let that=this
    wx.setClipboardData({
      data: that.data.outstr,
      success: function(res) {
      },
      fail: function(res) {
      }
    });
  },

最后,欢迎尝试一下微信小程序-复制就好,里边就是一些带有源码的小案例。

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序导出Excel文件有几种方法。一种方法是使用服务器来生成Excel文件,然后将文件链接返回给客户端。这可以通过云函数来实现,首先读取数据并生成Excel文件,然后将文件上传到云存储,并将文件链接返回给客户端。这种方法需要有服务器来支持,并且需要安装相关的包。\[3\] 另一种方法是在客户端本地生成Excel文件。Excel文件本身是一个压缩文件,可以通过创建Excel的目录结构,逐个文件和文件夹创建,然后将文件压缩为.xlsx文件。这种方法不需要服务器支持,但是生成效率可能较低。\[2\] 根据你的需求,你可以选择适合你的方法来实现微信小程序导出Excel文件。 #### 引用[.reference_title] - *1* *2* [微信小程序生成Excel](https://blog.csdn.net/ZackSock/article/details/125980913)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [微信小程序导入导出excel](https://blog.csdn.net/countsun/article/details/124073292)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值