2013-07-29 42 views
6

Tôi đang tìm cách để lập trình bảng tính để lọc dữ liệu từ bảng tính khác dựa trên người dùng đã đăng nhập.Chức năng 'truy vấn' bảng tính google có thể được sử dụng trong tập lệnh google apps không?

Tôi có thể thực hiện việc này bằng chức năng truy vấn bên trong bảng tính. NHƯNG, không thể tìm ra cách gọi hàm truy vấn từ tập lệnh ứng dụng?

Việc này có thể thực hiện được không? Sẽ đánh giá cao mã mẫu. Cảm ơn.

Trả lời

5

Không, không có API cho chức năng Truy vấn cho phép nó được gọi từ Google Apps Script. (Không có cách nào để gọi BẤT KY chức năng bảng tính theo cách này, trên thực tế.)

Bạn có thể nhận được một số chức năng tương tự mà không cần tự viết tất cả. 2D Arrays Library bao gồm nhiều chức năng "bộ lọc" khác nhau cho phép bạn truy xuất các hàng phù hợp.

+0

này nghe có vẻ giống như một cái gì đó nên thực hiện công việc. Cảm ơn! – awsamar

+0

Mogsdad, Thư viện mảng hữu ích nhưng vẫn không hiệu quả như hàm truy vấn. Tôi đang cố gắng sử dụng apis trực quan/biểu đồ để xây dựng trang tổng quan của người dùng. Để cá nhân hóa trang tổng quan, tôi cần có khả năng lọc dữ liệu từ bảng tính dựa trên người dùng đã đăng nhập. Tuy nhiên, bộ lọc yêu cầu so sánh nhiều cột dễ dàng trong hàm truy vấn '... trong đó col5 = "& cell1 &" hoặc col6 = "& cell2 &". – awsamar

3

Có lẽ, thông qua một công thức bạn có thể hoàn thành công việc bạn cần.

function testFormula() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[1]; 
    var cell = sheet.getRange("A1"); 
    cell.setFormula("=QUERY('Sheet0'!A1:B5;\"SELECT A, B\"; 0)"); 
} 
+0

William, Cảm ơn bạn đã đề xuất. Tôi đã sử dụng 'Truy vấn' trong một ô được cập nhật thông qua tập lệnh. Tuy nhiên, hành vi không chính xác như tôi cần. Cảm ơn, mặc dù. – awsamar

7

Tôi không biết liệu có một hạn chế về điều đó ...

function test() { 
    var req = query("=QUERY(shopT!B2:E; \"select min(E) where (B=3 or B=4 and D=2) group by C, D\")"); 

    Logger.log(req); 
} 

function query(request) { 
    var sheet = sp.insertSheet(); 
    var r = sheet.getRange(1, 1).setFormula(request); 

    var reply = sheet.getDataRange().getValues(); 
    sp.deleteSheet(sheet); 

    return reply; 
} 
+0

Vâng. Điều này làm việc cho tôi, nhưng nó trông cực kỳ xấu xí - như rất nhiều cách giải quyết trong các ứng dụng của Google. :-) –

+0

Làm thế nào là "sp" được xác định trong dòng: var sheet = sp.insertSheet() và làm thế nào để chúng tôi vượt qua danh tính của tờ để quá trình này? thông qua sheetID hoặc sheetURL – Calcutta

+0

var sp = SpreadsheetApp.openById ("********************"); – zizix