javascript - 忽略其中包含公式的空单元格值

标签 javascript mysql jdbc google-apps-script google-sheets

嗨,我正在使用 JDBC 连接器将一些数据从 google 工作表插入到 mysql

任何人都可以帮助我如何忽略其中包含公式的空单元格值吗?

我只是使用简单的 ='Sheet1'!C1 公式从另一张表获取导入数据表中的数据

我已经尝试过

var newdata = [i for each (i in data)if (isNaN(i))];

var newdata = data.filter(String);

但无法解决问题(可能是 join(',') 导致过滤后出现问题)

以下日志详细信息供您引用 - 感谢您提供的任何帮助或指导。如果您需要更多详细信息,请告诉我

[19-07-15 09:22:29:522 PDT] INSERT INTO CymaxVendorReachout2(UTID,Process,BatchNo,BatchName,ReceivedDate,SKUCount,Status,VMTTicket,AssignedTo,Comments,querytype,EmailSentDate,FolUpNum,Folupfrom,FolUpDate,NextFolUpDate,Note) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
[19-07-15 09:22:29:525 PDT] [MER-8903-2019-07-29, Full Merch, MER-8903, Darlee - 903, 2019-07-24, 158, Invalid, No, Onkar, , , 2019-07-29, 1, Vendor, 2019-07-31, 2019-08-02, ]
[19-07-15 09:22:29:530 PDT] [MER-8904-2019-07-30, Full Merch, MER-8904, Darlee - 904, 2019-07-25, 159, Invalid, No, Onkar, , , 2019-07-30, 1, Vendor, 2019-08-01, 2019-08-05, ]
[19-07-15 09:22:29:536 PDT] [MER-8905-2019-07-31, Full Merch, MER-8905, Darlee - 905, 2019-07-26, 160, Invalid, No, Onkar, , , 2019-07-31, 1, Vendor, 2019-08-02, 2019-08-05, ]
[19-07-15 09:22:30:038 PDT] [, , , , , , , , , , , , , , , , ]
[19-07-15 09:22:30:044 PDT] [, , , , , , , , , , , , , , , , ]
[19-07-15 09:22:30:050 PDT] [, , , , , , , , , , , , , , , , ]
[19-07-15 09:22:30:055 PDT] [, , , , , , , , , , , , , , , , ]
[19-07-15 09:22:55:536 PDT] Data truncation: Incorrect date value: '' for column 'ReceivedDate' at row 1

我正在运行的完整 Google 应用程序脚本

function writeToTable() {
  var ss = SpreadsheetApp.getActive();
  var sheetDetails = ss.getSheetByName('Details');
  var sheetData = ss.getSheetByName('Data');
  var sheetImportData = ss.getSheetByName('Import Data');

  var host = sheetDetails.getRange("B1").getValue();
  var databaseName = sheetDetails.getRange("B2").getValue();
  var userName = sheetDetails.getRange("B3").getValue();
  var password = sheetDetails.getRange("B4").getValue();
  var port = sheetDetails.getRange("B5").getValue();
  var tableName = sheetDetails.getRange("B6").getValue();

  var url = 'jdbc:mysql://'+host+':'+port+'/'+databaseName;

  Logger.log(url);
  var sql = 'SELECT * FROM ' + tableName;

  var data = getData()
  var headerString = data[1]
  data = data[0]
  try{
    var start = new Date();
    var conn = Jdbc.getConnection(url, userName, password);
    conn.setAutoCommit(false);

    var sql = 'INSERT INTO ' + tableName + headerString;
    Logger.log(sql);
    var stmt = conn.prepareStatement(sql);


    var dateColumns = []; // Add the index to this array for date type column
    for (var r in data) {
      Logger.log(data[r]);
      for (var c in data[r]){
        if (dateColumns.indexOf(parseInt(c) + 1) >= 0){ 
          var date = Utilities.formatDate(data[r][c], Session.getScriptTimeZone(),  "yyyy-MM-dd HH:mm:ss");
          stmt.setObject(parseInt(c) + 1, date)
        }else{
          stmt.setString(parseInt(c) + 1, data[r][c]);
        }
      }
      stmt.addBatch();
    }

    var batch = stmt.executeBatch();
    conn.commit();
    conn.close();

    var end = new Date();
    Logger.log('Time elapsed: %sms for %s rows.', end - start, batch.length);
    SpreadsheetApp.getActive().toast('Time elapsed: %sms for %s rows.', end - start, batch.length);
  }catch(err){
    SpreadsheetApp.getActive().toast(err.message);
    Logger.log(err.message);
  } 
}
function getData(){
  //(UTID, Process, BatchNo, BatchName, ReceivedDate, SKUCount, Status, VMTTicket, AssignedTo, Comments, querytype, EmailSentDate, FolUpNum, Folupfrom, FolUpDate, NextFolUpDate, Note ) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
  var ss = SpreadsheetApp.getActive();
  var sheetImportData = ss.getSheetByName('Import Data');
  var data = sheetImportData.getDataRange().getValues();
  var header = data[0];
  var headerString = header.join(',')

  headerString = '(' + headerString + ') values ('

  var questions = Array(header.length + 1).join('?').split('')

  headerString = headerString + questions.join(',') + ')'
  Logger.log(headerString)
  Logger.log(data.slice(1))
  return [data.slice(1), headerString]
}

最佳答案

  • 对于“导入数据”工作表的数据范围,您希望通过删除所有单元格的值为空的行来检索值,而单元格中有公式。

从你的问题和回复中,我可以像上面那样理解。为了实现这一点,请修改getData()脚本如下。

修改后的脚本:

请在getData()函数中的var data =sheetImportData.getDataRange().getValues();下面添加以下脚本。

var newData = data.filter(function(row) {return row.filter(String).length > 0});

data = data.filter(function(row) {return row.filter(String).length > 0});

引用:

关于javascript - 忽略其中包含公式的空单元格值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57046049/

相关文章:

java - postgresql 驱动程序 9.4 和 Postgres 安装 9.6 的 UTF-8 序列无效

javascript - 开发屏幕截图 chrome 扩展

php - 通知用户数据库更改

javascript - 如何将变量传递给queryselectorAll?

MySQL没有使用复合索引的所有关键部分

mysql - 计算并最小化行大小以绕过有效的 MySQL 列限制

javascript - 如何用其他模板覆盖 colmodel

mysql - 通过其他表中的字符串匹配分配产品类别

java - 无法使用 jdbc 瘦驱动程序连接到 oracle 数据库

java - Swing 组合框