هل من الممكن إجراء ImportRange في Google Apps Script؟

لقد لعبت اليوم مع Google Apps Script وأنا أحاول ترميز بعض وظائف جدول البيانات المخصصة. لقد قمت ببعض البحث لكن لا يمكنني العثور على إجابة لاستعلامي.

أعلم أنه في جدول بيانات Google ، يمكنك استخدام ImportRange في خلية في جدول بيانات مثل هذا:

=ImportRange(spreadsheet_key;sheet!range_of_cells)

أسئلتي هي أنه من الممكن القيام بشيء مماثل في سكريبت Google Apps وإذا كان الأمر كذلك ، كيف؟

أريد استيراد مجموعة من الخلايا من ورقة في جدول بيانات آخر (وليس ورقة في جدول البيانات حيث سيوجد النص البرمجي).

0

3 إجابة

كنت بحاجة إلى القيام بذلك في الآونة الأخيرة. هذا ما توصلت إليه ، بكل بساطة ، صعب ترميز مفتاح جدول البيانات ونطاقه في وظيفة myImportRange في ahab

// 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(); 
}

In my case I have a set of private sheets, an intermediate sheet that uses the regular myImportRange and VMERGE with some SQL to combine selections from the private sheets into the intermediate sheet, and then a public sheet that simply has one cell containing = myScriptedImportRange( GoogleClock() )

Note that there is a similar approach here: https://stackoverflow.com/a/11857014

Note also that the ImportRange function and related functions often have a problem of not displaying the imported data when the origin workbook(s) is/are not open. A simple way around this has been described in a comment here: https://stackoverflow.com/a/11786797

0
وأضاف
لم تعد وظيفة Google على مدار الساعة تعمل في الإصدار الجديد من جداول بيانات Google ولا تسمح لك بوضع الوظيفة البديلة "NOW ()" في الوظيفة الرئيسية داخل الورقة. يبقى فقط يقول تحميل ولا يحدث شيء.
وأضاف المؤلف Courtney, مصدر

نعم ، هذا ممكن تماما. تحتاج فقط إلى الاتصال SpreadsheetApp.openById ثم الحصول على الورقة المطلوبة ونطاقات عادة.

الرجاء إلقاء نظرة على الوثائق : range.getValues ​​() و range.setValues ​​() هي طرق GAS الأساسية جدًا وتم وصفها جيدًا.

اقرأ البرنامج التعليمي أيضًا.

0
وأضاف
ما الذي يفترض أن يعنيه الغاز؟
وأضاف المؤلف Marcel, مصدر
أنا على دراية بهذه الوظائف ولكن لا أرى كيف يمكنني إخبارها باختيار النطاق من جدول بيانات آخر . ربما أنا مجرد غبي مرة أخرى.
وأضاف المؤلف user1464409, مصدر
شكرا سيرج وهنريك ، أرى كيف نفعل ذلك الآن. مساعدة كبيرة مرة أخرى.
وأضاف المؤلف user1464409, مصدر
مرحبا سيرج ، أخذت الحرية لتحرير إجابتك لمعالجة شكوكه في تعليق :)
وأضاف المؤلف Henrique G. Abreu, مصدر
Henrique: شكرا ل 'تحرير' ، كنت على حق تماما ، لا يزال لدي بعض التقدم في القيام به على بعض الإجابات التنسيق و'الاكتمال 'سأعتني بذلك ؛-)
وأضاف المؤلف Serge insas, مصدر
Google Apps Script
وأضاف المؤلف Serge insas, مصدر

يبدو أن غوغل ، بحكمتها اللامتناهية ، قد غيرت من سلوك openById ووظائف مماثلة. لم يعد مسموحًا بها في سياق الوظائف المخصصة.

راجع https://code.google.com/ p/google-apps-script-issues/issues/detail؟ id = 5174 لمزيد من التفاصيل.

يقترح استخدام IMPORTRANGE كحل بديل ، ولكن كما ذكر سابقاً ، يجب استدعاء هذا داخل خلية.

كان الحل الذي نستخدمه هو استخدام IMPORTRANGE في الورقة ، وتمرير البيانات المكتسبة إلى وظيفتنا المخصصة ، حيث كانت مجموعة البيانات صغيرة. آمل أن تساعد هذه المعلومات!

0
وأضاف