返回所有符合条件的行

时间:2021-04-04 07:09:06

标签: javascript google-apps-script telegram-bot

伙计们我正在学习谷歌应用程序脚本到电报机器人, 我写了自动回复命令并且回复成功,如果我发送@02-02-2021,它将显示当天所有记录的数据,但在我的代码中它只返回1行,我尝试了任何方法但没有任何效果。 感谢您的帮助,

function searchDataByTanggalTransaksi(Tanggal){
  var rangeNameTransaksi = "Transaksi!A2:O";
  var rowsTransaksi = Sheets.Spreadsheets.Values.get(MYSSID, rangeNameTransaksi).values;
  var panjangTransaksi = rowsTransaksi.length;
  var Tanggal, Nama_Item, Divisi, Sat, Qty, Harga_Satuan, Debet, Kredit, Saldo, Peruntukan, Total  = "";
  var pesan ="";
    for (var row = 0; row < panjangTransaksi; row++ ){
    if ("@" + rowsTransaksi[row][1]==Tanggal){
      Tanggal = "?   Tanggal Transaksi : " + rowsTransaksi[row][1];
      Nama_Item = rowsTransaksi[row][2];
      Divisi = rowsTransaksi[row][3];
      Sat = rowsTransaksi[row][4];
      Qty = rowsTransaksi[row][5];
      Harga_Satuan = rowsTransaksi[row][6];
      Debet = rowsTransaksi[row][7];
      Kredit = rowsTransaksi[row][8];
      Saldo = rowsTransaksi[row][9];
      Peruntukan = rowsTransaksi[row][12];
      Total = "?   Total Transaksi : " + rowsTransaksi[row][14] + ",-";
      pesan += "<code>- " + Nama_Item + " |" + Qty + " " + Sat + " |" + Kredit + "</code>";
      
      return pesan ;
    }
   
  }
  return "Data tanggal tidak ditemukan";
}
function testgetRowsTransaksi(){
  var tanggal = searchDataByTanggalTransaksi("@2");
  var x = ""
  }

4 个答案:

答案 0 :(得分:0)

一种方法是将找到的值存储在数组中,我假设您想返回 pesan 对吗?

因此,可能的解决方案之一是将找到的每条记录都存储到数组中,然后返回整个数组(如果没有找到,数组长度将为 0)。

这是修改后的代码:

function searchDataByTanggalTransaksi(Tanggal) {
  var rangeNameTransaksi = "Transaksi!A2:O";
  var rowsTransaksi = Sheets.Spreadsheets.Values.get(MYSSID, rangeNameTransaksi)
    .values;
  var panjangTransaksi = rowsTransaksi.length;
  var Tanggal,
    Nama_Item,
    Divisi,
    Sat,
    Qty,
    Harga_Satuan,
    Debet,
    Kredit,
    Saldo,
    Peruntukan,
    Total = "";
  var pesan = "";

  var resultArray = []; //Mentioned array to pass data in.

  for (var row = 0; row < panjangTransaksi; row++) {
    if ("@" + rowsTransaksi[row][1] == Tanggal) {
      Tanggal = "?   Tanggal Transaksi : " + rowsTransaksi[row][1];
      Nama_Item = rowsTransaksi[row][2];
      Divisi = rowsTransaksi[row][3];
      Sat = rowsTransaksi[row][4];
      Qty = rowsTransaksi[row][5];
      Harga_Satuan = rowsTransaksi[row][6];
      Debet = rowsTransaksi[row][7];
      Kredit = rowsTransaksi[row][8];
      Saldo = rowsTransaksi[row][9];
      Peruntukan = rowsTransaksi[row][12];
      Total = "?   Total Transaksi : " + rowsTransaksi[row][14] + ",-";
      pesan +=
        "<code>- " +
        Nama_Item +
        " |" +
        Qty +
        " " +
        Sat +
        " |" +
        Kredit +
        "</code>";

      return resultArray.push(pesan); //Data passed in per every iteration.
    }
  }
  return resultArray; //returning line
  return "Data tanggal tidak ditemukan"; // this line is obsolete
}
function testgetRowsTransaksi() {
  var tanggal = searchDataByTanggalTransaksi("@2");
  var x = "";
}

答案 1 :(得分:0)

虽然我不太确定,panjangTransaksi 变量保存什么样的数据,如果您只想要连接字符串中的所有匹配项,您可以尝试如下

    function searchDataByTanggalTransaksi(Tanggal){
        var rangeNameTransaksi = "Transaksi!A2:O";
        var rowsTransaksi = Sheets.Spreadsheets.Values.get(MYSSID, rangeNameTransaksi).values;
        var panjangTransaksi = rowsTransaksi.length;
        return panjangTransaksi.reduce((acc, ele) => {
            let Nama_Item, Divisi, Sat, Qty, Harga_Satuan, Debet, Kredit, Saldo, Peruntukan, Total  = "";
            if ("@" + ele[1] == Tanggal){
                Tanggal = "?   Tanggal Transaksi : " + ele[1];
                Nama_Item = ele[2];
                Divisi = ele[3];
                Sat = ele[4];
                Qty = ele[5];
                Harga_Satuan = ele[6];
                Debet = ele[7];
                Kredit = ele[8];
                Saldo = ele[9];
                Peruntukan = ele[12];
                Total = "?   Total Transaksi : " + ele[14] + ",-";
                acc += "<code>- " + Nama_Item + " |" + Qty + " " + Sat + " |" + Kredit + "</code>";
              }
              return acc;
        }, '') ||  "Data tanggal tidak ditemukan";
      }

答案 2 :(得分:0)

程序永远不会输入此 if ("@" + rowsTransaksi[row][1]==Tanggal),因为 Tanggal 未定义。

答案 3 :(得分:0)

我找到了解决方法,在上面的方法中我使用了 return,但是当我 sendText 它回复所有行

case "/tgl" :
      var ssIdLogistik ="mySsId";
      var rangeNameTransaksi = "Transaksi!A2:O";
      var rowsTransaksi = Sheets.Spreadsheets.Values.get(ssIdLogistik, rangeNameTransaksi).values;
      var panjangTransaksi = rowsTransaksi.length;
      var Tanggal, Nama_Item, Divisi, Sat, Qty, Harga_Satuan, Debet, Kredit, Saldo, Peruntukan, Total  = "";
      for ( var row = 0; row < panjangTransaksi; row++){
        if (rowsTransaksi[row][1] == perintah[1]){
          Tanggal = "?   Tanggal Transaksi : " + rowsTransaksi[row][1];
          Nama_Item = rowsTransaksi[row][2];
          Divisi = rowsTransaksi[row][3];
          Sat = rowsTransaksi[row][4];
          Qty = rowsTransaksi[row][5];
          Harga_Satuan = rowsTransaksi[row][6];
          Debet = rowsTransaksi[row][7];
          Kredit = rowsTransaksi[row][8];
          Saldo = rowsTransaksi[row][9];
          Peruntukan = rowsTransaksi[row][12];
          Total = "?   Total Transaksi : " + rowsTransaksi[row][14] + ",-";
          
          text += "<code>- " + Nama_Item + " |" + Qty + " " + Sat + " |" + Kredit+ ",-" + "</code>\n";
        }        
      }
      if(text == ""){
          text = "?  Periksa format penulisan kode permintaan Tanggal.\n\n" +
                 "Melihat transaksi berdasarkan tanggal di awali dengan '/tgl_' dengan format /tgl_hh-bb-tttt:\n" +
                 "    ??   /tgl_02-02-2021 \n";}      
      sendText(updates.message.chat.id, logoData + "<code>" + Tanggal + "\n----------\n" + text + "----------\n" + Total + "</code>");
      break;
相关问题