اذهب إلى المحتوى

التعامل مع جداول البيانات والأوراق والنطاقات من خلال Apps Script


Mostafa Amaan

مرحبًا بك في المقال الثاني من دليل تعلم أساسيات برمجة التطبيقات باستخدام جداول بيانات جوجل، ففي المقال السابق ركزنا على مفاهيم محرر السكربت ووحدات الماكرو والدوال المخصصة، أما في هذا الدرس سوف نتعمق في خدمة جداول البيانات التي يمكنك استخدامها لقراءة البيانات وكتابتها ومعالجتها في جداول بيانات Google.

هذا هو الدرس الثاني في دليل تعلم أساسيات برمجة التطبيقات مع جداول بيانات جوجل، وقبل البدء تأكد من إكمال المقال الأول: وحدات الماكرو والدوال المخصصة.

ماذا ستتعلم

  1. كيف تُمَثَّل جداول البيانات والأوراق والنطاقات في برمجة التطبيقات Apps Script.
  2. كيفية الوصول إلى جدول البيانات النشط (المفتوح) وإنشائه وإعادة تسميته باستخدام صنف SpreadsheetApp و Spreadsheet.
  3. كيفية تغيير اسم الورقة، واتجاه العمود/ الصف للنطاق باستخدام صنف Sheet.
  4. كيفية تحديد مجموعة من الخلايا أو نطاق من البيانات وتنشيطها ونقلها وفرزها باستخدام صنف Range.

ماذا ستحتاج

  • فهم موضوعات Apps Script الأساسية التي استكشفناها في الدرس السابق من هذا الدليل.
  • الإلمام الأساسي بمحرر السكربت Apps Script.
  • الإلمام الأساسي بجداول بيانات Google.
  • الإلمام الأساسي بلغة البرمجة JavaScript وصنف String الخاص به.

ما هي خدمة جداول البيانات؟

خدمة جداول البيانات تشتمل على أربع أصناف أساسية، هي: SpreadsheetApp، و Spreadsheet، و Sheet، و Range، ويصف هذا القسم من المقال هذه الأصناف وفيم تُستخدم من أجله.

الصنف SpreadsheetApp

قبل الخوض في الأصناف Spreadsheet، و Sheet، و Range يجب عليك مراجعة الصنف الأب SpreadsheetApp، فتبدأ العديد من السكربتات باستدعاء توابع الصنف SpreadsheetApp، إذ يمكنها توفير نقطة الوصول الأولية إلى ملفات Google Sheets، فيمكنك التفكير في SpreadsheetAppباعتباره الصنف الرئيسي لخدمة جداول البيانات، بالطبع لن نستكشف صنفSpreadsheetApp بالتفصيل هنا، ومع ذلك يمكنك العثور لاحقًا في هذا الدرس على أمثلة وتمارين لمساعدتك على فهم هذا الصنف.

جداول البيانات والأوراق وأصنافهما

جداول البيانات Spreadsheet: كمصطلح فإن جدول البيانات هو عبارة عن ملف جداول بيانات Google مخزن في Google Drive يحتوي على بيانات منظمة حسب الصفوف والأعمدة، ويشار إلى جدول البيانات أحيانًا باسم "جدول بيانات Google"، وهي الطريقة نفسها التي يُشار بها إلى المستند باسم "مستند Google".

ويمكنك استخدام الصنف Spreadsheet للوصول إلى بيانات ملف جداول بيانات جوجل وتعديلها، ويمكنك أيضًا استخدام هذا الصنف لعمليات أخرى على مستوى الملف، مثل: إضافة العناوين.

001 - خدمة جداول البيانات 1.png

الورقة Sheet: تمثل الصفحة الفردية لجدول البيانات، ويشار إليها أحيانًا باسم "علامة تبويب"، ويمكن أن يحتوي كل جدول بيانات على ورقة واحدة أو أكثر.

ويمكنك استخدام الصنف Sheet للوصول إلى البيانات والإعدادات على مستوى الورقة وتعديلها، مثل: نقل صفوف أو أعمدة البيانات.

002 - خدمة جداول البيانات 2.png

بالإضافة إلى الاسم، تحتوي جداول البيانات أيضًا على معرّف نصي (سلسلة نصية عشوائية فريدة)، هذا المعرّف موجود في عنوان URL لجدول البيانات، كما تحتوي كل ورقة في جدول البيانات أيضًا على معرّف رقمي (سلسلة رقمية عشوائية فريدة) لتلك الورقة، هذا المعرّف موجود في عنوان URL لجدول البيانات، وتنسيق المعرفين كالتالي:

003 - خدمة جداول البيانات 3.png

ويمكنك رؤية كلا المعرفين في مثال URL التالي:

https://docs.google.com/spreadsheets/d/1xW0pLog0mQFVU5QCob1AHPxR7WEt1/edit#gid=3614239

لذلك، نظرًا لأن معرفات جداول البيانات والأوراق فريدة وأسماء جداول البيانات ليست كذلك، فمن الأفضل استخدام المعرفات لتحديد جداول البيانات والأوراق كلما أمكن ذلك، فعلى سبيل المثال: يمكن أن يكون لديك جداول بيانات متعددة بنفس الاسم في Google Drive، لكن باستخدام التابع (SpreadsheetApp.openById(id لفتح جداول البيانات الخاصة بك يمكنك من تجنب تحرير الملف الخطأ عن طريق الخطأ إن استعملت التابع getSheetByName(sheet_name)‎.

باختصار، يعمل الصنف Spreadsheet على مجموعة الأوراق وتحديد ملف جداول بيانات جوجل في Google Drive، ويعمل الصنف Sheet على أوراق فردية داخل جدول بيانات.

الصنف Range

تتطلب معظم عمليات معالجة البيانات (على سبيل المثال: قراءة بيانات الخلية أو كتابتها أو تنسيقها) تحديد الخلايا التي تنطبق عليها العملية، لذلك يمكنك استخدام الصنف Range لتحديد مجموعات معينة من الخلايا داخل الورقة، ويمكنك تحديد النطاقات حسب أرقام الصفوف والأعمدة ، أو باستخدام تدوين A1.

اقتباس

توضيح: المصطلحات الأساسية في Apps Script مصطلح "الورقة النشطة active sheet" هي الورقة المفتوحة والمرئية حاليًا في واجهة جداول بيانات جوجل، وبالمثل فإن مصطلح "النطاق النشط active range" هو مجموعة مكونة من خلية واحدة أو أكثر مظللة حاليًا داخل الورقة النشطة، ومصطلح "الخلية النشطة active cell" هي الخلية الوحيدة المميزة داخل الورقة النشطة مع تركيز المؤشر.

تعمل العديد من توابع الأصناف على إرجاع الكائن النشط للصنف المطلوب، فعلى سبيل المثال: يؤدي تشغيل ()SpreadsheetApp.getActiveSpreadsheet إلى إرجاع جدول البيانات النشط أو الحالي للمستخدم، وبالحصول على جدول البيانات النشط يمكنك تطبيق العمليات على جدول البيانات هذا، وبالمثل يمكن لتابع مثل ()Sheet.activate تغيير الكائن النشط.

باختصار، تنشيط ورقة أو نطاق أو خلية يعادل النقر فوق تلك الورقة أو النطاق أو الخلية في واجهة جداول بيانات جوجل، وبالتالي نقل تركيز المؤشر إلى هذا الموقع.

يعرض باقي هذا الدرس أمثلة على السكربتات التي تعمل مع هذه الأصناف وتوابعها.

الإعداد للعمل

قبل المتابعة أنت بحاجة إلى جدول بيانات يحتوي على بعض البيانات، لا تقلق فقد وفرنا لك جدول بيانات جاهز  حول أسعار الأفوكادو يمكنك تنزيله، ثم إعادة رفعه بإحدى الطريقتين اللتين ذكرناها في المقال الأول من هذه السلسلة.

اقتباس

للتذكير: يمكنك فتح محرر السكربت من جداول بيانات جوجل بالنقر على "الإضافات" ثم اختيار "برمجة تطبيقات جوجل"، وعند فتح مشروع Apps Script في محرر السكربت لأول مرة، ينشئ محرر السكربت مشروعًا نصيًا وملفًا نصيًا لك.

يوضح لك القسم التالي من هذا المقال كيفية استخدام الصنف Spreadsheet لتحسين جدول البيانات الذي نتدرب عليه.

الوصول إلى جداول البيانات وتعديلها

في هذا القسم يمكنك التعرف على كيفية استخدام الصنف SpreadsheetApp والصنف Spreadsheet للوصول إلى جداول البيانات وتعديلها، وعلى وجه التحديد تعلمك هذه التمارين كيفية إعادة تسمية جدول بيانات وتكرار الأوراق داخل جدول بيانات.

نعم قد تبدو هذه العمليات بسيطة، لكنها غالبًا ما تكون جزءًا من سير عمل أكبر وأكثر تعقيدًا، فبمجرد أن تفهم كيفية أتمتة هذه المهام باستخدام نص الشيفرة البرمجية أو السكربت، سيكون من الأسهل تعلم كيفية أتمتة العمليات الأكثر تفصيلًا.

إعادة تسمية جدول البيانات النشط

لنفترض أنك تريد تغيير الاسم الافتراضي لجدول البيانات الذي نتدرب عليه من "نسخة من جدول بيانات بدون عنوان" إلى عنوان يعكس بطريقة أفضل الغرض من جدول البيانات هذا، ويمكنك عمل بذلك باستخدام الصنف SpreadsheetApp والصنف Spreadsheet باتباع الخطوات التالية:

أولاً، في محرر السكربت استبدل كتلة التعليمات البرمجية الافتراضية ()myFunction بالتعليمة البرمجية التالية:

function renameSpreadsheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  mySS.rename("أسعار الأفوكادو");
}

ثانيًا، احفظ شيفرتك البرمجية بالنقر على أيقونة "حفظ". ثالثًا، لإعادة تسمية مشروع Apps Script انقر على كلمة "مشروع بلا عنوان" من أعلى يمين النافذة، ثم اكتب اسم "Avocado Prices" كاسم للمشروع الجديد، ثم انقر على "إعادة تسمية".

005 - خدمة جداول البيانات 5.png

رابعًا، لتشغيل شيفرتك البرمجية، حدد الدالة renameSpreadsheet من قائمة الدوال، ثم انقر على زر "تنفيذ" من أعلى النافذة.

006 - خدمة جداول البيانات 6.png

خامسًا: أعطِ تفويضًا للماكرو باتباع الإرشادات التي تظهر على الشاشة، انقر أولاً على زر "مراجعة الأذونات".

007 - خدمة جداول البيانات 7.png

فإذا تلقيت رسالة "لم تثبت جوجل ملكية هذا التطبيق"، فانقر على ارتباط "خيارات متقدمة"، ثم انقر على ارتباط "الانتقال إلى Avocado Prices (غير آمنة)".

008 - خدمة جداول البيانات 8.png

وفي الشاشة التالية انقر على زر "سماح".

009 - خدمة جداول البيانات 9.png

اقتباس

تنويه: تستخدم جوجل إجراء الأمان هذا لتنبيه المستخدمين من استعمال أي ماكرو قد يكون غير آمن أو من دون إذنهم، فإذا رأيت مربع الحوار هذا فلا بأس بالمتابعة لأنك مؤلف الشيفرة البرمجية، فقط اتبع التعليمات التي تظهر على النافذة لمتابعة مصادقة الشيفرة البرمجية.

سادسًا، بمجرد تنفيذ الدالة يجب أن يتغير اسم ملف جدول البيانات الخاص بك.

010 - خدمة جداول البيانات 10.png

لنلق نظرة على الشيفرة البرمجية التي أدخلتها: التابع ()getActiveSpreadsheet يعمل على إرجاع كائن يمثل جدول البيانات النشط؛ أي نسخة من جدول بيانات التمرين، وخزن كائن جدول البيانات هذا في المتغير mySS ويؤدي استدعاء (rename(newName في المتغير mySS إلى تغيير اسم ملف جدول البيانات في Google Drive إلى "أسعار الأفوكادو".

ونظرًا لأن متغير mySS أصبح مرجعًا لجدول البيانات النشط، يمكنك جعل شيفرتك البرمجية أنظف وأكثر كفاءة عن طريق استدعاء توابع Spreadsheet من خلال المتغير mySS بدلًا من تكرار استدعاء ()getActiveSpreadsheet.

تكرار الورقة النشطة

في جدول البيانات الحالي لديك ورقة واحدة فقط، يمكنك استدعاء التابع ()Spreadsheet.duplicateActiveSheet لعمل نسخة من هذه الورقة باتباع الخطوات التالية:

بداية، أضف الدالة الجديدة التالية أسفل الدالة ()renameSpreadsheet الموجودة بالفعل في مشروع Apps Script الذي أنشأته كالتالي:

function duplicateAndOrganizeActiveSheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  var duplicateSheet = mySS.duplicateActiveSheet();
}

احفظ شيفرتك البرمجية بالنقر على أيقونة "حفظ"، بعد ذلك، ومن أجل تشغيل شيفرتك البرمجية، عليك أن تحدد الدالة duplicateAndOrganizeActiveSheet من قائمة الدوال، ثم النقر على زر "تنفيذ" من أعلى النافذة.

ارجع إلى جداول البيانات لمشاهدة إضافة علامة تبويب جديدة أو ورقة مكررة باسم "نسخة من الورقة1" إلى جدول البيانات.

011 - خدمة جداول البيانات 11.png

لنلق نظرة على الشيفرة البرمجية التي أدخلتها: في هذه الدالة الجديدة يُنشئ التابع ()duplicateActiveSheet ورقة مكررة وينشطها ثم يعيدها إلى جدول البيانات، وتُخزن هذه الورقة الناتجة في المتغير duplicateSheet، لكن الشيفرة البرمجية لم تفعل أي شيء مع هذا المتغير حتى الآن.

في القسم التالي من هذا المقال، ستستخدم الصنف Sheet لإعادة تسمية وتنسيق الورقة التي كررناها.

تنسيق الورقة باستخدام الصنف Sheet

يوفر الصنف Sheet توابع تسمح لنَصْ الشيفرة البرمجية بقراءة الأوراق وتحديثها، في هذا القسم من الدرس يمكنك التعرف على كيفية تغيير اسم الورقة وعرض العمود باستخدام توابع من الصنف Sheet.

لاحظ أن الصنف Spreadsheet والصنف Sheet يشتركان في عدة توابع خاصة بورقة محددة، مثل:

  • (Spreadsheet.deleteColumn(columnPosition
  • (Sheet.deleteColumn(columnPosition

فعندما تستدعي (Spreadsheet.deleteColumn(columnPosition فإن هذا التابع يزيل الأعمدة المحددة من الورقة النشطة حاليًا (المفتوحة) داخل جدول البيانات النشط.

ويمكنك الحصول على نفس النتيجة عن طريق استدعاء ()getActiveSheet، ومن ثمة بعد ذلك استدعاء (Sheet.deleteColumn(columnPosition، لكن الصنف Spreadsheet يوفر لك الوقت.

تغيير اسم الورقة

إعادة تسمية الأوراق أمر بسيط مثل إعادة تسمية جدول البيانات التي استخدمنا فيها التابع ()renameSpreadsheet، فكل ما عليك فعله هو استدعاء تابع واحد لتنفيذ هذه العملية كما يلي:

أولًا، في جداول البيانات الذي نتدرب عليه باسم "أسعار الأفوكادو" انقر على التبويبة أو الورقة التي باسم "الورقة1" لتنشيطها.

012 - خدمة جداول البيانات 12.png

ثانيًا، في محرر Apps Script عَدِّل الشيفرة البرمجية للدالة ()duplicateAndOrganizeActiveSheet لكي تتطابق ما يلي:

function duplicateAndOrganizeActiveSheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  var duplicateSheet = mySS.duplicateActiveSheet();

  // تغيير اسم الورقة الجديدة.
  duplicateSheet.setName("_الورقة" + duplicateSheet.getSheetId());
}

ثالثًا، احفظ الشيفرة البرمجية الخاصة بك بالنقر على أيقونة "حفظ"، ثم انقر على زر "تنفيذ" من أعلى النافذة.

رابعًا، ارجع إلى جداول البيانات لمشاهدة إضافة علامة تبويب جديدة أو ورقة مكررة وإعادة تسميتها وتنشيطها عند تشغيل الدالة:

013 - خدمة جداول البيانات 13.png

لنلق نظرة على الشيفرة البرمجية التي أدخلتها: يعمل التابع (setName(name على تغيير اسم الورقة المكررة باستخدام التابع ()getSheetID وذلك للحصول على رقم المعرف الفريد لهذه الورقة، ثم يربط عامل التشغيل (+) المعرف الرقمي للورقة بنهاية السلسلة النصية التي حددناها لاسم الورقة المكررة وهي "الورقة_".

تعديل أعمدة وصفوف الورقة

يمكنك أيضًا استخدام الصنف Sheet لتنسيق جدول البيانات، فعلى سبيل المثال: يمكنك تحديث وظيفة التابع ()duplicateAndOrganizeActiveSheet لتغيير حجم أعمدة الورقة المكررة وإضافة صفوف مجمدة كما يلي:

في جداول البيانات الذي نتدرب عليه باسم "أسعار الأفوكادو" انقر على التبويبة أو الورقة التي باسم "الورقة1" لتنشيطها ثم عدِّل في محرر Apps Script الشيفرة البرمجية للدالة ()duplicateAndOrganizeActiveSheet لكي تتطابق ما يلي:

function duplicateAndOrganizeActiveSheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  var duplicateSheet = mySS.duplicateActiveSheet();

  // تغيير اسم الورقة الجديدة.
  duplicateSheet.setName("_الورقة" + duplicateSheet.getSheetId());

  // تنسيق الورقة الجديدة.
  duplicateSheet.autoResizeColumns(1, 5);
  duplicateSheet.setFrozenRows(2);
}

احفظ الشيفرة البرمجية الخاصة بك بالنقر على أيقونة "حفظ"، ثم انقر على زر "تنفيذ" من أعلى النافذة.

بعدها، ارجع إلى جداول البيانات لمشاهدة إضافة علامة تبويب جديدة أو ورقة مكررة وإعادة تسميتها وتنشيطها وتنسيقها عند تشغيل الدالة.

لنلق نظرة على الشيفرة البرمجية التي أدخلتها:

autoResizeColumns(startColumn, numColumns)

يعمل هذا التابع على تغيير حجم أعمدة الورقة لسهولة القراءة، كما يعمل التابع (setFrozenRows(rows على تجميد العدد المحدد من الصفوف (اثنان في المثال الذي معنا) مما يُبقي صفوف الرأس مرئية أثناء قيام القارئ بالتمرير لأسفل في جدول البيانات.

اقتباس

ملاحظة: عند العمل مع المصفوفات في Apps Script فإنك تتبع الاصطلاح القائل بأن القائمة تبدأ من الفهرس "0"، ولكن عند العمل مع الصفوف والأعمدة يبدأ الفهرس عند الرقم "1"، ويتماشى هذا المنطق مع تنسيق جدول البيانات التقليدي إذ تبدأ من الصف "1" والعمود "A" في جداول البيانات، لذلك ضع في اعتبارك هذا الأمر عند استخدام التوابع المتعلقة بالأعمدة والصفوف، مثل التابع ()autoResizeColumns، ففي تمريننا الحالي أدخلنا القيمة "1" وليس القيمة "0" كمعامل للإشارة إلى العمود "A" داخل الصنف duplicateSheet.

في القسم التالي سوف تتعرف على النطاقات ومعالجة البيانات الأساسية.

إعادة ترتيب البيانات باستخدام الصنف Range

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

وسوف نتعمق خلال الدروس القادمة من هذا الدليل في معالجة البيانات وتنسيقها.

نطاقات النقل

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

دعنا نعمل على تحديث التابع ()duplicateAndOrganizeActiveSheet لنقل بعض البيانات داخل الجدول الذي نتدرب عليه كما يلي:

في جداول البيانات الذي نتدرب عليه باسم "أسعار الأفوكادو" انقر على التبويبة أو الورقة التي باسم "الورقة1" لتنشيطها ثم عدِّل في محرر Apps Script الشيفرة البرمجية للدالة ()duplicateAndOrganizeActiveSheet لكي تتطابق ما يلي:

function duplicateAndOrganizeActiveSheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  var duplicateSheet = mySS.duplicateActiveSheet();

  // تغيير اسم الورقة الجديدة.
  duplicateSheet.setName("_الورقة" + duplicateSheet.getSheetId());

  // تنسيق الورقة الجديدة.
  duplicateSheet.autoResizeColumns(1, 5);
  duplicateSheet.setFrozenRows(2);

 نقل العمود F إلى العمود C //
  var myRange = duplicateSheet.getRange("F2:F");
  myRange.moveTo(duplicateSheet.getRange("C2"));
}

احفظ الشيفرة البرمجية الخاصة بك بالنقر على أيقونة "حفظ"، ثم انقر على زر "تنفيذ" من أعلى النافذة.

بعدها، ارجع إلى جداول البيانات لمشاهدة إضافة علامة تبويب جديدة أو ورقة مكررة وإعادة تسميتها وتنشيطها وتنسيقها ونقل محتويات العمود "F" إلى العمود "C" عند تشغيل الدالة.

014 - خدمة جداول البيانات 14.png

لنلق نظرة على الشيفرة البرمجية التي أدخلتها: يعمل التابع (getRange(a1Notation على تحديد نطاق البيانات المراد نقلها، وذلك من خلال استخدام طريقة التدوين A1، فقد أدخلنا "F2: F" كمعامل للتابع لتحديد العمود "F" (باستثناء الخلية F1)، فإذا كان النطاق المحدد موجودًا فإن التابع (getRange(a1Notation يُرجع مثيل هذا "النطاق" ويخزنه في متغير myRange ليسهل عملية استخدامه مرة أخرى.

وبمجرد تحديد النطاق يأخذ التابع (moveTo(target محتويات المتغير myRange سواء كانت قيم أو تنسيقات لينقلها، وتحدد الوجهة (العمود C) باستخدام طريقة التدوين A1، فقد أدخلنا "C2" كمعامل للتابع لتحديد العمود "C"، وهنا قد تستعجب من أننا حددنا خلية واحدة وليس العمود بالكامل كما فعلنا بالسطر السابق، ولكي نزيل استعجابك عند نقل البيانات لا تحتاج إلى مطابقة الأحجام مع نطاقات الهدف والوجهة، لأن Apps Script بكل بساطة يعمل على تراصف القيم بنفس ترتيبها داخل الخلايا.

اقتباس

تنويه: عند كتابة النصوص البرمجية الخاصة بك تأكد من اختبارها بدقة للتأكد من أن بياناتك وضعت في المكان الذي تريده، وذلك لأن Apps Script يكتب فوق قيم البيانات الحالية عند تغيير قيم الخلية، فإذا لم تكن حريصًا سوف تتسبب في الكتابة فوق البيانات التي تنوي الاحتفاظ بها، ففي هذا المثال كان العمود "C" فارغًا ولكن إذا كانت هناك بيانات فإن التابع (moveTo(target سيزيلها.

نطاقات الفرز

يتيح لك الصنف Range قراءة مجموعات الخلايا وتحديثها وتنظيمها، فعلى سبيل المثال: يمكنك فرز نطاق بيانات باستخدام التابع (Range.sort(sortSpecObj كما يلي:

بداية، في جداول البيانات الذي نتدرب عليه باسم "أسعار الأفوكادو" انقر على التبويبة أو الورقة التي باسم "الورقة1" لتنشيطها ثم عدِّل في محرر Apps Script الشيفرة البرمجية للدالة ()duplicateAndOrganizeActiveSheet لكي تتطابق ما يلي:

function duplicateAndOrganizeActiveSheet() {
  var mySS = SpreadsheetApp.getActiveSpreadsheet();
  var duplicateSheet = mySS.duplicateActiveSheet();

  // تغيير اسم الورقة الجديدة.
  duplicateSheet.setName("_الورقة" + + duplicateSheet.getSheetId());

  // تنسيق الورقة الجديدة.
  duplicateSheet.autoResizeColumns(1, 5);
  duplicateSheet.setFrozenRows(2);

  نقل العمود F إلى العمود C //
  var myRange = duplicateSheet.getRange("F2:F");
  myRange.moveTo(duplicateSheet.getRange("C2"));

فرز جميع البيانات باستخدام العمود C (معلومات السعر) //
  myRange = duplicateSheet.getRange("A3:D55");
  myRange.sort(3);
}

احفظ الشيفرة البرمجية الخاصة بك بالنقر على أيقونة "حفظ"، ثم انقر على زر "تنفيذ" من أعلى النافذة.

بعدها، ارجع إلى جداول البيانات لمشاهدة إضافة علامة تبويب جديدة أو ورقة مكررة وإعادة تسميتها وتنشيطها وتنسيقها ونقل محتويات العمود "F" إلى العمود "C" وفرز جميع البيانات الموجودة في الجدول باستخدام معلومات السعر في العمود "C" عند تشغيل الدالة.

لنلق نظرة على الشيفرة البرمجية التي أدخلتها: يعمل التابع (getRange(a1Notation على تحديد نطاق جديد يغطي الخلايا "A3:D55" (الجدول بأكمله باستثناء رؤوس الأعمدة)، ثم تستدعي الشيفرة البرمجية التابع (sort(sortSpecObj لفرز الجدول، ثم أدخلنا المُعامل (3) وهي رقم العمود المطلوب الفرز وفقًا له، فيعمل التابع على فرز النطاق إذ تنتقل قيم العمود المشار إليه من الأدنى إلى الأعلى (قيم تصاعدية).

ويمكن أن يؤدي التابع (sort(sortSpecObj مهام فرز أكثر تعقيدًا، لكنك لست بحاجة إليها هنا، ويمكنك عرض جميع التوابع المختلفة التي يمكنك من خلالها استدعاء نطاقات الفرز من خلال الوثائق المرجعية لتوابع الفرز.

خاتمة

وإلى هنا نكون قد وصلنا إلى نهاية هذا الدرس من دليل أساسيات برمجة التطبيقات باستخدام جداول بيانات جوجل الذي تعلمنا فيه كيف تُمَثَّل جداول البيانات والأوراق والنطاقات في Apps Script، كما تعرفنا على بعض الاستخدامات الأساسية للأصناف SpreadsheetApp، و Spreadsheet، و Sheet، و Range.

وسوف نتعمق في الدرس القادم أكثر في كيفية قراءة البيانات وكتابتها وتعديلها داخل جدول بيانات.

نتمنى أن يكون هذا الدليل قد أضاف لكم معلومات جديدة ومفيدة، وفي حالة وجود أي استفسارات لا تترددوا في ذكرها لنا في التعليقات.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...