补充在最前面:导入不一定用这么复杂的,比如下面的思路就是,把数据复制到粘贴板,然后从粘贴板上取数据,数据处理完成后,可以导入云数据库,也可以导出到站贴板。下面这段看起来有点乱。主要是处理省市县镇村 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
下面是拼成文本和复制到粘贴板的代码,都没修改,用的是源码,没把里边的多余去掉文章来源:https://www.toymoban.com/news/detail-493142.html
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) {
}
});
},
最后,欢迎尝试一下微信小程序-复制就好,里边就是一些带有源码的小案例。文章来源地址https://www.toymoban.com/news/detail-493142.html
到了这里,关于微信小程序导入导出到excel的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!