الأتمتة باستخدام Google Apps Script: تحويل "جداول بيانات جوجل" إلى قاعدة بيانات
يا هلا بالجميع! اليوم بنشوف كيف ممكن نحول جداول بيانات جوجل العادية لقاعدة بيانات بسيطة باستخدام Google Apps Script. الموضوع سهل وممتع، ومفيد للأشياء الصغيرة اللي ما تحتاج قاعدة بيانات حقيقية ومعقدة.
إيش هو Google Apps Script؟
ببساطة، هو JavaScript بس موجه لمنتجات جوجل. يعني تقدر تكتب أكواد تتحكم فيها بجداول البيانات، نماذج جوجل، جيميل، التقويم، وغيرها. كأنه ماكرو بس أقوى وأذكى بكثير.
ليش نستخدم "جداول بيانات جوجل" كقاعدة بيانات؟
شوف، مو لكل مشروع تحتاج MySQL ولا PostgreSQL. أحياناً عندك بيانات قليلة، أو تحتاج تسجل أحداث، أو تسوي نظام إدخال بيانات بسيط. هنا "جداول بيانات جوجل" تصير بطلة:
- سهلة الاستخدام ومجانية.
- الكل يعرف يتعامل معها.
- سهلة المشاركة والتعاون.
- Apps Script يعطيها قوة خارقة.
ملاحظة: طبعًا، هذي مو بديل لقاعدة بيانات احترافية للمشاريع الكبيرة والمعقدة. هذي للحلول السريعة والخفيفة.
كيف نبدأ؟
- افتح أي جدول بيانات جوجل.
- من القائمة العلوية، روح على
Extensions(الإضافات) >Apps Script. - بيفتح لك محرر أكواد. هذا هو ملعبنا.
الأساسيات: الوصول للبيانات
أول شيء لازم نعرف كيف نوصل لجدول البيانات والورقة اللي بنشتغل عليها.
function getDatabaseSheet() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // يجيب جدول البيانات الحالي
const sheetName = "بياناتي"; // اسم الورقة اللي بنعتبرها قاعدة بيانات
let sheet = spreadsheet.getSheetByName(sheetName);
if (!sheet) {
// إذا الورقة مو موجودة، أنشئها
sheet = spreadsheet.insertSheet(sheetName);
sheet.appendRow(["معرف", "الاسم", "البريد الإلكتروني", "تاريخ الإضافة"]); // رؤوس الأعمدة
}
return sheet;
}في الكود فوق، دالة getDatabaseSheet تتأكد إن فيه ورقة اسمها "بياناتي" ولو مو موجودة تسويها وتضيف رؤوس الأعمدة. هذا مهم عشان نضمن إن بيئتنا جاهزة.
إضافة بيانات (INSERT)
إضافة صف جديد أسهل ما يكون باستخدام appendRow().
function addRecord(name, email) {
const sheet = getDatabaseSheet();
const newId = sheet.getLastRow(); // معرف بسيط يعتمد على رقم الصف
const timestamp = new Date();
sheet.appendRow([newId, name, email, timestamp]);
Logger.log("تمت إضافة سجل جديد: " + name);
}
// مثال للاستخدام:
// addRecord("أحمد", "ahmed@example.com");هنا سوينا دالة addRecord تاخذ الاسم والإيميل، وتضيفهم مع معرف وتاريخ. بسيطة جداً!
قراءة البيانات (SELECT)
عشان نقرأ كل البيانات، نستخدم getDataRange() و getValues().
function getAllRecords() {
const sheet = getDatabaseSheet();
const range = sheet.getDataRange(); // يجيب كل النطاق اللي فيه بيانات
const values = range.getValues(); // يجيب البيانات كـ "مصفوفة مصفوفات"
// أول صف غالبًا يكون رؤوس الأعمدة، فممكن نستثنيه
const headers = values[0];
const records = values.slice(1); // باقي الصفوف هي البيانات
Logger.log("رؤوس الأعمدة: " + headers);
Logger.log("البيانات: " + JSON.stringify(records));
return records;
}
// مثال للاستخدام:
// getAllRecords();دالة getAllRecords ترجع لنا كل البيانات الموجودة في الورقة، وتقدر بعدها تعالجها زي ما تبي.
نصيحة: لو عندك بيانات كثيرة جدًا، لا تستخدم
getDataRange()وgetValues()بشكل عشوائي. حدد النطاق اللي تحتاجه بالضبط عشان ما تبطئ السكربت.
تحديث البيانات (UPDATE)
تحديث البيانات يتطلب شوية شغل زيادة، لازم نلاقي الصف اللي نبغى نعدل عليه، وبعدين نعدل قيمته.
function updateRecord(idToUpdate, newName, newEmail) {
const sheet = getDatabaseSheet();
const records = sheet.getDataRange().getValues(); // نجيب كل البيانات
const headers = records[0];
const idColumnIndex = headers.indexOf("معرف"); // نلاقي عمود الـ ID
if (idColumnIndex === -1) {
Logger.log("عمود 'معرف' غير موجود.");
return;
}
for (let i = 1; i < records.length; i++) { // نبدأ من الصف الثاني (بعد رؤوس الأعمدة)
if (records[i][idColumnIndex] == idToUpdate) {
// لقينا الصف المطابق
records[i][headers.indexOf("الاسم")] = newName;
records[i][headers.indexOf("البريد الإلكتروني")] = newEmail;
// نرجع نكتب كل البيانات المعدلة للورقة
sheet.getRange(1, 1, records.length, records[0].length).setValues(records);
Logger.log("تم تحديث السجل برقم " + idToUpdate);
return;
}
}
Logger.log("السجل برقم " + idToUpdate + " غير موجود.");
}
// مثال للاستخدام:
// updateRecord(1, "أحمد المحمد", "ahmed.m@example.com");هنا دالة updateRecord تدور على سجل بالـ id حقه، وتعدل الاسم والإيميل. لاحظ إننا نرجع نكتب كل البيانات بعد التعديل، وهذا مو مثالي للمجموعات الكبيرة جدًا من البيانات، لكن للمجموعات الصغيرة يمشي الحال.
حذف البيانات (DELETE)
حذف صف كامل ممكن يكون خطير، لكنه ضروري أحياناً. نستخدم deleteRow().
function deleteRecord(idToDelete) {
const sheet = getDatabaseSheet();
const records = sheet.getDataRange().getValues();
const headers = records[0];
const idColumnIndex = headers.indexOf("معرف");
if (idColumnIndex === -1) {
Logger.log("عمود 'معرف' غير موجود.");
return;
}
for (let i = 1; i < records.length; i++) {
if (records[i][idColumnIndex] == idToDelete) {
// لقينا الصف المطابق، نحذف الصف الفعلي في الورقة
sheet.deleteRow(i + 1); // +1 لأن index المصفوفة يبدأ من 0، ورقم الصف يبدأ من 1
Logger.log("تم حذف السجل برقم " + idToDelete);
return;
}
}
Logger.log("السجل برقم " + idToDelete + " غير موجود.");
}
// مثال للاستخدام:
// deleteRecord(2);دالة deleteRecord تدور على الـ id وتحذف الصف بالكامل. انتبه عند استخدامها!
خاتمة
وبكذا نكون شفنا كيف ممكن نحول "جداول بيانات جوجل" لقاعدة بيانات بسيطة باستخدام Google Apps Script. تقدر تبني عليها أشياء كثيرة: نظام تسجيل حضور، تتبع مهام، أو حتى CRM بسيط. الإمكانيات واسعة، وكل هذا مجاني ومدمج مع أدوات جوجل اللي تستخدمها كل يوم.
أتمنى يكون الدرس مفيد ومختصر. يلا، طبقوا وجربوا! أي أسئلة، أنا موجود.