2016-10-19 3 views
0

SQL 시트를 쿼리하기 위해 Google 시트에 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

고맙습니다. 2d 어레이를 연구하고 작동하도록하겠습니다. Google에 무엇을 알면 많은 도움이됩니다. – user2942346

+0

코드를 사용하여 셀의 모든 것을 셀의 끝으로 바꿔보십시오. 잘하면 일해야한다 –

+0

나는 일하는 것에 매우 가깝다고 생각한다. 오류없이 실행되지만 출력이 없습니다. 실행 기록에는 데이터를 가져 오는 것으로 표시됩니다. – user2942346

관련 문제