更改Google App脚本以选择特定工作表并在继续脚本之前将其清除

时间:2014-04-03 14:25:26

标签: database jdbc google-apps-script google-sheets

我已经制定了一个脚本来从远程MS SQL数据库中收集数据并填充Google表格。我需要一些帮助进一步完善代码以选择特定工作表并在继续脚本之前清除工作表,以便每次脚本运行时工作表都包含db表中的最新数据。

这是脚本。

function database_connection() {
  var conn = Jdbc.getConnection("jdbc:sqlserver://x.x.x.x:1433;" + "databaseName=mydbname;user=mydbusername;password=mypassword;");
  var stmt = conn.createStatement();
  stmt.setMaxRows(500);
  var start = new Date();
  var rs = stmt.executeQuery('select * from table_name');

  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var cell = doc.getRange('a1');
  var row = 0;
  while (rs.next()) {
    for (var col = 0; col < rs.getMetaData().getColumnCount(); col++) {
      cell.offset(row, col).setValue(rs.getString(col + 1));
    }
    row++;
  }
  rs.close();
  stmt.close();
  conn.close();
  var end = new Date();
  Logger.log('Time elapsed: ' + (end.getTime() - start.getTime()));
}

1 个答案:

答案 0 :(得分:2)

要选择工作表,您可以根据自己的要求使用getSheetByNamegetSheets

要清除工作表中的所有单元格,请使用课程Range的{​​{3}}方法。

var doc = SpreadsheetApp.getActiveSpreadsheet();
var sheet = doc.getSheetByName("sheetName");
sheet.getRange(1, 1, sheet.getLastRow(), sheet.getLastColumn()).clear()

谷歌搜索一定会有所帮助...

修改

clear也可用于清除所有范围(见下文)

这是您使用批量插入

的方法
function database_connection() {
  var conn = Jdbc.getConnection("jdbc:sqlserver://x.x.x.x:1433;" + "databaseName=mydbname;user=mydbusername;password=mypassword;");
  var stmt = conn.createStatement();
  stmt.setMaxRows(500);
  var start = new Date();
  var rs = stmt.executeQuery('select * from table_name');

  var doc = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = doc.getSheetByname("sheetName")
  sheet.getDataRange().clear();
  var data = [], rowData;
  var numCols = rs.getMetaData().getColumnCount(); // <- not sure about this, basically i want to capture number of columns
  while (rs.next()) {
    rowData = [];
    for (var col = 0; col < numCols; col++) {
      rowData.push(rs.getString(col + 1));
    }
    data.push(rowData);
  }
  sheet.getRange(1, 1, data.length, numCols).setValues(data); // <- single operation to insert
  rs.close();
  stmt.close();
  conn.close();
  var end = new Date();
  Logger.log('Time elapsed: ' + (end.getTime() - start.getTime()));
}