نموذج HTML متقدم يرسل البيانات مباشرة إلى Google Sheets باستخدام Google Apps Script
انسخ الأسماء التالية كأسماء الأوراق: - Sheet1: responses (لحفظ الاستجابات الخام) - analytics (اختياري - للتحليلات)
في الورقة الأولى (responses)، أضف رؤوس الأعمدة التالية في الصف الأول:
التاريخ والوقت | الاسم | الإدارة | المدرسة | المجموعة | جودة المحتوى | الوضوح | تطوير المهارات | التنظيم | المدربون | تقييمات المدربين | ملاحظات المدربين | التدريبات المستقبلية | أكثر جانب أعجب | جوانب التحسين | الاقتراحات | اقتراحات الدعم
// ==========================================
// استبانة تقييم البرنامج التدريبي
// Google Apps Script
// ==========================================
const SHEET_NAME = 'responses'; // اسم الورقة حيث يتم حفظ البيانات
function doPost(e) {
try {
// فك ضغط البيانات المرسلة
const data = JSON.parse(e.postData.contents);
// الحصول على الورقة
const sheet = SpreadsheetApp.getActiveSheet();
// معالجة تقييمات المدربين
let trainersRatings = '';
if (data.trainer_ratings && typeof data.trainer_ratings === 'object') {
trainersRatings = Object.entries(data.trainer_ratings)
.map(([key, value]) => {
const trainerName = key.replace('rating_', '').replace(/_/g, ' ');
return `${trainerName}: ${value}/5`;
})
.join(' | ');
}
// إنشاء صف جديد بالبيانات
const newRow = [
data.timestamp,
data.name,
data.department,
data.school,
data.group,
data.content_quality,
data.clarity,
data.skill_development,
data.organization,
data.trainers,
trainersRatings,
data.trainer_feedback,
data.future_training,
data.favorite_aspect,
data.improvement_areas,
data.suggestions,
data.support_suggestions
];
// إضافة الصف إلى الورقة
sheet.appendRow(newRow);
// إرسال بريد تأكيد (اختياري)
sendConfirmationEmail(data.name, data.email);
// إرسال استجابة نجاح
return ContentService.createTextOutput(JSON.stringify({
status: 'success',
message: 'تم حفظ البيانات بنجاح'
})).setMimeType(ContentService.MimeType.JSON);
} catch (error) {
Logger.log('Error: ' + error.toString());
return ContentService.createTextOutput(JSON.stringify({
status: 'error',
message: error.toString()
})).setMimeType(ContentService.MimeType.JSON);
}
}
function sendConfirmationEmail(name, email) {
// اختياري: أرسل بريد تأكيد
// ألغي التعليق للاستخدام
/*
if (email) {
MailApp.sendEmail(email, 'تأكيد استلام الاستبانة',
`مرحباً ${name},\n\nتم استلام استبانتك بنجاح. شكراً لك على تقييمك!`);
}
*/
}
// دالة اختبار (للتطوير فقط)
function testPost() {
const testData = {
timestamp: new Date().toLocaleString('ar-EG'),
name: 'تجربة',
department: 'الاختبار',
school: 'مدرسة',
group: 'المعادي',
content_quality: 'ممتاز',
clarity: 'واضح جدًا',
skill_development: 'نعم بشكل كبير',
organization: 'ممتاز',
trainers: 'إلهام عز العرب محمد',
trainer_ratings: { rating_إلهام_عز_العرب_محمد: '5' },
trainer_feedback: 'جيد جداً',
future_training: 'نعم',
favorite_aspect: 'الشرح الواضح',
improvement_areas: 'لا شيء',
suggestions: 'استمروا',
support_suggestions: 'دعم جيد'
};
const result = doPost({
postData: {
contents: JSON.stringify(testData)
}
});
Logger.log(result.getContent());
}
https://script.google.com/macros/d/{SCRIPT_ID}/usercontentافتح ملف survey_form.html في محرر نصوص
const GOOGLE_SHEETS_URL = 'https://script.google.com/macros/d/YOUR_SCRIPT_ID/usercontent';
YOUR_SCRIPT_ID برقم التطبيق الخاص بكمثال:
const GOOGLE_SHEETS_URL = 'https://script.google.com/macros/d/1a2B3cDeF4gH5iJ6kL7mN8oP9qR0sT1uV/usercontent';
=COUNTA(responses!A:A)-1
=COUNTIF(responses!F:F,"ممتاز")+COUNTIF(responses!F:F,"جيد جدًا")*0.9+COUNTIF(responses!F:F,"جيد")*0.7
خيار 1: ملف محلي - وضع الملف على USB أو إرسال البريد الإلكتروني
خيار 2: رفع على موقع ويب - استخدام GitHub Pages أو موقع استضافة مجاني
خيار 3: دمج في موقع - استخدام
<iframe> في موقعك
مثال iframe:
<iframe
src="path/to/survey_form.html"
width="100%"
height="1200"
frameborder="0">
</iframe>
الحلول: 1. تحقق من رابط
GOOGLE_SHEETS_URL - تأكد أنه صحيح 2. في Apps Script، انقر
على “Executions” للتحقق من الأخطاء 3. تأكد من إعادة النشر بعد تعديل
الكود
الحل: - هذا طبيعي مع mode: 'no-cors' -
البيانات تُحفظ حتى مع الخطأ - تحقق من Google Sheet للتأكد
الحل: - تأكد من الحفظ بصيغة UTF-8 - تحقق من ترميز الملف
newRowقم بإلغاء التعليق في دالة sendConfirmationEmail وأضف حقل
بريد إلكتروني للنموذج
في Google Sheets استخدم “Data” → “Create a filter”
✅ الخصوصية: البيانات محفوظة في Google Sheets الخاص بك ✅ الأمان: استخدام الحسابات الموثوقة من Google ✅ النسخ الاحتياطية: Google Sheets يحتفظ بسجل الإصدارات ✅ الوصول: يمكنك مشاركة Sheet مع فريقك
للمزيد من الميزات: - إضافة رسوم بيانية متقدمة - تقارير تلقائية بالبريد الإلكتروني - تصدير البيانات إلى PDF - إشعارات فورية للمستجدات
تم إنشاد هذا الدليل بواسطة Claude آخر تحديث: 2026