我在google工作表中有一个JDBC连接来查询我的sql server。我是JDBC的新手,所以我拼凑了其他人的代码,它确实有效,但似乎当查询有很多输出时需要很长时间才能写入工作表。
你能否告诉我是否有更好/更有效的代码将它放入行和列中而不是我正在使用的代码。我只关心代码的输出部分。
function createtestDispositionHistoryTable() {
var conn = Jdbc.getConnection("jdbc:sqlserver://123.45.67.89;databaseName=dbname","me","myPassword");
var stmt = conn.createStatement();
var rs = stmt.executeQuery("SELECT agent.firstname, agentdispositionhistory.dispositionid, agentdispositionhistory.dispositiontime, leadlist.name, program.name, agentdispositionhistory.sale\
FROM agentdispositionhistory\
INNER JOIN lead\
ON agentdispositionhistory.leadid=lead.id\
INNER JOIN leadlist\
ON lead.leadlistid=leadlist.id\
INNER JOIN program\
ON leadlist.programid=program.id\
INNER JOIN agent\
ON agentdispositionhistory.agentid=agent.id\
WHERE agentdispositionhistory.dispositionid IN\
(1971,\
1976,\
1977,\
1978,\
1979,\
1980,\
1982,\
1983,\
1984,\
1995,\
2000,\
2001,\
2002,\
2003,\
2004,\
2006,\
2007,\
2008,\
2019,\
2023,\
2025,\
2026,\
2027,\
2029,\
2030,\
2031,\
2032)");
var doc = SpreadsheetApp.getActiveSpreadsheet();
doc.insertSheet('Agent Disposition Table test');
var sheet = doc.getSheets()[0];
doc.appendRow(["Name", "Disposition", "Date", "Lead List", "Program", "Sale"]);
var cell = doc.getRange('a1');
var row = 1;
while(rs.next()) {
cell.offset(row, 0).setValue(rs.getString(1));
cell.offset(row, 1).setValue(rs.getString(2));
cell.offset(row, 2).setValue(rs.getString(3));
cell.offset(row, 3).setValue(rs.getString(4));
cell.offset(row, 4).setValue(rs.getString(5));
cell.offset(row, 5).setValue(rs.getString(6));
row++;
}
rs.close();
stmt.close();
conn.close();
}
我指的具体部分是:
var cell = doc.getRange('a1');
var row = 1;
while(rs.next()) {
cell.offset(row, 0).setValue(rs.getString(1));
cell.offset(row, 1).setValue(rs.getString(2));
cell.offset(row, 2).setValue(rs.getString(3));
cell.offset(row, 3).setValue(rs.getString(4));
cell.offset(row, 4).setValue(rs.getString(5));
cell.offset(row, 5).setValue(rs.getString(6));
row++;
感谢任何帮助,非常感谢!
答案 0 :(得分:1)
它很慢,因为您通过单独调用工作表来编写每个值。
准备一个二维数组并一次写入所有内容要快得多。 这样的事情(未经测试)
var output = [];
var rowData;
while(rs.next()) {
rowData = [1,2,3,4,5,6].map(function(i) {
return rs.getString(i);
});
output.push(rowData);
}
if (output.length) {
doc.getRange(1, 1, output.length, output[0].length).setValues(output);
}