我已经制定了一个脚本来从远程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()));
}
答案 0 :(得分:2)
要选择工作表,您可以根据自己的要求使用getSheetByName或getSheets。
要清除工作表中的所有单元格,请使用课程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()));
}