收藏
回答

云函数保存数据到excel报错?TypeError: Cannot read property '0

之前有另一个云函数整理数据库的文件,已打印验证之前那个云函数没问题,大概1300行10列左右的数据

现在这个excel云函数用来读然后存到excel里,

之后要上传到云存储

问题就是出现在excel云函数读完数据存不下来,

但不知道是数

报错:

11/08 23:00:07:821

[excel][1]

ERROR RequestId: b5df872c-7e96-43f3-8b15-30a6078d380f Result: TypeError: Cannot read property '0' of undefined

at exports.main (/var/user/index.js:39:49)

at IncomingMessage.<anonymous> (/data/scf/frame/node12/runtime.js:246:26)

at IncomingMessage.emit (events.js:323:22)

at endReadableNT (_stream_readable.js:1204:12)

at processTicksAndRejections (internal/process/task_queues.js:84:21)


excel云函数代码:

// 云函数入口文件
const cloud = require('wx-server-sdk')
const moment = require("moment-timezone")
cloud.init({ 
  traceUser: true,
  env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境


//操作excel用的类库
const xlsx = require('xlsx');


// 云函数入口函数
exports.main = async(event, context) => {


    let {userdata} = event
    
      // javascript date
    //  console.log(new Date()); // 2021-03-16T08:04:07.441Z (UTC+0
    //  console.log(moment().tz("Asia/Shanghai").format()); // 2021-03-16T16:04:07+08:00 (UTC+8)
    let curDate = moment().tz("Asia/Shanghai").format('YYYYMMDDHHmmss');
    //let curDate =new Date().toISOString()
    //1,定义excel表格名
    let dataCVS = 'xiaofu101_order_list_'+curDate+'.xlsx'
    //2,定义存储数据的
    let alldata = [];
    //let row = ['status','receiver']; //表属性
    let row=['_id' , 'orderDate', 'region','address','receiver','phone'
    ,'SchoolName','cloth_id','cloth_notes','num','cloth_price','totalPrice','status']
    alldata.push(row);
    console.log('excel before loop:'+alldata)
    let count = 0
    for (let key in userdata) {
      for (let i in userdata[key]['product']){
        let arr = [];
        arr.push(userdata[key]._id);
        arr.push(userdata[key].orderDate);
        arr.push(userdata[key]['address'].region[0]+'-'
        +userdata[key]['address'].region[1]+'-'
        +userdata[key]['address'].region[2]);
        arr.push(userdata[key]['address'].address);
        arr.push(userdata[key]['address'].receiver);
        arr.push(userdata[key]['address'].phone);
        arr.push(userdata[key].curSchoolName);
        arr.push(userdata[key]['product'][i].cloth_id);
        arr.push(userdata[key]['product'][i].cloth_notes);
        arr.push(userdata[key]['product'][i].cloth_price);
        arr.push(userdata[key]['product'][i].num);
        arr.push(userdata[key].totalPrice);
        arr.push(userdata[key].status);
        alldata.push(arr)
        
      }
      count += 1
      console.log(count)
    }
    console.log('excel has data:'+alldata)
    //3,把数据保存到excel里
    const buffer = xlsx.utils.book_new();
    const worksheet = xlsx.utils.aoa_to_sheet(alldata);
    xlsx.utils.book_append_sheet(buffer, worksheet, 'mySheetName');
    const excelBuffer = xlsx.write(buffer, { type: 'buffer' });
    console.log('buffer has data : ', excelBuffer);
    //4,把excel文件保存到云存储里
    console.log(dataCVS)
    return await cloud.uploadFile({
      cloudPath: dataCVS,
      fileContent: excelBuffer, //excel二进制文件
      
    })


}


这条语句没有执行打印出来,

console.log('excel has data:'+alldata)


 console.log(count)打印出来了


说明错可能是在上面 alldata.push(arr)


但不知道是保存的数据类型造成的property '0' of undefined还是怎么回事,

请问怎么同时调式2个云函数,现在只能调式1个excel云函数,不能模拟传数据库数据的情况

最后一次编辑于  星期二 01:51
回答关注问题邀请回答
收藏

2 个回答

  • 李龙
    李龙
    11-09

    你好。我也这个问题。

    我是做了要给扫码程序,识别二维码信息,添加备注和照片,然后上传。

    最终进行导出。导出无法导出。无法生产excel。

    11-09
    有用
    回复 1
    • 杨六郎
      杨六郎
      星期二 01:49
      用gt lt where condition不停的缩小数据范围终于找到数据问题了:是有一个行json数据没有region这个column,所以导致报错,给那个数据加上region就好了。
      星期二 01:49
      回复
  • 跨商通
    跨商通
    11-09

    undefined的错误。JS程序员第一个应该学会排查的问题类型。

    xxx.yyy,说明xxx的值是undefined,打印一下。

    11-09
    有用
    回复 2
    • 杨六郎
      杨六郎
      发表于移动端
      11-09
      应该就是alldata.push(arr) 那有问题 之前在循环里打印arr是有数据的 但最后execel has data那没执行
      11-09
      回复
    • 杨六郎
      杨六郎
      发表于移动端
      11-09
      不知道是push的问题还是数据类型造成push不进去?之前几个月都没问题,那以前的数据应该没问题
      11-09
      回复
登录 后发表内容