2012-06-21 46 views
5

Tôi đã chơi xung quanh với Google Apps Script hôm nay và tôi đang cố gắng mã hóa một số chức năng bảng tính tùy chỉnh. Tôi đã thực hiện một số tìm kiếm nhưng không thể tìm thấy câu trả lời cho truy vấn của tôi.Có thể thực hiện ImportRange trong Google Apps Script không?

Tôi biết rằng trên một bảng tính của Google, bạn có thể sử dụng ImportRange trong một tế bào trên một bảng tính như thế này:

=ImportRange(spreadsheet_key;sheet!range_of_cells) 

Câu hỏi của tôi là là nó có thể làm điều gì đó tương tự trong một Apps Script Google và nếu như vậy, làm sao?

Tôi muốn nhập một dải ô từ trang tính trên bảng tính khác (không phải trang tính trên bảng tính nơi tập lệnh sẽ cư trú).

Trả lời

5

Có, điều này là hoàn toàn có thể. Bạn chỉ cần gọi SpreadsheetApp.openById và sau đó nhận được tờ mong muốn và phạm vi bình thường.

Vui lòng xem documentation: range.getValues()range.setValues() là các phương pháp GAS rất cơ bản và được mô tả khá tốt.

Đọc the tutorial.

+0

Tôi biết các chức năng này nhưng tôi không thấy cách tôi có thể yêu cầu nó chọn phạm vi từ ** bảng tính ** khác. Có lẽ tôi lại ngu ngốc lần nữa. – user1464409

+1

Xin chào Serge, tôi đã tự do chỉnh sửa câu trả lời của bạn để giải quyết nghi ngờ của mình về nhận xét :) –

+0

@ Henrique: cảm ơn vì 'chỉnh sửa', bạn hoàn toàn đúng, tôi vẫn có một số tiến bộ để thực hiện định dạng câu trả lời và 'đầy đủ' Tôi sẽ chăm sóc điều đó ;-) –

1

Tôi cần thực hiện việc này gần đây. Đây là những gì tôi đã đưa ra, chỉ đơn giản là cứng mã hóa khóa bảng tính và phạm vi thành chức năng A-háp myImportRange

// to be used in the spreadsheet like so: = myScriptedImportRange(GoogleClock()) 
// no need to include key or range because they are in the script here 
// 
// the third parameter - GoogleClock() - triggers an automatic update every minute. 
// updated 2011-07-17 (ahab): better regex to strip sheetname of *outer* single quotes 
// updated 2013-01-27 (ben) to hard-code key and range 
function myScriptedImportRange() { 
var key = "PUT YOUR DATA_SPREADSHEET_ID IN HERE" 
var sheetrange = "PUT YOUR SHEET AND CELL RANGE IN HERE" 
var shra = sheetrange.split("!") ; 
if (shra.length==1) shra[1]=shra[0], shra[0]=""; 

var sheetstring = shra[0].replace(/^'(.*)'$/g , "$1") // was: replace(/'/g , "") ; updated 2011-07-17 (ahab) 
var rangestring = shra[1] 

var source = SpreadsheetApp.openById(key)  
if (sheetstring.length==0) sheet = source.getSheets()[0] ; 
else sheet = source.getSheetByName(sheetstring) ; 

return sheet.getRange(rangestring).getValues(); 
} 

Trong trường hợp của tôi, tôi có một tập các tấm riêng, tấm trung gian sử dụng thường xuyên myImportRange và VMERGE với một số SQL để kết hợp các lựa chọn từ các tờ tin vào tấm trung gian, và sau đó một tờ nào mà chỉ đơn giản có một ô chứa = myScriptedImportRange(GoogleClock())

Lưu ý rằng có một cách tiếp cận tương tự ở đây: https://stackoverflow.com/a/11857014

cũng Lưu ý rằng ImportRange chức năng và các chức năng liên quan thường có vấn đề không hiển thị dữ liệu đã nhập khi sổ làm việc ban đầu (s) là/không mở. Một cách đơn giản xung quanh điều này đã được mô tả trong nhận xét tại đây: https://stackoverflow.com/a/11786797

+0

Chức năng đồng hồ của Google không còn hoạt động trong Google Trang tính mới nữa và nó không cho phép bạn đặt hàm thay thế "NOW()" vào hàm chính trong trang tính. Nó chỉ giữ nói tải và không có gì xảy ra. – Courtney

2

Có vẻ như Google, trong trí tuệ vô hạn của họ, đã thay đổi hành vi của openById và các chức năng tương tự. Chúng không còn được cho phép trong ngữ cảnh của các chức năng tùy chỉnh.

Xem https://code.google.com/p/google-apps-script-issues/issues/detail?id=5174 để biết thêm chi tiết.

Chúng đề nghị sử dụng IMPORTRANGE làm cách giải quyết, nhưng như đã đề cập trước đây, điều này cần phải được gọi trong một ô.

Giải pháp của chúng tôi là sử dụng IMPORTRANGE trong trang tính và chuyển dữ liệu đã mua vào chức năng tùy chỉnh của chúng tôi vì tập dữ liệu nhỏ. Tôi hy vọng thông tin này sẽ giúp ích!

Các vấn đề liên quan