2016-10-19 3 views
0

SQLサーバーにクエリするためのGoogleシートにJDBC接続があります。私はJDBCの初心者ですので、他の人々のコードを一緒に作っていますが、それはうまくいきますが、クエリに出力が多く、シートに書き込むのに時間がかかるようです。スプレッドシートにSQLクエリをリレー/パブリッシュするコードの高速化が必要

私が使用しているコードよりも、より効率的なコードを行と列に入れることができるかどうか教えてください。私はコードの出力セクションについてのみ心配しています。

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++; 

ありがとう!

答えて

1

シートに別々の呼び出しですべての単一の値を書き込むので、速度が遅くなります。

2次元配列を準備してすべてをすぐに書き込む方がはるかに高速です。このような 何か(テストしていません)

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); 
} 
+0

は、私は2次元配列を研究し、仕事にこれを得る上で動作します、ありがとうございます。ちょうどGoogleに何を知っていることが大いに役立ちます。 – user2942346

+0

私のコードで、セルのすべてのものをwhileの末尾に置き換えてみてください。うまくいけばうまくいくはずです –

+0

私は仕事にとても近いと思います。エラーなしで実行されますが、出力はありません。実行記録にはデータの取得も示されます。 – user2942346

関連する問題