<?xml version="1.0"?>
<rss version="2.0"><channel><title>&#x627;&#x644;&#x628;&#x631;&#x627;&#x645;&#x62C; &#x648;&#x627;&#x644;&#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A;: &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644;</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/?d=8</link><description>&#x627;&#x644;&#x628;&#x631;&#x627;&#x645;&#x62C; &#x648;&#x627;&#x644;&#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A;: &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644;</description><language>ar</language><item><title>&#x627;&#x644;&#x631;&#x633;&#x648;&#x645; &#x627;&#x644;&#x628;&#x64A;&#x627;&#x646;&#x64A;&#x629; &#x648;&#x639;&#x631;&#x636;&#x647;&#x627; &#x641;&#x64A; &#x634;&#x631;&#x627;&#x626;&#x62D; &#x62C;&#x648;&#x62C;&#x644; &#x645;&#x646; &#x62E;&#x644;&#x627;&#x644; Apps Script</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%B1%D8%B3%D9%88%D9%85-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D9%8A%D8%A9-%D9%88%D8%B9%D8%B1%D8%B6%D9%87%D8%A7-%D9%81%D9%8A-%D8%B4%D8%B1%D8%A7%D8%A6%D8%AD-%D8%AC%D9%88%D8%AC%D9%84-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r751/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62c7ef8b6e118_--------Apps-Script.jpg.23f1771f506efe34b8155262a7a4b634.jpg" /></p>

<p>
	هذا هو المقال الأخير من سلسلة مقالات حول تعلم أساسيات برمجة التطبيقات باستخدام <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r295/" rel="">جداول بيانات جوجل</a>، يعلمك هذا المقال كيفية استخدام خدمة جدول البيانات في Apps Script لعمل رسم بياني لمجموعة بياناتك، وستتعلم أيضًا كيفية استخدام خدمة العروض التقديمية لتصدير الرسم البياني إلى عرض تقديمي جديد في Google Slides.
</p>

<p>
	هذا هو المقال السادس في دليل تعلم أساسيات برمجة التطبيقات مع جداول بيانات جوجل، وقبل البدء تأكد من إكمال المقالات السابقة:
</p>

<ol>
<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">أساسيات برمجة التطبيقات Apps Script</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D9%88%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r747/" rel="">جداول البيانات والأوراق والنطاقات</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r748/" rel="">العمل مع البيانات</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AF%D8%B9%D8%A7%D8%A1-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-api-%D8%B9%D8%A7%D9%85%D8%A9-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-apps-script-r749/" rel="">استدعاء واجهة برمجة تطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> عامة</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AF%D8%A7%D8%AE%D9%84-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-apps-script-r750/" rel="">تنسيق البيانات</a>.
	</li>
</ol>
<h2>
	ماذا ستتعلم
</h2>

<ol>
<li>
		كيفية إنشاء رسم بياني خطي باستخدام Apps Script.
	</li>
	<li>
		كيفية تصدير الرسوم البيانية إلى عرض شرائح تقديمي جديد.
	</li>
	<li>
		كيفية تقديم الرسائل ومربعات الحوار إلى المستخدم في جداول البيانات.
	</li>
</ol>
<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: يحتوي Apps Script على خدمة رسوم بيانية مخصصة لإنشاء الرسوم البيانية وتحريرها لاستخدامها في تطبيقات خارج جداول بيانات Google، ومع ذلك لن يغطي هذا المقال حالات الاستخدام هذه، بل ستعمل مع خدمة جداول بيانات Apps Script لإنشاء الرسوم البيانية المضمنة ومعالجتها.
		</p>
	</div>
</blockquote>

<h2>
	ماذا ستحتاج
</h2>

<ul>
<li>
		فهم موضوعات Apps Script الأساسية التي استكشفناها في المقالين السابقين من هذا الدليل.
	</li>
	<li>
		الإلمام الأساسي بمحرر الشيفرات البرمجية Apps Script.
	</li>
	<li>
		الإلمام الأساسي بجداول بيانات Google.
	</li>
	<li>
		الإلمام الأساسي <a href="https://wiki.hsoub.com/JavaScript" rel="external">بلغة البرمجة JavaScript</a> وصنف 'String' الخاص به.
	</li>
</ul>
<h2>
	الإعداد للعمل
</h2>

<p>
	قبل المتابعة أنت بحاجة إلى جدول بيانات يحتوي على بعض البيانات كما فعلنا في المقالات السابقة، لا تقلق فقد وفرنا لك جدول بيانات جاهز لاستخدامه في هذا التمرين يمكنك <a data-fileid="102060" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=102060" rel="">تنزيله</a> ورفعه على حسابك في جوجل درايف باستخدام إحدى الطريقتين اللتين ذكرناها في <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">المقال الأول</a>، ويجب أن تبدو الورقة على هذا النحو مع بعض المعلومات الأساسية حول أسعار صرف الدولار الأمريكي المختلفة في تواريخ مختلفة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102061" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b9920748c61_001-1.png.3c6ae9724b18b2daaf0dac567914a037.png" rel=""><img alt="001 - الرسم البياني 1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="102061" data-unique="65mxppgu1" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b9920890886_001-1.thumb.png.d00c6f600858bb5d18ab8988814696c1.png" style="width: 700px; height: auto;"></a>
</p>

<p>
	افتح محرر النصوص البرمجية لـ Apps Script بالنقر على "الإضافات" ثم اختيار "برمجة تطبيقات جوجل"، ثم انقر على كلمة "مشروع بلا عنوان" الموجودة أعلى يمين النافذة لتغيير اسم المشروع إلى "Dates and USD Exchange Rates"، ثم اضغط على زر "إعادة تسمية".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102068" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b99235e93e0_002-2.png.77a6ec06d85bc52f750c4e1b73872c49.png" rel=""><img alt="002 - الرسم البياني 2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="102068" data-unique="clfllob5n" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b9923d07320_002-2.thumb.png.5e95512e634426a4e3e62a510673c26a.png" style="width: 700px; height: auto;"></a>
</p>

<p>
	احذف الشيفرة البرمجية الموجودة بالمحرر واستبدلها بالشيفرة البرمجية التالية:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4562_16" style="">
<span class="com">/**
 دالة خاصة يتم تشغيلها عند فتح جدول البيانات أو إعادة تحميله *
 وتستخدم لإضافة قائمة مخصصة إلى جدول البيانات *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> onOpen</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">// Get the Ui object. </span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> ui </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getUi</span><span class="pun">();</span><span class="pln">

  </span><span class="pun">إنشاء</span><span class="pln"> </span><span class="pun">قائمة</span><span class="pln"> </span><span class="pun">مخصصة</span><span class="pln"> </span><span class="com">// </span><span class="pln">
  ui</span><span class="pun">.</span><span class="pln">createMenu</span><span class="pun">(</span><span class="str">'عرض مجموعة البيانات'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="pln">
      </span><span class="str">"رسم بياني لتواريخ وأسعار صرف الدولار الأمريكي"</span><span class="pun">,</span><span class="pln">
      </span><span class="str">"createEmbeddedLineChart"</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="str">"تصدير الرسوم البيانية إلى شرائح جوجل"</span><span class="pun">,</span><span class="str">"exportChartsToSlides"</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addToUi</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	أعتقد أنه أصبح لديك الخبرة الكافية التي تمكنك من فهم ما ستنفذه هذه الشيفرة البرمجية من المقالات السابقة من هذه السلسلة، نعم بالفعل ستعمل هذه الشيفرة البرمجية على إنشاء قائمة مخصصة باسم "عرض مجموعة البيانات" التي تحتوي بداخلها على العنصر "رسم بياني لتواريخ وأسعار صرف الدولار الأمريكي" والعنصر "تصدير الرسوم البيانية إلى شرائح جوجل".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102064" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b9921d2473f_003-3.png.5ddd903a33116ee43e6a8e7323c45192.png" rel=""><img alt="003 - الرسم البياني 3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="102064" data-unique="7voe9qcr5" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b992212865e_003-3.thumb.png.35a865b664004271d10e735cf46359cc.png" style="width: 700px; height: auto;"></a>
</p>

<p>
	الآن بحصولك على جدول بيانات ومشروع Apps Script فأنت على استعداد لبدء المقال، انتقل إلى القسم التالي من هذا المقال للتعرف على الرسوم البيانية والمحفزات التي يحركها الوقت.
</p>

<h2>
	إنشاء رسم بياني في جداول البيانات باستخدام Apps Script
</h2>

<p>
	افترض أنك تريد تصميم رسم بياني معين لتصور مجموعة بيانات، يمكنك بالفعل استخدام Apps Script لإنشاء الرسوم البيانية وتعديلها وإدراجها في جداول بيانات جوجل، وعندما تضمن رسم بياني داخل جدول بيانات، فإنه يسمى "رسم بياني مضمن".
</p>

<p>
	وتُستخدم الرسوم البيانية لتصور سلسلة بيانات واحدة أو أكثر، وبالنسبة للرسوم البيانية المضمنة فهي تأتي بالبيانات التي تعرضها عادةً من داخل جدول البيانات، وعادةً ما يؤدي تحديث البيانات في جدول البيانات إلى تحديث الرسم البياني تلقائيًا.
</p>

<p>
	ويمكنك استخدام Apps Script لإنشاء رسوم بيانية مخصصة ومضمنة من البداية، أو لتحديث الرسوم البيانية الحالية، ويقدم هذا القسم من المقال أساسيات إنشاء الرسوم البيانية المضمنة في جداول البيانات باستخدام Apps Script وخدمة جداول البيانات.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تحذير</strong>: بينما يمكنك استخدام Apps Script لأداء مهام متعددة باستخدام الرسوم البيانية إلا أن هناك بعض الإجراءات التي لا يمكنك تنفيذها بها، فعلى الرغم من أن خدمة جدول البيانات توفر العديد من أصناف <code>EmbeddedChart</code> والتي بدورها توفر دوال الرسوم البيانية، لكنها لا تغطي كل خيارات التكوين الممكنة، وبالإضافة إلى ذلك يستخدم Apps Script واجهة برمجة تطبيقات Google Charts <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> والتي لها قيودها الخاصة.
		</p>
	</div>
</blockquote>

<p>
	وبسبب هذه القيود غالبًا ما يكون من المفيد استخدام Apps Script لإنشاء رسوم بيانية أو للتعديل على رسوم بيانية أولًا، ثم ضبط التنسيق لهذه الرسوم البيانية يدويًا في جداول البيانات، نعم قد لا تتمكن من أتمتة كل عملية متعلقة بالرسم البياني في Apps Script ولكن يمكنك أتمتة قدر كبير منها.
</p>

<h3>
	التطبيق
</h3>

<p>
	في نسختك من جدول البيانات تعرض مجموعة البيانات "التواريخ وأسعار صرف الدولار الأمريكي" أسعار الصرف (مقابل 1 دولار أمريكي) للعملات المختلفة في تواريخ مختلفة، وستكون مهمتك تنفيذ دالة Apps Script التي تنشئ مخططًا لتصوير جزء من هذه البيانات.
</p>

<p>
	لتنفيذ ذلك، افتح المشروع الذي أنشأناه في Apps Script باسم "Dates and USD Exchange Rates"، ثم أضف الدالة التالية إلى نهاية النص البرمجي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4562_19" style="">
<span class="com">/**
 إنشاء وإدراج رسم بياني *
مضمنًا في الورقة النشطة *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> createEmbeddedLineChart</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> sheet </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSheet</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> chartDataRange </span><span class="pun">=</span><span class="pln"> sheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="pln">
    </span><span class="str">'مجموعة بيانات التواريخ وأسعار صرف الدولار الأمريكي!A2:F102'</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> hAxisOptions </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    slantedText</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln">
    slantedTextAngle</span><span class="pun">:</span><span class="pln"> </span><span class="lit">60</span><span class="pun">,</span><span class="pln">
    gridlines</span><span class="pun">:</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      count</span><span class="pun">:</span><span class="pln"> </span><span class="lit">12</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">};</span><span class="pln">

  </span><span class="kwd">var</span><span class="pln"> lineChartBuilder </span><span class="pun">=</span><span class="pln"> sheet</span><span class="pun">.</span><span class="pln">newChart</span><span class="pun">().</span><span class="pln">asLineChart</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> chart </span><span class="pun">=</span><span class="pln"> lineChartBuilder
    </span><span class="pun">.</span><span class="pln">addRange</span><span class="pun">(</span><span class="pln">chartDataRange</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">setPosition</span><span class="pun">(</span><span class="lit">5</span><span class="pun">,</span><span class="pln"> </span><span class="lit">8</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">setTitle</span><span class="pun">(</span><span class="str">'أسعار صرف الدولار الأمريكي'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">setNumHeaders</span><span class="pun">(</span><span class="lit">1</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">setLegendPosition</span><span class="pun">(</span><span class="typ">Charts</span><span class="pun">.</span><span class="typ">Position</span><span class="pun">.</span><span class="pln">RIGHT</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">setOption</span><span class="pun">(</span><span class="str">'hAxis'</span><span class="pun">,</span><span class="pln"> hAxisOptions</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">setOption</span><span class="pun">(</span><span class="str">"useFirstColumnAsDomain"</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">build</span><span class="pun">();</span><span class="pln">

  sheet</span><span class="pun">.</span><span class="pln">insertChart</span><span class="pun">(</span><span class="pln">chart</span><span class="pun">);</span><span class="pln">  
</span><span class="pun">}</span></pre>

<p>
	احفظ مشروع نصك البرمجي.
</p>

<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	تنفذ الشيفرة البرمجية التي أضفتها الدالة المرتبطة بعنصر القائمة المخصصة المسمى "رسم بياني لتواريخ وأسعار صرف الدولار الأمريكي" لإنشاء رسم بياني خطي أساسي، دعنا نراجع هذه الشيفرة البرمجية.
</p>

<p>
	تحدد الأسطر الأولى المتغيرات الثلاثة التالية:
</p>

<ul>
<li>
		أولًا، المتغير <code>Sheet</code> وهو يمثل المرجع للصفحة النشطة الحالية.
	</li>
	<li>
		ثانيا، المتغير <code>chartDataRange</code> وهو يمثل نطاق البيانات الذي نريد تصويره عبر الرسم البياني، واستخدمنا أسلوب التدوين A1 لتحديد النطاق الذي يغطي الخلايا من "A2" إلى "F102" في الورقة المسماة "مجموعة بيانات التواريخ وأسعار صرف الدولار الأمريكي"، فمن خلال تحديد اسم الورقة نتأكد من أن عنصر القائمة المخصصة سوف يعمل حتى إذا كانت هناك ورقة مختلفة نشطة، ويعني البدء من الصف "2" أننا نضمن رؤوس الأعمدة بالنطاق وأننا سنرسم فقط أحدث 100 تاريخ (صفوف).
	</li>
	<li>
		ثالثًا، المتغير <code>hAxisOptions</code> وهو يمثل كائن JavaScript أساسي يتضمن بعض معلومات الإعداد التي تستخدمها التعليمات البرمجية لتكوين مظهر المحور الأفقي، على وجه التحديد يعمل على تعيين التسميات النصية للمحور الأفقي عند زاوية ميل 60 درجة، ثم يعمل على تعيين عدد خطوط الشبكة العمودية على "12" خط.
	</li>
</ul>
<p>
	يعمل السطر التالي على إنشاء "كائن منشئ الرسم البياني الخطي"، وتُنشأ الرسوم البيانية المضمنة في Apps Script باستخدام "منشيء نمط التصميم" وهو خارج نطاق هذا الدليل، لكن ما يهمك معرفته هو أن خدمة جداول البيانات توفر العديد من الأصناف <code>EmbeddedChartBuilder</code>.
</p>

<p>
	لإنشاء رسم بياني تعمل التعليمات البرمجية أولاً على إنشاء "كائن منشئ رسم بياني مضمن"، وتستخدم توابعه لتحديد إعدادات الرسم البياني، ثم تستدعي التابع <code>()build</code> لإنشاء "كائن منشئ رسم بياني مضمن" النهائي، ولا تعمل تعليماتك البرمجية على تعديل "كائن منشئ رسم بياني مضمن" مباشرةً، إذ تدار كافة تكوين الرسم البياني من خلال أصناف <code>Builder</code>.
</p>

<p>
	توفر خدمة جدول البيانات الصنف الأب <code>EmbeddedChartBuilder</code> بالإضافة إلى أصناف ابن متعددة للمنشئ مثل <code>EmbeddedLineChartBuilder</code>، وتسمح الأصناف الابن لـ Apps Script بتوفير توابع لتهيئة منشئ الرسم البياني التي تنطبق فقط على أنواع معينة من الرسوم البيانية، على سبيل المثال: يوفر الصنف <code>EmbeddedPieChartBuilder</code> التابع <code>()set3D</code> وهو يعمل فقط مع الرسوم البيانية الدائرية.
</p>

<p>
	السطر رقم "35" في شيفرتك البرمجية يعمل على إنشاء "كائن منشئ رسم بياني خطي" من خلال المتغير <code>lineChartBuilder</code>.
</p>

<p>
	تستدعي الشيفرة البرمجية التابع <code>()Sheet.newChart</code> لإنشاء كائن "EmbeddedChartBuilder"، ثم يستخدم <code>()EmbeddedChartBuilder.asLineChart</code> لتعيين نوع المنشئ إلى "EmbeddedLineChartBuilder"، ثم تنشئ الشيفرة البرمجية الرسم البياني باستخدام "الرسم البياني الخطي"، وهذا الجزء من الشيفرة البرمجية مجرد سلسلة من استدعاءات التابع لتحديد إعدادات الرسم البياني، متبوعة باستدعاء <code>()build</code> لإنشاء الرسم البياني، وإليك ما تفعله استدعاءات التابع:
</p>

<ol>
<li>
		الاستدعاء <code>()addRange</code> الذي يأخذ معامل واحد فقط وهو "النطاق"، ليحدد نطاق البيانات الذي يعرضه الرسم البياني.
	</li>
	<li>
		الاستدعاء <code>()setPosition</code>يحدد مكان وضع الرسم البياني في الورقة، وهذا التابع يأخذ أربع معاملات، هم: الأول "موضع ارتكاز الصف" والثاني "موضع ارتكاز العمود" والثالث "الإزاحة X" والرابع "الإزاحة Y"، وفي حالتنا أدرجت الشيفرة البرمجية الزاوية العلوية اليسرى للرسم البياني في الخلية "H5".
	</li>
	<li>
		الاستدعاء <code>()setTitle</code> الذي يأخذ معامل واحد فقط وهو "العنوان"، ليحدد عنوان الرسم البياني.
	</li>
	<li>
		الاستدعاء <code>()setNumHeaders</code> الذي يأخذ معامل واحد فقط وهو "عدد الرؤوس"، ليحديد عدد الصفوف أو الأعمدة في نطاق البيانات التي يجب معاملتها كرؤوس، وهنا تستخدم الشيفرة البرمجية الصف الأول في نطاق البيانات كرأس، مما يعني أن النص الموجود في هذا الصف يُستخدم كعناوين لسلسلة البيانات الفردية في الرسم البياني.
	</li>
	<li>
		الاستدعاء <code>()setLegendPosition</code> الذي يأخذ معامل واحد فقط وهو "الموضع"، ليُحرك وسيلة إيضاح الرسم البياني إلى الجانب الأيمن من الرسم البياني، ويستخدم هذا التابع <code>Charts.Position</code> كمعامل.
	</li>
	<li>
		الاستدعاء <code>()setOption</code> الذي يأخذ معاملين، هما: الأول "الخيار" والثاني "القيمة"، وذلك ليحدد خيارات الرسم البياني المعقدة، وفي حالتنا تُعين الشيفرة البرمجية خيار <code>hAxis</code> على كائن <code>hAxisOptions</code>، وهناك عدة خيارات يمكنك ضبطها باستخدام هذا التابع، ولقد وُثقت الخيارات والقيم الممكنة لكل نوع رسم بياني في <a href="https://developers.google.com/chart/interactive/docs/gallery" rel="external nofollow">معرض <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> الرسوم البيانية</a>.
	</li>
	<li>
		الاستدعاء <code>()build</code> ينشئ ويعيد كائن <code>EmbeddedChart</code> باستخدام الإعدادات المذكورة أعلاه.
	</li>
</ol>
<p>
	أخيرًا، تستدعي الشيفرة البرمجية <code>()Sheet.insertChart</code> الذي يأخذ معامل واحد فقط وهو "الرسم البياني"، لوضع الرسم البياني المدمج في الورقة النشطة.
</p>

<h3>
	النتائج
</h3>

<p>
	يمكنك رؤية دالة إنشاء رسمك البياني الخطي وهي تعمل عن طريق تنفيذ ما يلي:
</p>

<ol>
<li>
		إذهب إلى جداول بيانات جوجل الذي نتدرب عليه "التواريخ وأسعار صرف الدولار الأمريكي" ثم انقر على القائمة المخصصة "عرض مجموعة البيانات" في شريط القوائم، ثم اختر منها القائمة الفرعية "رسم بياني لتواريخ وأسعار صرف الدولار الأمريكي".
	</li>
	<li>
		إذا ظهر لك مربع حوار "لم يتم التحقق من هذا التطبيق" فاتبع الخطوات التي تعلمتها في المقالات السابقة لإعطاء الإذن للماكرو لكي يعمل.
	</li>
	<li>
		يجب أن تبدو النتائج كما يلي:
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102065" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b9922968055_004-4.gif.895bcd99bd357b5947c29305c6752545.gif" rel=""><img alt="004 - الرسم البياني 4.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="102065" data-unique="09aqqapfz" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b9922968055_004-4.gif.895bcd99bd357b5947c29305c6752545.gif" style="width: 750px; height: auto;"></a>
</p>

<p>
	تهانينا، لقد أنشأت رسمًا بيانيًا خطيًا مضمّنًا باستخدام برمجة التطبيقات Apps Script، وسوف يعلمك القسم التالي كيفية تصدير رسمك البياني إلى العروض التقديمية من جوجل.
</p>

<h2>
	تصدير الرسم البياني إلى العروض التقديمية
</h2>

<p>
	تتمثل إحدى نقاط القوة العظيمة في Apps Script في أنه يسمح لك بنقل البيانات بسهولة من أحد تطبيقات جوجل إلى آخر، وذلك لأن معظم هذه التطبيقات تحتوي على خدمة Apps Script، فكما تحتوي جداول بيانات جوجل على "خدمة جداول البيانات"، أيضًا يحتوي بريد Gmail على "خدمة Gmail"، ويحتوي محرر مستندات جوجل على "خدمة المستندات"، ويحتوي Google Slides على "خدمة العروض التقديمية"، ومع كل هذه الخدمات المضمنة يمكنك استخراج البيانات من أحد هذه التطبيقات ومعالجتها ثم كتابة النتيجة في تطبيق آخر.
</p>

<p>
	وأنت في هذا القسم من المقال ستتعلم كيفية تصدير كل رسم بياني مضمن في جدول بيانات جوجل إلى عرض تقديمي جديد من Google Slides، وسترى أيضًا طريقتين لعرض الرسائل المخصصة للمستخدم في جداول البيانات.
</p>

<h3>
	التطبيق
</h3>

<p>
	هنا ستعمل على إنشاء الدالة المرتبطة بعنصر القائمة المخصصة المسمى "تصدير الرسوم البيانية إلى شرائح جوجل"، لذا افتح المشروع الذي أنشأناه في Apps Script باسم "Dates and USD Exchange Rates"، ثم أضف الدالة التالية إلى نهاية النص البرمجي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4562_24" style="">
<span class="com">/**
إنشاء عرضًا تقديميًا للرسوم البيانية *
 ثم تصدير جميع الرسوم البيانية المضمنة في جدول البيانات إلى هذا العرض التقديمي *
 رسم بياني واحد لكل شريحة *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> exportChartsToSlides</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> ss </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSpreadsheet</span><span class="pun">();</span><span class="pln">

  </span><span class="pun">إحضار</span><span class="pln"> </span><span class="pun">قائمة</span><span class="pln"> </span><span class="pun">بجميع</span><span class="pln"> </span><span class="pun">الرسوم</span><span class="pln"> </span><span class="pun">البيانية</span><span class="pln"> </span><span class="pun">المضمنة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">في</span><span class="pln"> </span><span class="pun">جدول</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">هذا</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> charts </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[];</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> sheets </span><span class="pun">=</span><span class="pln"> ss</span><span class="pun">.</span><span class="pln">getSheets</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> sheets</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    charts </span><span class="pun">=</span><span class="pln"> charts</span><span class="pun">.</span><span class="pln">concat</span><span class="pun">(</span><span class="pln">sheets</span><span class="pun">[</span><span class="pln">i</span><span class="pun">].</span><span class="pln">getCharts</span><span class="pun">());</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="pun">إذا</span><span class="pln"> </span><span class="pun">لم</span><span class="pln"> </span><span class="pun">يكن</span><span class="pln"> </span><span class="pun">هناك</span><span class="pln"> </span><span class="pun">أي</span><span class="pln"> </span><span class="pun">رسوم</span><span class="pln"> </span><span class="pun">بيانية</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">اعرض</span><span class="pln"> </span><span class="pun">رسالة</span><span class="pln"> </span><span class="pun">للمستخدم</span><span class="pln"> </span><span class="pun">تخبره</span><span class="pln"> </span><span class="pun">بذلك</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">وارجع</span><span class="pln"> </span><span class="pun">دون</span><span class="pln"> </span><span class="pun">القيام</span><span class="pln"> </span><span class="pun">بأي</span><span class="pln"> </span><span class="pun">شيء</span><span class="pln"> </span><span class="pun">آخر</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">charts</span><span class="pun">.</span><span class="pln">length </span><span class="pun">==</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    ss</span><span class="pun">.</span><span class="pln">toast</span><span class="pun">(</span><span class="str">'لا توجد رسوم بيانية لتصديرها!'</span><span class="pun">);</span><span class="pln">
    </span><span class="kwd">return</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="pun">إنشاء</span><span class="pln"> </span><span class="pun">عرض</span><span class="pln"> </span><span class="pun">شرائح</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">وإزالة</span><span class="pln"> </span><span class="pun">عنوان</span><span class="pln"> </span><span class="pun">الشريحة</span><span class="pln"> </span><span class="pun">الافتراضية</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> presentationTitle </span><span class="pun">=</span><span class="pln">
    </span><span class="str">" العرض التقديمي لـ"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">""</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> ss</span><span class="pun">.</span><span class="pln">getName</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> slides </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SlidesApp</span><span class="pun">.</span><span class="pln">create</span><span class="pun">(</span><span class="pln">presentationTitle</span><span class="pun">);</span><span class="pln">
  slides</span><span class="pun">.</span><span class="pln">getSlides</span><span class="pun">()[</span><span class="lit">0</span><span class="pun">].</span><span class="pln">remove</span><span class="pun">();</span><span class="pln">  

  </span><span class="pun">إضافة</span><span class="pln"> </span><span class="pun">الرسوم</span><span class="pln"> </span><span class="pun">البيانية</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">العرض</span><span class="pln"> </span><span class="pun">التقديمي</span><span class="pln"> </span><span class="pun">،</span><span class="pln"> </span><span class="pun">رسم</span><span class="pln"> </span><span class="pun">بياني</span><span class="pln"> </span><span class="pun">واحد</span><span class="pln"> </span><span class="pun">لكل</span><span class="pln"> </span><span class="pun">شريحة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> position </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">left</span><span class="pun">:</span><span class="pln"> </span><span class="lit">40</span><span class="pun">,</span><span class="pln"> top</span><span class="pun">:</span><span class="pln"> </span><span class="lit">30</span><span class="pun">};</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> size </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="pln">height</span><span class="pun">:</span><span class="pln"> </span><span class="lit">340</span><span class="pun">,</span><span class="pln"> width</span><span class="pun">:</span><span class="pln"> </span><span class="lit">430</span><span class="pun">};</span><span class="pln">
  </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> charts</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">var</span><span class="pln"> newSlide </span><span class="pun">=</span><span class="pln"> slides</span><span class="pun">.</span><span class="pln">appendSlide</span><span class="pun">();</span><span class="pln">
    newSlide</span><span class="pun">.</span><span class="pln">insertSheetsChart</span><span class="pun">(</span><span class="pln">
      charts</span><span class="pun">[</span><span class="pln">i</span><span class="pun">],</span><span class="pln">
      position</span><span class="pun">.</span><span class="pln">left</span><span class="pun">,</span><span class="pln">
      position</span><span class="pun">.</span><span class="pln">top</span><span class="pun">,</span><span class="pln">
      size</span><span class="pun">.</span><span class="pln">width</span><span class="pun">,</span><span class="pln">
      size</span><span class="pun">.</span><span class="pln">height</span><span class="pun">);</span><span class="pln">   
  </span><span class="pun">}</span><span class="pln">

 </span><span class="pun">إنشاء</span><span class="pln"> </span><span class="pun">مربع</span><span class="pln"> </span><span class="pun">حوار</span><span class="pln"> </span><span class="pun">وعرضه</span><span class="pln"> </span><span class="pun">لإعلام</span><span class="pln"> </span><span class="pun">المستخدم</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">بمكان</span><span class="pln"> </span><span class="pun">العثور</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">العرض</span><span class="pln"> </span><span class="pun">التقديمي</span><span class="pln"> </span><span class="pun">الجديد</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> slidesUrl </span><span class="pun">=</span><span class="pln"> slides</span><span class="pun">.</span><span class="pln">getUrl</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> html </span><span class="pun">=</span><span class="pln"> </span><span class="str">"&lt;p&gt;ابحث عنه في مجلدك الرئيسي على جوجل درايف:&lt;/p&gt;"</span><span class="pln">
      </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&lt;p&gt;&lt;a href=\""</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> slidesUrl </span><span class="pun">+</span><span class="pln"> </span><span class="str">"\" target=\"_blank\"&gt;"</span><span class="pln">
      </span><span class="pun">+</span><span class="pln"> presentationTitle </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&lt;/a&gt;&lt;/p&gt;"</span><span class="pun">;</span><span class="pln">

  </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getUi</span><span class="pun">().</span><span class="pln">showModalDialog</span><span class="pun">(</span><span class="pln">
    </span><span class="typ">HtmlService</span><span class="pun">.</span><span class="pln">createHtmlOutput</span><span class="pun">(</span><span class="pln">html</span><span class="pun">)</span><span class="pln">
      </span><span class="pun">.</span><span class="pln">setHeight</span><span class="pun">(</span><span class="lit">120</span><span class="pun">)</span><span class="pln">
      </span><span class="pun">.</span><span class="pln">setWidth</span><span class="pun">(</span><span class="lit">350</span><span class="pun">),</span><span class="pln">
      </span><span class="str">"إنشاء عرض تقديمي!"</span><span class="pln">
  </span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	احفظ مشروع نصك البرمجي.
</p>

<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	قد تكون هذه الشيفرة البرمجية أقصر مما كنت تتوقع، دعنا نراجع ما تفعله من خلال تقسيمها إلى خمسة أقسام:
</p>

<h4>
	1. الحصول على الرسوم البيانية
</h4>

<p>
	تبحث الأسطر القليلة الأولى في جدول البيانات النشط للعثور على جميع الرسوم البيانية المضمنة، ثم تجميعها في مصفوفة رسوم بيانية، وتستخدم هذه الأسطر التابع <code>()Spreadsheet.getSheets</code> والتابع <code>()Sheet.getCharts</code> للحصول على قوائم بالأوراق والرسوم البيانية، ويُستخدم التابع <code>()Array.concat</code> من <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-javascript-r550/" rel="">جافا سكريبت</a> لإلحاق قائمة الرسوم البيانية من كل ورقة إلى المتغير <code>charts</code>.
</p>

<h4>
	2. التحقق من وجود رسوم بيانية لتصديرها
</h4>

<p>
	تتحقق الشيفرة البرمجية من وجود أي رسوم بيانية للتصدير، ونريد بذلك تجنب عمل عرض تقديمي فارغ، لذلك إذا لم تكن هناك رسوم بيانية، فإن الشيفرة البرمجية ستعمل على إنشاء رسالة باستخدام التابع <code>()Spreadsheet.toast</code> الذي يأخذ معامل واحد فقط وهو "الرسالة"، وهو عبارة عن مربع حوار "نظرة خاطفة" صغير ينبثق في الركن الأيسر السفلي من جداول البيانات، ويبقى لبضع ثوانٍ ثم يختفي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102066" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b9922e0c1c9_005-5.gif.f4d8759a5e174f40abaf21e60f9550bc.gif" rel=""><img alt="005 - الرسم البياني 5.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="102066" data-unique="317q2rbn5" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b9922e0c1c9_005-5.gif.f4d8759a5e174f40abaf21e60f9550bc.gif" style="width: 750px; height: auto;"></a>
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>توضيح</strong>: تعد الرسائل رائعة لإظهار ما يحدث للمستخدم على الرغم من أنها رسائل لا يحتاجون إلى الرد عليه، فهي فقط رسائل تخبر المستخدم أن إجراء القائمة المخصصة قد اكتمل بنجاح ولكنه لم ينتج عنه أي شيء بسبب عدم وجود رسوم بيانية لتصديرها، تخيل معي أن الشيفرة البرمجية لم تنشئ هذه الرسالة على الفور سيعتقد المستخدم أن عنصر القائمة المخصصة لا يفعل أي شيء على الإطلاق وقد يعتقد أن السكربت معطل، لذلك من أفضل الممارسات دائمًا إبقاء المستخدمين على اطلاع بما يفعله سكربتك، حتى عندما تواجه حالات خطأ.
		</p>
	</div>
</blockquote>

<p>
	فإذا لم يكن هناك رسوم بيانية لتصديرها، فإن الشيفرة البرمجية تنشئ رسالة وتخرج دون عمل أي شيء آخر، وإذا كانت هناك رسوم بيانية لتصديرها، فسوف تستكمل الشيفرة البرمجية خطوات إنشاء العرض التقديمي.
</p>

<h4>
	3. إنشاء عرض تقديمي
</h4>

<p>
	أُنشئ المتغير <code>presentationTitle</code> للاحتفاظ باسم ملف العرض التقديمي الجديد، ويستند اسم ملف العرض التقديمي على اسم جدول البيانات بالإضافة للسلسلة النصية "العرض التقديمي"، ثم تستدعي الشيفرة البرمجية تابع خدمة الشرائح (اسم ملف العرض التقديمي) <code>SlidesApp.create</code> لإنشاء عرض تقديمي.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>توضيح</strong>: يعمل الصنف <code>SlidesApp</code> كصنف أب في خدمة العروض التقديمية، تمامًا مثل الصنف <code>SpreadsheetApp</code> فهو صنف أب في خدمة جدول البيانات.
		</p>
	</div>
</blockquote>

<p>
	تنشئ الشيفرة البرمجية عرض تقديمي جديد بشريحة واحدة فارغة، لكننا لا نريد ذلك في عرضنا التقديمي، لذلك فإن الشيفرة البرمجية تزيله باستخدام <code>()Presentation.getSlides</code> و <code>()Slide.remove</code>.
</p>

<h4>
	4. تصدير الرسوم البيانية
</h4>

<p>
	في القسم التالي من الشيفرة البرمجية يُحدد موضع وحجم <a href="https://wiki.hsoub.com/JavaScript#.D8.A7.D9.84.D9.83.D8.A7.D8.A6.D9.86.D8.A7.D8.AA_.D8.A7.D9.84.D8.B9.D8.A7.D9.85.D8.A9" rel="external">كائنات JavaScript</a> لتعيين مكان وضع الرسوم البيانية المستوردة في الشريحة وتعيين حجم الرسم البياني يكون بالبكسل، وذلك لأن العناصر التي توضع داخل شرائح العرض تتطلب مواضع وأحجام محددة.
</p>

<p>
	من خلال حلقة التكرار <code>For</code> تطوف الشيفرة البرمجية على الرسوم البيانية المخزنة في المتغير <code>charts</code>، ثم تنشئ شريحة جديدة لكل رسم بياني باستخدام <code>()Presentation.appendSlide</code>، ثم إضافة الشريحة إلى نهاية العرض التقديمي، ثم تستخدم التابع <code>()Slide.insertSheetsChart</code> الذي يأخذ خمس معاملات، هم: الأول "مصرد الرسم البياني" والثاني "موقع اليسار" والثالث "الموقع العلوي" والرابع "العرض" والخامس "الارتفاع"، وذلك لاستيراد الرسم البياني إلى الشريحة بالموقع والحجم المحددين.
</p>

<h4>
	5. مشاركة موقع ملف العرض التقديمي
</h4>

<p>
	أخيرًا، تحتاج الشيفرة البرمجية إلى إخبار المستخدم بمكان ملف العرض التقديمي الجديد، ويفضل أن يكون ذلك باستخدام رابط يمكنه النقر عليه لفتحه، ولتنفيذ ذلك تستخدم الشيفرة البرمجية خدمة <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> في Apps Script لإنشاء مربع حوار مشروط مخصص، ومربعات الحوار المشروطة (المعروفة أيضًا باسم مربعات الحوار المخصصة في Apps Script) هي نوافذ تظهر على واجهة جداول البيانات، وعند عرضها تمنع مربعات الحوار المخصصة المستخدم من التفاعل مع جداول البيانات.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>توضيح</strong>: تعد مربعات الحوار المشروطة رائعة عندما يحتاج النص البرمجي إلى إدخال محدد من المستخدم للمتابعة، أو عندما تريد التأكد من رؤية المستخدم لشيء ما قبل مواصلة العمل في جداول بيانات جوجل.
		</p>
	</div>
</blockquote>

<p>
	ولإنشاء مربع حوار مخصص تحتاج التعليمات البرمجية إلى شيفرة HTML التي تحدد محتوياته، ففي المتغير <code>HTML</code> وفَّرت محتويات مربع الحوار المخصص التي تتمثل في:
</p>

<ol>
<li>
		فقرة قصيرة باستخدام الوسم <code>&lt;P&gt;</code>.
	</li>
	<li>
		ارتباط تشعبي يحتوي على عنوان ملف العرض التقديمي المخزن في المتغير <code>presentationTitle</code>، وهو مرتبط <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r1435/" rel="">بعنوان URL</a> للعرض التقديمي المقدم من <code>()Presentation.getUrl</code>.
	</li>
	<li>
		يستخدم الارتباط التشعبي أيضًا السمة <code>"target="_blank</code> وذلك لفتح العرض التقديمي في علامة تبويب مستعرض جديدة، وليس داخل مربع الحوار.
	</li>
</ol>
<p>
	تُحلل شيفرة HTML في الكائن<code>HtmlOutput</code> بواسطة التابع <code>(HtmlService.createHtmlOutput(html</code>، ويسمح الكائن<code>HtmlOutput</code> للشيفرة البرمجية بتعيين حجم مربع الحوار المخصص باستخدام <code>()HtmlOutput.setHeight</code> الذي يأخذ معامل واحد فقط وهو "قيمة الارتفاع"، و <code>()HtmlOutput.setWidth</code> الذي يأخذ معامل واحد فقط وهو "قيمة العرض".
</p>

<p>
	بمجرد إنشاء الكائن <code>htmlOutput</code>، تستخدم الشيفرة البرمجية التابع <code>(Ui.showModalDialog(htmlOutput, title</code> لعرض مربع الحوار بالعنوان المحدد.
</p>

<h3>
	النتائج
</h3>

<p>
	الآن بعد أن ربطت عنصر القائمة المخصصة المسمى "تصدير الرسوم البيانية إلى شرائح جوجل" بالدالة <code>()exportChartsToSlides</code>، يمكنك رؤية نتائج عملك عن طريق تنفيذ ما يلي:
</p>

<ol>
<li>
		إذهب إلى جداول بيانات جوجل الذي نتدرب عليه "التواريخ وأسعار صرف الدولار الأمريكي" ثم انقر على القائمة المخصصة "عرض مجموعة البيانات" في شريط القوائم، ثم اختر منها القائمة الفرعية "رسم بياني لتواريخ وأسعار صرف الدولار الأمريكي" وذلك لإنشاء رسم بياني داخل ورقة جدول البيانات.
	</li>
	<li>
		انقر مرة أخرى على القائمة المخصصة "عرض مجموعة البيانات" في شريط القوائم، ثم اختر منها القائمة الفرعية "تصدير الرسوم البيانية إلى شرائح جوجل".
	</li>
	<li>
		إذا ظهر لك مربع حوار "لم يتم التحقق من هذا التطبيق" فاتبع الخطوات التي تعلمتها في المقال السابقة لإعطاء الإذن للماكرو لكي يعمل.
	</li>
	<li>
		يجب أن ترى السكربت يعالج طلبك ويعرض مربع الحوار المخصص.
	</li>
	<li>
		لفتح عرض الشرائح الجديد انقر على رابط "عرض التواريخ وأسعار صرف الدولار الأمريكي"، ويجب أن تبدو النتائج كما يلي:
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="102067" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b9923543f6b_006-6.gif.7da4f1bef6bec1f330fd2be235dfc66e.gif" rel=""><img alt="006 - الرسم البياني 6.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="102067" data-unique="cgbfs19cj" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b9923543f6b_006-6.gif.7da4f1bef6bec1f330fd2be235dfc66e.gif" style="width: 750px; height: auto;"></a>
</p>

<p>
	تهانينا، يمكنك الآن تصدير الرسوم البيانية التي أنشأتها في جداول البيانات إلى عرض تقديمي في شرائح جوجل، كما يمكنك أيضًا كتابة شيفرة برمجية لإنشاء رسائل ومربعات حوار مخصصة موجهة للمستخدم.
</p>

<h2>
	خاتمة
</h2>

<p>
	وإلى هنا نكون قد وصلنا إلى نهاية دليل أساسيات برمجة التطبيقات باستخدام جداول بيانات جوجل، يمكنك الآن استخدام المبادئ التي درستها في هذا الدليل لتوسيع تجربة استخدامك لجداول البيانات واستكشاف إمكانيات Apps Script.
</p>

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

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقال السابق: <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AF%D8%A7%D8%AE%D9%84-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-apps-script-r750/" rel="">تنسيق البيانات داخل جداول بيانات جوجل باستخدام Apps Script</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">أساسيات برمجة التطبيقات Apps Script باستخدام جداول بيانات جوجل</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D9%88%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r747/" rel="">التعامل مع جداول البيانات والأوراق والنطاقات من خلال Apps Script</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r748/" rel="">العمل مع البيانات في جداول بيانات جوجل من خلال Apps Script</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AF%D8%B9%D8%A7%D8%A1-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-api-%D8%B9%D8%A7%D9%85%D8%A9-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-apps-script-r749/" rel="">كيفية استدعاء واجهة برمجة تطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> عامة في جداول بيانات جوجل باستخدام Apps Scrip</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">751</guid><pubDate>Fri, 08 Jul 2022 08:49:39 +0000</pubDate></item><item><title>&#x62A;&#x646;&#x633;&#x64A;&#x642; &#x627;&#x644;&#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62F;&#x627;&#x62E;&#x644; &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; Apps Script</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AF%D8%A7%D8%AE%D9%84-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-apps-script-r750/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62c7eeeab90e8_-------Apps-Script.jpg.752d74a1e06f0f9de1e790116eb6390a.jpg" /></p>

<p>
	مرحبًا بك في المقال الخامس من دليل تعلم أساسيات برمجة التطبيقات باستخدام <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r295/" rel="">جداول بيانات جوجل</a>، فبعد إكمالك لهذا المقال سوف يصبح لديك المعرفة في كيفية تنسيق بيانات جدول البيانات في Apps Script، وكتابة دوال مخصصة لإنشاء جداول بيانات منظمة مليئة بالبيانات المنسقة التي جُلبت من <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-api-r1314/" rel="">واجهة برمجة تطبيقات عامة <abbr title="Application Programming Interface | واجهة برمجية">API</abbr></a>.
</p>

<p>
	هذا هو المقال الرابع في دليل تعلم أساسيات برمجة التطبيقات مع جداول بيانات جوجل، وقبل البدء تأكد من إكمال المقالات السابقة:
</p>

<ol>
<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">أساسيات برمجة التطبيقات Apps Script</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D9%88%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r747/" rel="">جداول البيانات والأوراق والنطاقات</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r748/" rel="">العمل مع البيانات</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AF%D8%B9%D8%A7%D8%A1-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-api-%D8%B9%D8%A7%D9%85%D8%A9-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-apps-script-r749/" rel="">استدعاء واجهة برمجة تطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> عامة.</a>
	</li>
</ol>
<h2>
	ماذا ستتعلم
</h2>

<ol>
<li>
		كيفية تطبيق عمليات تنسيق جداول بيانات جوجل المختلفة في Apps Script.
	</li>
	<li>
		كيفية تحويل قائمة كائنات <a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%B9%D9%84%D9%85-json-r604/" rel="">JSON</a> وسماتها إلى ورقة منظمة من البيانات باستخدام Apps Script.
	</li>
</ol>
<h2>
	ماذا ستحتاج
</h2>

<ul>
<li>
		فهم موضوعات Apps Script الأساسية التي استكشفناها في المقالين السابقين من هذا الدليل.
	</li>
	<li>
		الإلمام الأساسي بمحرر الشيفرات البرمجية Apps Script.
	</li>
	<li>
		الإلمام الأساسي بجداول بيانات Google.
	</li>
	<li>
		الإلمام الأساسي <a href="https://wiki.hsoub.com/JavaScript" rel="external">بلغة البرمجة JavaScript</a> وصنف 'String' الخاص به.
	</li>
</ul>
<h2>
	الإعداد للعمل
</h2>

<p>
	قبل المتابعة أنت بحاجة إلى جدول بيانات يحتوي على بعض البيانات كما فعلنا في المقالات السابقة، لا تقلق فقد وفرنا لك جدول بيانات جاهز لاستخدامه في هذا التمرين، <a data-fileid="101980" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=101980" rel="">نزله</a> وارفعه على حسابك في درايف باستخدام إحدى الطريقتين اللتين وضحناهما في المقال الأول، ويجب أن تبدو الورقة على هذا النحو مع بعض المعلومات الأساسية حول أول ثلاثة أجزاء من فيلم حرب النجوم:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101973" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5ae6606f_001-1.png.ae492d4a3ea449988d8b74fac0a7dc60.png" rel=""><img alt="001 - تنسيق البيانات 1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101973" data-unique="mi6mbeg8j" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5af2b914_001-1.thumb.png.9df853589e5e789638bfef27034cb4d4.png" style="width: 700px; height: auto;"></a>
</p>

<p>
	افتح محرر النصوص البرمجية لـ Apps Script بالنقر على "الإضافات" ثم اختيار "محرر تطبيقات جوجل"، وبعدها انقر على عنوان مشروع برمجة التطبيقات وغيره من "مشروع بلا عنوان" إلى "Data Formatting"، ثم انقر على زر "إعادة تسمية" لحفظ تغيير العنوان.
</p>

<p>
	الآن بحصولك على جدول بيانات ومشروع Apps Script فأنت على استعداد لبدء المقال، انتقل إلى القسم التالي من هذا المقال للتعرف على التنسيق الأساسي في Apps Script.
</p>

<h2>
	إنشاء قائمة مخصصة
</h2>

<p>
	يمكنك تطبيق العديد من طرائق التنسيق الأساسية في Apps Script على جداول البيانات الخاصة بك، وتوضح التمارين التالية بعض هذه الطرائق لمساعدتك في التحكم في إجراءات التنسيق الخاصة بك، لذلك سوف نعمل على إنشاء قائمة مخصصة بالعناصر التي ستحتاج إليها، لقد شرحنا عملية إنشاء القوائم المخصصة في المقال السابق "العمل مع البيانات"، ولكننا سنلخصها هنا مرة أخرى.
</p>

<h3>
	التطبيق
</h3>

<p>
	دعنا نبدأ في إنشاء قائمة مخصصة باتباع الخطوات التالية:
</p>

<ul>
<li>
		أولًا، استبدل الشيفرة البرمجية في مشروع Apps Script الذي أسميناه "Data Formatting" بما يلي:
	</li>
</ul>
<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3961_12" style="">
<span class="com">/**
 دالة خاصة يتم تشغيلها عند فتح جدول البيانات أو إعادة تحميله *
 وتستخدم لإضافة قائمة مخصصة إلى جدول البيانات *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> onOpen</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">كائن</span><span class="pln"> </span><span class="pun">واجهة</span><span class="pln"> </span><span class="pun">المستخدم</span><span class="pln"> </span><span class="pun">الخاص</span><span class="pln"> </span><span class="pun">بجدول</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> ui </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getUi</span><span class="pun">();</span><span class="pln">

  </span><span class="pun">إنشاء</span><span class="pln"> </span><span class="pun">وإضافة</span><span class="pln"> </span><span class="pun">القائمة</span><span class="pln"> </span><span class="pun">المخصصة</span><span class="pln"> </span><span class="pun">وعناصرها</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">شريط</span><span class="pln"> </span><span class="pun">القوائم</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  ui</span><span class="pun">.</span><span class="pln">createMenu</span><span class="pun">(</span><span class="str">'تنسيقات سريعة'</span><span class="pun">)</span><span class="pln">
   </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="str">'تنسيق رأس الصف'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'formatRowHeader'</span><span class="pun">)</span><span class="pln">
   </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="str">'تنسيق رأس العمود'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'formatColumnHeader'</span><span class="pun">)</span><span class="pln">
   </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="str">'تنسيق البيانات'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'formatDataset'</span><span class="pun">)</span><span class="pln"> 
  </span><span class="pun">.</span><span class="pln">addToUi</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<ul>
<li>
		ثانيًا، احفظ مشروع نصك البرمجي.
	</li>
	<li>
		ثالثًا، في محرر Apps Script حدد اسم الدالة "onOpen" من قائمة الدوال، ثم انقر على الزر "Run"، سيعمل هذا الإجراء على تشغيل الدالة <code>()onOpen</code> لإنشاء القائمة المخصصة بجدول البيانات دون الحاجة إلى إعادة تحميل جدول البيانات.
	</li>
</ul>
<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	دعنا نراجع هذه الشيفرة البرمجية لفهم كيفية عمل الدالة <code>()onOpen</code>.
</p>

<p>
	يستخدم السطر الأول التابع<code>()getUi</code> للحصول على كائن "Ui" يمثل واجهة المستخدم لجدول البيانات النشط الذي يرتبط به هذا النص البرمجي أو السكربت.
</p>

<p>
	تعمل الأسطر الثلاثة التالية على إنشاء قائمة مخصصة باسم "تنسيقات سريعة" ثم إضافة ثلاثة عناصر داخل هذه القائمة باسم "تنسيق رأس الصف" و "تنسيق رأس العمود" و "تنسيق البيانات"، ثم إضافة هذه القائمة المخصصة إلى واجهة جدول البيانات، ونفذنا ذلك باستخدام ثلاث توابع متتالية على النحو التالي:
</p>

<ul>
<li>
		أولاً، التابع <code>()createMenu</code> والذي يأخذ معامل واحد فقط وهو "اسم القائمة المخصصة".
	</li>
	<li>
		ثانيًا، التابع <code>()addItem</code> والذي يأخذ معاملين، الأول "اسم العنصر داخل القائمة المخصصة"، والثاني "اسم الدالة بالإنجليزية".
	</li>
	<li>
		ثالثًا، التابع <code>()addToUi</code> وهو لا يأخذ أي معاملات.
	</li>
</ul>
<p>
	ينشيء التابع <code>()addItem</code> اتصالاً بين تسمية العنصر الموجود داخل القائمة المخصصة مثل (تنسيق رأس الصف) ودالة Apps Script المرتبطة بهذا العنصر <code>formatRowHeader</code> (التي لم نوفرها بعد) لتشغيلها.
</p>

<h3>
	النتائج
</h3>

<p>
	اذهب إلى جداول بيانات جوجل الذي نتدرب عليه "تنسيق البيانات" ثم انقر على القائمة المخصصة "تنسيقات سريعة" لعرض عناصر هذه القائمة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101974" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5b2a4897_002-2.png.7332f54a41fd132fd72eabb072d338ee.png" rel=""><img alt="002 - تنسيق البيانات 2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101974" data-unique="5jv8yrlla" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5b57a471_002-2.thumb.png.ba6ff553864d0e6f77f7b493bee87c16.png" style="width: 700px; height: auto;"></a>
</p>

<p>
	ويؤدي النقر على أي من هذه العناصر إلى حدوث خطأ وذلك نظرًا لأنك لم تنفذ الدالة المقابلة لكل عنصر منهم، لذلك دعنا نفعل ذلك في القسم التالي من هذا المقال.
</p>

<h2>
	تنسيق رؤوس الصفوف
</h2>

<p>
	غالبًا ما تحتوي مجموعات البيانات في جداول البيانات على رأس صف لتحديد البيانات في كل عمود، ومن الجيد تنسيق رأس الصف لفصله بصريًا عن باقي البيانات في جدول البيانات.
</p>

<p>
	في <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">المقال الأول</a> من هذا الدليل أنشأنا ماكرو لرأس الصف وضبطت الشيفرة البرمجية الخاصة بها، لكن هنا سنعمل على تنسيق رأس الصف من البداية باستخدام Apps Script، وسيؤدي تنسيق رأس الصف الذي ستنشئه إلى جعل نص الرأس غامقًا، ولون الخلفية باللون الأزرق الداكن والأخضر، ولون النص باللون الأبيض، وإضافة بعض الخطوط الحدودية للخلايا.
</p>

<h3>
	التطبيق
</h3>

<p>
	لتنفيذ عملية التنسيق ستستخدم نفس توابع خدمة جدول البيانات التي استخدمتها من قبل، بالإضافة أيضًا إلى بعض توابع التنسيق الخاصة بالخدمة، فقط افتح المشروع الذي أنشأناه في Apps Script باسم "Data Formatting"، ثم أضف الدالة التالية إلى نهاية النص البرمجي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3961_15" style="">
<span class="com">/**
 دالة تعمل على تنسيق الصف العلوي من الورقة باستخدام نمط رأس الصف الخاص بنا *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> formatRowHeader</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
 </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">النشطة</span><span class="pln"> </span><span class="pun">الحالية</span><span class="pln"> </span><span class="pun">ونطاق</span><span class="pln"> </span><span class="pun">الصف</span><span class="pln"> </span><span class="pun">العلوي</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> sheet </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSheet</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> headerRange </span><span class="pun">=</span><span class="pln"> sheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> sheet</span><span class="pun">.</span><span class="pln">getLastColumn</span><span class="pun">());</span><span class="pln">

  </span><span class="pun">تطبيق</span><span class="pln"> </span><span class="pun">هذه</span><span class="pln"> </span><span class="pun">التنسيقات</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">الصف</span><span class="pln"> </span><span class="pun">العلوي</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">نص</span><span class="pln"> </span><span class="pun">أبيض</span><span class="pln"> </span><span class="pun">غامق</span><span class="pln"> </span><span class="pun">وخلفية</span><span class="pln"> </span><span class="pun">زرقاء</span><span class="pln"> </span><span class="pun">وخضراء</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">وحدود</span><span class="pln"> </span><span class="pun">سوداء</span><span class="pln"> </span><span class="pun">صلبة</span><span class="pln"> </span><span class="pun">حول</span><span class="pln"> </span><span class="pun">الخلايا</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  headerRange
    </span><span class="pun">.</span><span class="pln">setFontWeight</span><span class="pun">(</span><span class="str">'bold'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">setFontColor</span><span class="pun">(</span><span class="str">'#ffffff'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">setBackground</span><span class="pun">(</span><span class="str">'#007272'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">setBorder</span><span class="pun">(</span><span class="pln">
      </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">,</span><span class="pln">
      </span><span class="kwd">null</span><span class="pun">,</span><span class="pln">
      </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="typ">BorderStyle</span><span class="pun">.</span><span class="pln">SOLID_MEDIUM</span><span class="pun">);</span><span class="pln">

</span><span class="pun">}</span></pre>

<p>
	احفظ مشروع نصك البرمجي.
</p>

<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	مثل العديد من مهام التنسيق تكون الشيفرة البرمجية المنفذة في Apps Script واضحة ومباشرة.
</p>

<p>
	يستخدم أول سطرين توابع رأيتها من قبل للحصول على مرجع للورقة النشطة الحالية من خلال المتغير <code>sheet</code>، والصف العلوي للورقة من خلال المتغير <code>headerRange</code>.
</p>

<p>
	يحدد التابع <code>()Sheet.getRange</code> الصف العلوي بما في ذلك الأعمدة التي تحتوي على بيانات فقط، وهذا التابع يأخذ أربع معاملات، هم: الأول "رقم الصف" والثاني "رقم العمود" والثالث "عدد الصفوف" والرابع "عدد الأعمدة".
</p>

<p>
	يعمل التابع <code>()Sheet.getLastColumn</code> على إرجاع الفهرس الخاص بالعمود الأخير الذي يحتوي على بيانات في الورقة، وفي مثالنا إنه العمود "E" المسمى "الرابط".
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: نفترض هنا أن رأس الصف الذي نريد تنسيقه موجود دائمًا في الصف "1" ، وأن بياناتنا تبدأ من "A1"، وأنها تمتد عبر عدد من الأعمدة المتجاورة، لا بأس بذلك في هذا التمرين، ولكن بصفة عامة قد ترغب في تجنب هذه الافتراضات من خلال السماح للمستخدمين بتحديد الخلايا المطلوب تنسيقها في حالة اختلاف بنية جدول البيانات الخاص بهم.
		</p>
	</div>
</blockquote>

<p>
	تستدعي باقي الشيفرة البرمجية ببساطة توابع <code>Range</code> لتطبيق خيارات التنسيق على جميع الخلايا في المتغير <code>headerRange</code>، وللحفاظ على سهولة قراءة الشيفرة البرمجية نستخدم تسلسل التابع لاستدعاء كل تابع تنسيق واحدة تلو الأخرى كما يلي:
</p>

<ol>
<li>
		بالنسبة للتابع <code>()Range.setFontWeight</code> الذي يأخذ معامل (وزن الخط)، يعمل على ضبط قيمة وزن الخط إلى غامق.
	</li>
	<li>
		أما التابع <code>()Range.setFontColor</code> الذي يأخذ معامل (لون الخط)، يعمل على تعيين لون الخط إلى الأبيض.
	</li>
	<li>
		والتابع <code>()Range.setBackground</code> الذي يأخذ معامل (لون الخلفية)، يعمل على ضبط لون الخلفية على الأزرق الداكن والأخضر.
	</li>
	<li>
		وأخيرًا التابع <code>()setBorder</code> يعمل على وضع حدًا أسودًا خالصًا حول خلايا النطاق، وهذا التابع له عدة معاملات (أعلى - يسار - أسفل - يمين - عمودي - أفقي - لون - نمط) لذلك دعنا نراجع ما يفعله كل معامل منهم:
	</li>
</ol>
<ul style="margin-right: 40px;">
<li>
		تخبر المعاملات الأربعة الأولى هنا (جميعها مضبوطة على "true") أنه يجب إضافة الحد أعلى وأسفل وإلى يسار ويمين النطاق.
	</li>
	<li>
		توجّه المعاملتان الخامسة والسادسة (مضبوطتان على "null") برمجة التطبيقات مباشرة لتجنب تغيير أي خطوط حد ضمن النطاق المحدد.
	</li>
	<li>
		يشير المعامل السابعة (مضبوطة على "null") إلى أن لون الحد يجب أن يكون افتراضيًا باللون الأسود.
	</li>
	<li>
		أخيرًا يحدد المعامل الأخير نوع نمط الحدود المراد استخدامه، مأخوذ من الخيارات التي يوفرها <code>SpreadsheetApp.BorderStyle</code>.
	</li>
</ul>
<h3>
	النتائج
</h3>

<p>
	يمكنك رؤية دالة التنسيق الخاصة بك وهي تعمل عن طريق تنفيذ ما يلي:
</p>

<ol>
<li>
		إذهب إلى جداول بيانات جوجل الذي نتدرب عليه "تنسيق البيانات" ثم انقر على القائمة "تنسيقات سريعة" في شريط القوائم، ثم اختر منها القائمة الفرعية "تنسيق رأس الصف".
	</li>
	<li>
		إذا ظهر لك مربع حوار "لم يتم التحقق من هذا التطبيق" فاتبع الخطوات التي تعلمتها في المقالات السابقة لإعطاء الإذن للماكرو لكي يعمل.
	</li>
	<li>
		يجب أن تبدو النتائج كما يلي:
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101975" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5bc75596_003-3.gif.3f10dfac75629baec887ba5d8168b3e5.gif" rel=""><img alt="003 - تنسيق البيانات 3.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="101975" data-unique="hkltw88g4" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5bc75596_003-3.gif.3f10dfac75629baec887ba5d8168b3e5.gif" style="width: 750px; height: auto;"></a>
</p>

<p>
	تهانينا، لقد أتممت الآن مهمة التنسيق لرؤوس الصفوف تلقائيًا، يطبق القسم التالي نفس الأسلوب لإنشاء نمط تنسيق مختلف لرؤوس الأعمدة.
</p>

<h2>
	تنسيق رؤوس الأعمدة
</h2>

<p>
	إذا كان بإمكانك إنشاء رأس صف مخصص فيمكنك إنشاء رأس عمود مخصص أيضًا، وتزيد عملية تنسيق رؤوس الأعمدة من قابلية القراءة للبيانات، فعلى سبيل المثال: يمكنك تحسين العمود المسمى "العنوان" في جدول البيانات الذي تتمرن عليه بخيارات التنسيق التالية:
</p>

<ul>
<li>
		تحويل النص إلى عريض.
	</li>
	<li>
		تحويل النص إلى مائل.
	</li>
	<li>
		إضافة حدود للخلية.
	</li>
	<li>
		إدراج ارتباطات تشعبية باستخدام محتويات العمود المسمى "الرابط"، وبمجرد إضافة هذه الارتباطات التشعبية يمكنك إزالة العمود المسمى "الرابط" للمساعدة في تنظيف الورقة.
	</li>
</ul>
<p>
	في القسم التالي من هذا المقال ستعمل على إنشاء الدالة <code>()formatColumnHeader</code> لتنفيذ هذه التنسيقات على العمود الأول في الورقة، وللمساعدة في جعل الشيفرة البرمجية أسهل قليلاً في القراءة سوف ننفذها في دالتين بدلاً من دالة واحدة.
</p>

<h3>
	التطبيق
</h3>

<p>
	لإضافة دالة تعمل على أتمتة تنسيق رأس العمود، فقط اتبع الخطوات التالية:
</p>

<p>
	أولًا، في مشروع Apps Script الذي باسم "Data Formatting" أضف الدالة التالية إلى نهاية النص البرمجي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3961_21" style="">
<span class="com">/**
 تنسيق رؤوس العواميد الخاصة بالورقة النشطة *
 */</span><span class="pln"> 
</span><span class="kwd">function</span><span class="pln"> formatColumnHeader</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">  
  </span><span class="kwd">var</span><span class="pln"> sheet </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSheet</span><span class="pun">();</span><span class="pln">

  </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">العدد</span><span class="pln"> </span><span class="pun">الإجمالي</span><span class="pln"> </span><span class="pun">للصفوف</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">نطاق</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">بدون</span><span class="pln"> </span><span class="pun">تضمين</span><span class="pln"> </span><span class="pun">رؤوس</span><span class="pln"> </span><span class="pun">الصفوف</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> numRows </span><span class="pun">=</span><span class="pln"> sheet</span><span class="pun">.</span><span class="pln">getDataRange</span><span class="pun">().</span><span class="pln">getLastRow</span><span class="pun">()</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">

  </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">نطاق</span><span class="pln"> </span><span class="pun">رؤوس</span><span class="pln"> </span><span class="pun">الأعمدة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> columnHeaderRange </span><span class="pun">=</span><span class="pln"> sheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> numRows</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">

  </span><span class="pun">تطبيق</span><span class="pln"> </span><span class="pun">تنسيق</span><span class="pln"> </span><span class="pun">النص</span><span class="pln"> </span><span class="pun">وإضافة</span><span class="pln"> </span><span class="pun">حدود</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  columnHeaderRange
    </span><span class="pun">.</span><span class="pln">setFontWeight</span><span class="pun">(</span><span class="str">'bold'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">setFontStyle</span><span class="pun">(</span><span class="str">'italic'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">setBorder</span><span class="pun">(</span><span class="pln">
      </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">,</span><span class="pln">
      </span><span class="kwd">null</span><span class="pun">,</span><span class="pln">
      </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="typ">BorderStyle</span><span class="pun">.</span><span class="pln">SOLID_MEDIUM</span><span class="pun">);</span><span class="pln">

  </span><span class="pun">استدعاء</span><span class="pln"> </span><span class="pun">صنف</span><span class="pln"> </span><span class="pun">مساعد</span><span class="pln"> </span><span class="pun">لتحويل</span><span class="pln"> </span><span class="pun">محتويات</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> </span><span class="pun">الأول</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">رابط</span><span class="pln"> </span><span class="pun">تشعبي</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">مضمن</span><span class="pln"> </span><span class="pun">بالروابط</span><span class="pln"> </span><span class="pun">الموجودة</span><span class="pln"> </span><span class="pun">داخل</span><span class="pln"> </span><span class="pun">عمود</span><span class="pln"> </span><span class="str">"العنوان"</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  hyperlinkColumnHeaders_</span><span class="pun">(</span><span class="pln">columnHeaderRange</span><span class="pun">,</span><span class="pln"> numRows</span><span class="pun">);</span><span class="pln"> 
</span><span class="pun">}</span></pre>

<p>
	ثانيا، أضف الدالتين التاليتين إلى نهاية النص البرمجي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3961_23" style="">
<span class="com">/**
 دالة مساعدة تربط محتويات العمود الأول بمحتويات العمود "الرابط" *
 ثم تقوم الدالة بعد ذلك بإزالة العمود "الرابط" *
 *
 * @param {object} headerRange هو نطاق عنوان العمود المراد تحديثه
 * @param {number} numRows هو عدد رؤوس الأعمدة
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> hyperlinkColumnHeaders_</span><span class="pun">(</span><span class="pln">headerRange</span><span class="pun">,</span><span class="pln"> numRows</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">رقم</span><span class="pln"> </span><span class="pun">فهرس</span><span class="pln"> </span><span class="pun">عمود</span><span class="pln"> </span><span class="str">"العنوان"</span><span class="pln"> </span><span class="pun">وعمود</span><span class="pln"> </span><span class="str">"الرابط"</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> headerColIndex </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"> 
  </span><span class="kwd">var</span><span class="pln"> urlColIndex </span><span class="pun">=</span><span class="pln"> columnIndexOf_</span><span class="pun">(</span><span class="str">'الرابط'</span><span class="pun">);</span><span class="pln">  

  </span><span class="pun">الخروج</span><span class="pln"> </span><span class="pun">إذا</span><span class="pln"> </span><span class="pun">كان</span><span class="pln"> </span><span class="pun">عمود</span><span class="pln"> </span><span class="str">"الرابط"</span><span class="pln"> </span><span class="pun">مفقودًا</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">urlColIndex </span><span class="pun">==</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pun">;</span><span class="pln"> 

  </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">قيم</span><span class="pln"> </span><span class="pun">خلية</span><span class="pln"> </span><span class="str">"العنوان"</span><span class="pln"> </span><span class="pun">و</span><span class="pln"> </span><span class="str">"الرابط"</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> urlRange </span><span class="pun">=</span><span class="pln">
    headerRange</span><span class="pun">.</span><span class="pln">offset</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> urlColIndex </span><span class="pun">-</span><span class="pln"> headerColIndex</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> headerValues </span><span class="pun">=</span><span class="pln"> headerRange</span><span class="pun">.</span><span class="pln">getValues</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> urlValues </span><span class="pun">=</span><span class="pln"> urlRange</span><span class="pun">.</span><span class="pln">getValues</span><span class="pun">();</span><span class="pln">

  </span><span class="pun">تحديث</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">بعمود</span><span class="pln"> </span><span class="str">"العنوان"</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">قيم</span><span class="pln"> </span><span class="pun">ذات</span><span class="pln"> </span><span class="pun">روابط</span><span class="pln"> </span><span class="pun">تشعبية</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">for</span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> row </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> row </span><span class="pun">&lt;</span><span class="pln"> numRows</span><span class="pun">;</span><span class="pln"> row</span><span class="pun">++){</span><span class="pln">
    headerValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">'=HYPERLINK("'</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> urlValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">]</span><span class="pln">
      </span><span class="pun">+</span><span class="pln"> </span><span class="str">'","'</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> headerValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">]</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="str">'")'</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  headerRange</span><span class="pun">.</span><span class="pln">setValues</span><span class="pun">(</span><span class="pln">headerValues</span><span class="pun">);</span><span class="pln">

  </span><span class="pun">حذف</span><span class="pln"> </span><span class="pun">عمود</span><span class="pln"> </span><span class="str">"الرابط"</span><span class="pln"> </span><span class="pun">لتنظيف</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSheet</span><span class="pun">().</span><span class="pln">deleteColumn</span><span class="pun">(</span><span class="pln">urlColIndex</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/**
 * دالة مساعدة تمر عبر رؤوس جميع الأعمدة *
 وتعيد فهرس العمود بالاسم المحدد في الصف 1 *
 وفي حالة عدم وجود عمود بهذا الاسم *
 ترجع هذه الدالة القيمة -1 *
 إذا كان هناك أعمدة متعددة لها نفس الاسم في الصف 1 *
 فسيتم إرجاع فهرس أول عمود تم اكتشافه *
 * 
* @param {string} colName هو الاسم المراد العثور عليه
في رؤوس الأعمدة * 
* @return إرجاع فهرس هذا العمود في الورقة النشطة
 أو القيمة -1 إذا لم يتم العثور على الاسم *
 */</span><span class="pln"> 
</span><span class="kwd">function</span><span class="pln"> columnIndexOf_</span><span class="pun">(</span><span class="pln">colName</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
 </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">أسماء</span><span class="pln"> </span><span class="pun">الأعمدة</span><span class="pln"> </span><span class="pun">الحالية</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> sheet </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSheet</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> columnHeaders </span><span class="pun">=</span><span class="pln">
    sheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> sheet</span><span class="pun">.</span><span class="pln">getLastColumn</span><span class="pun">());</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> columnNames </span><span class="pun">=</span><span class="pln"> columnHeaders</span><span class="pun">.</span><span class="pln">getValues</span><span class="pun">();</span><span class="pln">

 </span><span class="pun">حلقة</span><span class="pln"> </span><span class="pun">تكرار</span><span class="pln"> </span><span class="pun">خلال</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">عمود</span><span class="pln"> </span><span class="pun">لإرجاع</span><span class="pln"> </span><span class="pun">رقم</span><span class="pln"> </span><span class="pun">فهرس</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> </span><span class="com">//</span><span class="pln">
</span><span class="com">// colName إذا كانت قيمة الصف 1 لهذا العمود تطابق</span><span class="pln">
  </span><span class="kwd">for</span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> col </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"> col </span><span class="pun">&lt;=</span><span class="pln"> columnNames</span><span class="pun">[</span><span class="lit">0</span><span class="pun">].</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> col</span><span class="pun">++)</span><span class="pln">
  </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">columnNames</span><span class="pun">[</span><span class="lit">0</span><span class="pun">][</span><span class="pln">col</span><span class="pun">-</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">===</span><span class="pln"> colName</span><span class="pun">)</span><span class="pln">
      </span><span class="kwd">return</span><span class="pln"> col</span><span class="pun">;</span><span class="pln"> 
  </span><span class="pun">}</span><span class="pln">

  </span><span class="pun">إرجاع</span><span class="pln"> </span><span class="pun">القيمة</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pln"> </span><span class="pun">إذا</span><span class="pln"> </span><span class="pun">كان</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> </span><span class="pun">المسمى</span><span class="pln"> colName </span><span class="pun">غير</span><span class="pln"> </span><span class="pun">موجود</span><span class="pln"> </span><span class="com">// </span><span class="pln">
  </span><span class="kwd">return</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">;</span><span class="pln"> 
</span><span class="pun">}</span></pre>

<p>
	أخيرًا، احفظ مشروع نصك البرمجي.
</p>

<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	دعنا نراجع الشيفرة البرمجية للدوال الثلاث:
</p>

<h4>
	1. الدالة ()formatColumnHeader
</h4>

<p>
	نعم توقعك صحيح، فالأسطر القليلة الأولى من هذه الدالة تحدد المتغيرات التي تشير إلى الورقة والنطاق الذي نهتم به.
</p>

<ul>
<li>
		يعمل المتغير <code>Sheet</code> على تخزين الورقة النشطة.
	</li>
	<li>
		يعمل المتغير <code>numRows</code> على حساب عدد الصفوف الموجودة في رأس العمود وحفظها، وتطرح الشيفرة البرمجية "1" حتى لا يشتمل عدد الصفوف على رأس العمود المسمى "العنوان".
	</li>
	<li>
		يعمل المتغير <code>columnHeaderRange</code> على تخزين النطاق الذي يغطي رأس العمود.
	</li>
	<li>
		تشرع الشيفرة البرمجية في تنفيذ تنسيقات الحدود والكتابة على نطاق رأس العمود، تمامًا كما هو الحال في الدالة <code>()formatRowHeader</code>، الجديد في هذه الدالة أننا استخدمنا التابع <code>()Range.setFontStyle</code> لجعل النص مائلًا.
	</li>
	<li>
		تعد إضافة الارتباطات التشعبية إلى عمود الرأس عملية معقدة، لذا فإن الدالة <code>()formatColumnHeader</code> تستدعي التابع <code>()_hyperlinkColumnHeaders</code> لتولي هذه المهمة، وهو تابع يأخذ معاملين الأول "نطاق رأس العمود" والثاني "عدد الصفوف"، ويساعد هذا الإجراء في الحفاظ على الشيفرة البرمجية منظمة وقابلة للقراءة.
	</li>
</ul>
<h4>
	2. الدالة ()_hyperlinkColumnHeaders
</h4>

<p>
	تأخذ هذه الدالة معاملين الأول "نطاق الرأس" والثاني "عدد الصفوف"، وتحدد هذه الدالة أولاً فهارس العمود الخاصة بالرأس (من المفترض أن يكون الفهرس رقم 1) والعمود المسمى "الرابط"، فتعمل على استدعاء التابع <code>()_columnIndexOf</code> للحصول على فهرس العمود المسمى "الرابط"، وفي حالة عدم عثوره عليه ينهي التابع عمله دون تعديل أي بيانات.
</p>

<p>
	تحصل الدالة على نطاق جديد من خلال المتغير <code>urlRange</code> يغطي عناوين الروابط المقابلة لصفوف رأس العمود، وينفذ هذا الإجراء باستخدام التابع <code>()Range.offset</code> الذي يأخذ معاملين الأول "إزاحة الصف" والثاني "إزاحة العمود"، وذلك لضمان أن النطاقين سيكونان بالحجم نفسه، ثم يسترد المتغير <code>headerValues</code> والمتغير <code>urlValues</code> القيم الموجودة في رأس العمود، والخلايا بالعمود المسمى "الرابط".
</p>

<p>
	تنفذ الدالة بعد ذلك حلقة التكرار <code>For</code> لقيمة كل خلية في رأس العمود ثم تستبدلها بصيغة جداول بيانات <code>()HYPERLINK=</code> باستخدام محتويات رأس العمود والخلايا بالعمود المسمى "الرابط"، ثم يلي ذلك إدراج قيم الرأس المعدلة في الورقة باستخدام التابع <code>()Range.setValues</code>.
</p>

<p>
	أخيرًا، وللمساعدة في الحفاظ على الورقة نظيفة من خلال التخلص من المعلومات الزائدة عن الحاجة، يُستدعى التابع <code>()Sheet.deleteColumn</code> الذي يأخذ معامل واحد وهو "موضع العمود"، لإزالة العمود المسمى "الرابط" بالكامل.
</p>

<h4>
	3. الدالة ()_columnIndexOf
</h4>

<p>
	تأخذ هذه الدالة معامل واحد فقط وهو "اسم العمود"، وتبحث هذه الدالة في الصف الأول من الورقة عن اسم محدد، وتستخدم الأسطر الثلاثة الأولى توابع رأيتها بالفعل للحصول على قائمة بأسماء رؤوس الأعمدة من الصف رقم "1" بجدول البيانات، ثم تُخزن هذه الأسماء في المتغير <code>columnNames</code>.
</p>

<p>
	تعمل الدالة بعد ذلك على مراجعة كل اسم بالترتيب، فإذا عثرت على اسم يطابق الاسم الذي تبحث عنه، فإنها تتوقف وتعيد رقم فهرس العمود، أما إذا وصلت إلى نهاية قائمة الأسماء دون العثور على الاسم الذي تبحث عنه، فإنها ترجع الرقم "-1" للإشارة إلى عدم العثور على الاسم.
</p>

<h3>
	النتائج
</h3>

<p>
	يمكنك رؤية دالة التنسيق الخاصة بك وهي تعمل عن طريق تنفيذ ما يلي:
</p>

<ol>
<li>
		إذهب إلى جداول بيانات جوجل الذي نتدرب عليه "تنسيق البيانات" ثم انقر على القائمة "تنسيقات سريعة" في شريط القوائم، ثم اختر منها القائمة الفرعية "تنسيق رأس الصف".
	</li>
	<li>
		يجب أن تبدو النتائج كما يلي:
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101976" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5c5cb2ca_004-4.gif.f89dd586441a79e803343615549ae852.gif" rel=""><img alt="004 - تنسيق البيانات 4.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="101976" data-unique="42zubmb1i" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5c5cb2ca_004-4.gif.f89dd586441a79e803343615549ae852.gif"></a>
</p>

<p>
	تهانينا، لقد أتممت الآن مهمة التنسيق لرؤوس الأعمدة تلقائيًا، يطبق القسم التالي كيفية تنسيق البيانات.
</p>

<h2>
	تنسيق البيانات
</h2>

<p>
	الآن بعد أن أصبح لديك رؤوس الصفوف والأعمدة منسقة، دعنا ننشئ دالة تعمل على تنسيق بقية البيانات في الورقة الخاصة بك، وسنستخدم خيارات التنسيق التالية:
</p>

<ul>
<li>
		تناوب ألوان خلفية الصف (صف بلون أبيض وآخر بلون رمادي).
	</li>
	<li>
		تغيير صيغة التاريخ.
	</li>
	<li>
		تطبيق حدود الخلية.
	</li>
	<li>
		ضبط جميع مقاسات الأعمدة والصفوف تلقائيًا لسهولة قراءة البيانات بداخلهم.
	</li>
</ul>
<p>
	ولتنفيذ ذلك سنعمل على إنشاء الدالة <code>()formatDataset</code>، بالإضافة إلى دالة مساعدة لتطبيق هذه التنسيقات على بيانات الورقة الخاصة بك.
</p>

<h3>
	التطبيق
</h3>

<p>
	لإضافة دالة تعمل على أتمتة تنسيق البيانات، فقط اتبع الخطوات التالية:
</p>

<p>
	أولًا، في مشروع Apps Script الذي باسم "Data Formatting" أضف الدالة التالية إلى نهاية النص البرمجي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3961_25" style="">
<span class="com">/**
 * تنسيق بيانات الورقة باستثناء رؤوس الصفوف والأعمدة *
 تطبيق الحدود وينسق عمود "تاريخ العرض" *
وضبط الأعمدة والصفوف تلقائيًا *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> formatDataset</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">النشطة</span><span class="pln"> </span><span class="pun">ونطاق</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> sheet </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSheet</span><span class="pun">();</span><span class="pln"> 
  </span><span class="kwd">var</span><span class="pln"> fullDataRange </span><span class="pun">=</span><span class="pln"> sheet</span><span class="pun">.</span><span class="pln">getDataRange</span><span class="pun">();</span><span class="pln">

  </span><span class="pun">تطبيق</span><span class="pln"> </span><span class="pun">خطوط</span><span class="pln"> </span><span class="pun">مرئية</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">الألوان</span><span class="pln"> </span><span class="pun">المتناقضة</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">باستثناء</span><span class="pln"> </span><span class="pun">رؤوس</span><span class="pln"> </span><span class="pun">الصفوف</span><span class="pln"> </span><span class="pun">والأعمدة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">تطبيق</span><span class="pln"> </span><span class="pun">خطوط</span><span class="pln"> </span><span class="pun">مرئية</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">الألوان</span><span class="pln"> </span><span class="pun">المتناقضة</span><span class="pln"> </span><span class="pun">فقط</span><span class="pln"> </span><span class="pun">إذا</span><span class="pln"> </span><span class="pun">لم</span><span class="pln"> </span><span class="pun">يكن</span><span class="pln"> </span><span class="pun">النطاق</span><span class="pln"> </span><span class="pun">يحتوي</span><span class="pln"> </span><span class="pun">عليها</span><span class="pln"> </span><span class="pun">بالفعل</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> noHeadersRange </span><span class="pun">=</span><span class="pln"> fullDataRange</span><span class="pun">.</span><span class="pln">offset</span><span class="pun">(</span><span class="pln">
    </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
    fullDataRange</span><span class="pun">.</span><span class="pln">getNumRows</span><span class="pun">()</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln">
    fullDataRange</span><span class="pun">.</span><span class="pln">getNumColumns</span><span class="pun">()</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">

  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln"> noHeadersRange</span><span class="pun">.</span><span class="pln">getBandings</span><span class="pun">()[</span><span class="lit">0</span><span class="pun">])</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="pun">النطاق</span><span class="pln"> </span><span class="pun">لا</span><span class="pln"> </span><span class="pun">يحتوي</span><span class="pln"> </span><span class="pun">بالفعل</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">خطوط</span><span class="pln"> </span><span class="pun">مرئية</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">الألوان</span><span class="pln"> </span><span class="pun">المتناقضة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
    </span><span class="pun">لذلك</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">الآمن</span><span class="pln"> </span><span class="pun">تطبيقه</span><span class="pln"> </span><span class="com">//</span><span class="pln">
    noHeadersRange</span><span class="pun">.</span><span class="pln">applyRowBanding</span><span class="pun">(</span><span class="pln">
      </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="typ">BandingTheme</span><span class="pun">.</span><span class="pln">LIGHT_GREY</span><span class="pun">,</span><span class="pln">
      </span><span class="kwd">false</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="pun">استدعاء</span><span class="pln"> </span><span class="pun">الدالة</span><span class="pln"> </span><span class="pun">المساعدة</span><span class="pln"> </span><span class="pun">لتطبيق</span><span class="pln"> </span><span class="pun">تنسيق</span><span class="pln"> </span><span class="pun">التاريخ</span><span class="pln"> </span><span class="com">//</span><span class="pln">
 </span><span class="pun">على</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> </span><span class="pun">المسمى</span><span class="pln"> </span><span class="str">"تاريخ العرض"</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  formatDates_</span><span class="pun">(</span><span class="pln"> columnIndexOf_</span><span class="pun">(</span><span class="str">'تاريخ العرض'</span><span class="pun">)</span><span class="pln"> </span><span class="pun">);</span><span class="pln">

  </span><span class="pun">عيّن</span><span class="pln"> </span><span class="pun">حدًا</span><span class="pln"> </span><span class="pun">حول</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">تغيير</span><span class="pln"> </span><span class="pun">حجم</span><span class="pln"> </span><span class="pun">الأعمدة</span><span class="pln"> </span><span class="pun">والصفوف</span><span class="pln"> </span><span class="pun">لتناسب</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  fullDataRange</span><span class="pun">.</span><span class="pln">setBorder</span><span class="pun">(</span><span class="pln">
    </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">,</span><span class="pln">
    </span><span class="kwd">null</span><span class="pun">,</span><span class="pln">
    </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="typ">BorderStyle</span><span class="pun">.</span><span class="pln">SOLID_MEDIUM</span><span class="pun">);</span><span class="pln">

  sheet</span><span class="pun">.</span><span class="pln">autoResizeColumns</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> fullDataRange</span><span class="pun">.</span><span class="pln">getNumColumns</span><span class="pun">());</span><span class="pln">
  sheet</span><span class="pun">.</span><span class="pln">autoResizeRows</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> fullDataRange</span><span class="pun">.</span><span class="pln">getNumRows</span><span class="pun">());</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	ثانيًا، أضف الدالة المساعدة التالية في نهاية مشروع البرنامج النصي بعد الدالة <code>()formatDataset</code>.
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3961_27" style="">
<span class="com">/** 
 الصنف المساعد الذي يطبق تنسيق التاريخ *
 شهر، يوم، سنة (اسم اليوم من الأسبوع) *
 على العمود المشار إليه في الورقة النشطة * 
 *
* @param {number} colIndex فهرس العمود
المطلوب تنسيقه *
 */</span><span class="pln"> 
</span><span class="kwd">function</span><span class="pln"> formatDates_</span><span class="pun">(</span><span class="pln">colIndex</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">اخرج</span><span class="pln"> </span><span class="pun">إذا</span><span class="pln"> </span><span class="pun">كان</span><span class="pln"> </span><span class="pun">فهرس</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> </span><span class="pun">المحدد</span><span class="pln"> </span><span class="pun">هو</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">مما</span><span class="pln"> </span><span class="pun">يشير</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">أن</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> </span><span class="pun">المطلوب</span><span class="pln"> </span><span class="pun">تنسيقه</span><span class="pln"> </span><span class="pun">غير</span><span class="pln"> </span><span class="pun">موجود</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">colIndex </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln">
    </span><span class="kwd">return</span><span class="pun">;</span><span class="pln"> 

  </span><span class="pun">قم</span><span class="pln"> </span><span class="pun">بتعيين</span><span class="pln"> </span><span class="pun">تنسيق</span><span class="pln"> </span><span class="pun">التاريخ</span><span class="pln"> </span><span class="pun">لعمود</span><span class="pln"> </span><span class="str">"تاريخ العرض"</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">باستثناء</span><span class="pln"> </span><span class="pun">رؤوس</span><span class="pln"> </span><span class="pun">الصفوف</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> sheet </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSheet</span><span class="pun">();</span><span class="pln">
  sheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="pln"> colIndex</span><span class="pun">,</span><span class="pln"> sheet</span><span class="pun">.</span><span class="pln">getLastRow</span><span class="pun">()</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">setNumberFormat</span><span class="pun">(</span><span class="str">"mmmm dd, yyyy (dddd)"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	احفظ مشروع نصك البرمجي.
</p>

<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	دعنا نراجع الشيفرة البرمجية لهاتين الدالتين:
</p>

<h4>
	1. دالة ()formatDataset
</h4>

<p>
	تتبع هذه الدالة نمطًا مشابهًا لدوال التنسيق السابقة التي نفذتها، فهي تحتوي على المتغير <code>Sheet</code> لتخزين الورقة النشطة، والمتغير <code>fullDataRange</code> لتخزين نطاق البيانات.
</p>

<p>
	أما المتغير <code>noHeadersRange</code> يستخدم التابع <code>()Range.offset</code> الذي يأخذ أربع معاملات، هي: الأول "إزاحة الصف" والثاني "إزاحة العمود" والثالث "عدد الصفوف" والرابع "عدد الأعمدة"، ويعمل هذا التابع على إنشاء نطاق يغطي جميع البيانات الموجودة في الورقة، باستثناء رؤوس الأعمدة والصفوف.
</p>

<p>
	تتحقق الشيفرة البرمجية بعد ذلك مما إذا كان هذا النطاق الجديد يحتوي على خطوط مرئية من الألوان المتناقضة (الأبيض والرمادي بالتناوب) في خلفية الخلية باستخدام التابع <code>()Range.getBandings</code>، ويعد هذا أمرًا ضروريًا لأن Apps Script تظهر خطأ إذا حاولت تطبيق هذا الأمر في نطاق يوجد به خطوط مرئية من الألوان المتناقضة بالفعل.
</p>

<p>
	في حالة عدم وجود خطوط مرئية من الألوان المتناقضة في النطاق الجديد، تضيف الدالة خطًا مرئيًا رماديًا فاتحًا باستخدام التابع <code>()Range.applyRowBanding</code> الذي يأخذ ثلاث معاملات، هي: الأول "سمة لون الخط" والثاني "إظهار الرأس" والثالث "إظهار التذييل"، وبخلاف ذلك تُكمل الدالة عملها.
</p>

<p>
	في الخطوة التالية نستدعي <code>()_formatDates</code> الذي يأخذ معامل واحد فقط وهو "رقم فهرس العمود"، وتعمل على تنسيق التواريخ في العمود المسمى "تاريخ العرض" وحُدد هذا العمود باستخدام <code>()columnIndexOf</code> الذي يأخذ معامل واحد فقط وهو "اسم العمود"، وهو تابع استخدمته من قبل.
</p>

<p>
	أخيرًا، نتمم هذا التنسيق عن طريق إضافة حدود الخلايا كما فعلنا من قبل، وتغيير حجم كل عمود وصف تلقائيًا لملاءمة البيانات التي تحتوي عليها باستخدام التابع <code>()Sheet.autoResizeColumns</code> الذي يأخذ معامل واحد فقط وهو "موضع العمود"، والتابع <code>()Sheet.autoResizeRows</code> الذي يأخذ معامل واحد فقط وهو "موضع الصف".
</p>

<h4>
	2: دالة ()_formatDates
</h4>

<p>
	تأخذ هذه الدالة معامل واحد وهو "رقم فهرس العمود"، وتعمل هذه الدالة على تطبيق تنسيق تاريخ محدد على العمود المسمى "تاريخ العرض"، وذلك باستخدام رقم فهرس العمود المقدم من الدالة، وعلى وجه التحديد تُنسق قيم التاريخ هكذا: "شهر، يوم ، سنة (اسم اليوم من الأسبوع)".
</p>

<p>
	تتحقق الدالة أولاً من صلاحية رقم فهرس العمود المقدم (هل هو 0 أو أكبر) فإذا لم يكن كذلك فإنها تعود دون فعل أي شيء، ويمنع هذا الإجراء الأخطاء التي قد تحدث، مثل إذا لم تكن الورقة تحتوي على عمود باسم "تاريخ العرض".
</p>

<p>
	بمجرد التحقق من صحة فهرس العمود، تحصل الدالة على النطاق الذي يغطي هذا العمود (باستثناء رأس الصف) ثم تستخدم <code>()Range.setNumberFormat</code> لتطبيق التنسيق.
</p>

<h3>
	النتائج
</h3>

<p>
	يمكنك رؤية دالة التنسيق الخاصة بك وهي تعمل عن طريق تنفيذ ما يلي:
</p>

<ol>
<li>
		إذهب إلى جداول بيانات جوجل الذي نتدرب عليه "تنسيق البيانات" ثم انقر على القائمة "تنسيقات سريعة" في شريط القوائم، ثم اختر منها القائمة الفرعية "تنسيق البيانات".
	</li>
	<li>
		يجب أن تبدو النتائج كما يلي:
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101977" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5ce6e522_005-5.gif.8da60438600254d6adba6e7457168a2a.gif" rel=""><img alt="005 - تنسيق البيانات 5.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="101977" data-unique="mpa0e05bz" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5ce6e522_005-5.gif.8da60438600254d6adba6e7457168a2a.gif"></a>
</p>

<p>
	تهانينا، لقد أتممت مهمة تنسيق أخرى تلقائيًا، الآن بعد أن توفرت لديك أدوات التنسيق هذه دعنا نضيف المزيد من البيانات لتطبيقها عليها.
</p>

<h2>
	إحضار وتنسيق بيانات من <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>
</h2>

<p>
	لقد تعلمت في هذا المقال كيف يمكنك استخدام Apps Script كوسيلة بديلة لتنسيق جدول البيانات الخاص بك، والآن ستتعلم كيفية كتابة شيفرة برمجية تعمل على سحب البيانات من واجهة برمجة تطبيقات عامة <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>، ثم تُدرجها في جدول البيانات الخاص بك، ثم تنسيقها لتتمكن من قراءتها.
</p>

<p>
	في المقال السابق تعلمت كيفية سحب البيانات من واجهة برمجة التطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>، وستستخدم نفس الأساليب في هذا التمرين، سوف نعمل مع واجهة برمجة تطبيقات عامة اسمها Star Wars <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> والمعروفة اختصارًا بـ SWAPI لملء جدول البيانات الخاص بك، وعلى وجه التحديد ستستخدم واجهة برمجة التطبيقات هذه للحصول على معلومات حول الشخصيات الرئيسية التي ظهرت في أفلام Star Wars الثلاثة الأصلية.
</p>

<p>
	ستعمل الشيفرة البرمجية على استدعاء الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> للحصول على كمية كبيرة من بيانات JSON، ثم تحليل الاستجابة، ثم وضع البيانات في ورقة جدول بيانات جديدة، ثم تنسيق الورقة.
</p>

<h3>
	التطبيق
</h3>

<p>
	في هذا القسم ستضيف بعض العناصر للقائمة المخصصة "تنسيقات سريعة"، يستدعي كل عنصر منهم سكريبت مجمّع يمرر متغيرات خاصة بهذا العنصر إلى الدالة الرئيسية <code>()_createResourceSheet</code>.
</p>

<p>
	لذلك أنت تحتاج إلى إنشاء هذه الدالة بالإضافة إلى ثلاث دوال مساعدة لها، فالدوال المساعدة تعمل على عزل الأجزاء المقسمة منطقيًا للمهمة، كما تساعد في الحفاظ على الشيفرة البرمجية قابلة للقراءة.
</p>

<p>
	ولتنفيذ ذلك اتخذ الإجراءات التالية:
</p>

<ul>
<li>
		أولًا، في محرر Apps Script حدث الدالة <code>()onOpen</code> في مشروع النص البرمجي المسمى "Data Formatting" لمطابقة ما يلي:
	</li>
</ul>
<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3961_29" style="">
<span class="com">/**
 وظيفة خاصة يتم تشغيلها عند فتح جدول البيانات أو إعادة تحميله *
 تستخدم لإضافة قائمة مخصصة إلى جدول البيانات *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> onOpen</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">كائن</span><span class="pln"> </span><span class="pun">واجهة</span><span class="pln"> </span><span class="pun">المستخدم</span><span class="pln"> </span><span class="pun">لجدول</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> ui </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getUi</span><span class="pun">();</span><span class="pln">

 </span><span class="pun">إنشاء</span><span class="pln"> </span><span class="pun">وإضافة</span><span class="pln"> </span><span class="pun">قائمة</span><span class="pln"> </span><span class="pun">خاصة</span><span class="pln"> </span><span class="pun">وعناصرها</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">شريط</span><span class="pln"> </span><span class="pun">القوائم</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  ui</span><span class="pun">.</span><span class="pln">createMenu</span><span class="pun">(</span><span class="str">'تنسيقات سريعة'</span><span class="pun">)</span><span class="pln">
   </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="str">'تنسيق رأس الصف'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'formatRowHeader'</span><span class="pun">)</span><span class="pln">
   </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="str">'تنسيق رأس العمود'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'formatColumnHeader'</span><span class="pun">)</span><span class="pln">
   </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="str">'تنسيق البيانات'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'formatDataset'</span><span class="pun">)</span><span class="pln"> 
  </span><span class="pun">.</span><span class="pln">addSeparator</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addSubMenu</span><span class="pun">(</span><span class="pln">ui</span><span class="pun">.</span><span class="pln">createMenu</span><span class="pun">(</span><span class="str">'أبطال ثلاثية حرب النجوم'</span><span class="pun">)</span><span class="pln">
                </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="str">'الجزء الرابع'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'createPeopleSheetIV'</span><span class="pun">)</span><span class="pln">
                </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="str">'الجزء الخامس'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'createPeopleSheetV'</span><span class="pun">)</span><span class="pln">
                </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="str">'الجزء السادس'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'createPeopleSheetVI'</span><span class="pun">)</span><span class="pln">
                </span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addToUi</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	احفظ مشروع نصك البرمجي.
</p>

<ul>
<li>
		ثانيًا، في محرر Apps Script حدد اسم الدالة "onOpen" من قائمة الدوال، ثم انقر على الزر "Run" لتشغيل الدالة حتى تنفذ الشيفرة البرمجية لإضافة العناصر الجديدة داخل القائمة المخصصة "تنسيقات سريعة".
	</li>
	<li>
		ثالثًا، أنشئ ملف Apps Script جديد، وذلك بالنقر على أيقونة (+) الموجودة أعلى يمين النافذة وبجوار كلمة "الملفات"، ثم اختر "نص برمجي".
	</li>
	<li>
		رابعًا، أعط اسمًا لمف النص البرمجي الجديد "<abbr title="Application Programming Interface | واجهة برمجية">API</abbr>" ثم اضغط على زر "Enter" من لوحة المفاتيح حتى يُلحق Apps Script تلقائيًا امتداد "gs." إلى اسم ملف النص البرمجي.
	</li>
	<li>
		خامسًا، استبدل الشيفرة البرمجية في ملف "<abbr title="Application Programming Interface | واجهة برمجية">API</abbr>.gs" الجديد بما يلي:
	</li>
</ul>
<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3961_31" style="">
<span class="com">/**
 الدالة الغالفة التي تمرر المعاملات *
 لإنشاء ورقة موارد تصف الشخصيات من الجزء الرابع *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> createPeopleSheetIV</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  createResourceSheet_</span><span class="pun">(</span><span class="str">'characters'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="str">"الجزء الرابع"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/**
 الدالة الغالفة التي تمرر المعاملات *
 لإنشاء ورقة موارد تصف الشخصيات من الجزء الخامس *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> createPeopleSheetV</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  createResourceSheet_</span><span class="pun">(</span><span class="str">'characters'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="str">"الجزء الخامس"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/**
 الدالة الغالفة التي تمرر المعاملات *
 لإنشاء ورقة موارد تصف الشخصيات من الجزء السادس *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> createPeopleSheetVI</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  createResourceSheet_</span><span class="pun">(</span><span class="str">'characters'</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">,</span><span class="pln"> </span><span class="str">"الجزء السادس"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/** 
 إنشاء ورقة منسقة مليئة بالمعلومات التي يحددها المستخدم *
 من خلال Star Wars <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> *
 فإذا كانت الورقة التي تحتوي على هذه البيانات موجودة *
 فسيتم استبدال الورقة بمعلومات الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> *
 *
* @param {string} resourceType نوع المصدر
* @param {number} idNumber رقم التعريف الخاص بالفيلم
* @param {number} episodeNumber رقم الجزء الخاص بالفيلم
يستخدم هذا فقط في اسم الورقة *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> createResourceSheet_</span><span class="pun">(</span><span class="pln">
    resourceType</span><span class="pun">,</span><span class="pln"> idNumber</span><span class="pun">,</span><span class="pln"> episodeNumber</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 

  </span><span class="pun">إحضار</span><span class="pln"> </span><span class="pun">بيانات</span><span class="pln"> </span><span class="pun">الفيلم</span><span class="pln"> </span><span class="pun">الأساسية</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">الـ</span><span class="pln"> <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> </span><span class="com">// </span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> filmData </span><span class="pun">=</span><span class="pln"> fetchApiResourceObject_</span><span class="pun">(</span><span class="pln">
      </span><span class="str">"https://swapi.dev/api/films/"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> idNumber</span><span class="pun">);</span><span class="pln">

  </span><span class="pun">استخراج</span><span class="pln"> </span><span class="pun">عناوين</span><span class="pln"> URL </span><span class="pun">لواجهة</span><span class="pln"> </span><span class="pun">برمجة</span><span class="pln"> </span><span class="pun">التطبيقات</span><span class="pln"> </span><span class="pun">لكل</span><span class="pln"> </span><span class="pun">مورد</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">حتى</span><span class="pln"> </span><span class="pun">تتمكن</span><span class="pln"> </span><span class="pun">الشيفرة</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">استدعاء</span><span class="pln"> </span><span class="pun">واجهة</span><span class="pln"> </span><span class="pun">برمجة</span><span class="pln"> </span><span class="pun">التطبيقات</span><span class="pln"> </span><span class="pun">للحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">مزيد</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">حول</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">منها</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">حدة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> resourceUrls </span><span class="pun">=</span><span class="pln"> filmData</span><span class="pun">[</span><span class="pln">resourceType</span><span class="pun">];</span><span class="pln">

  </span><span class="pun">إحضار</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">مورد</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">الـ</span><span class="pln"> <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">حدة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">ثم</span><span class="pln"> </span><span class="pun">دفعهم</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">قائمة</span><span class="pln"> </span><span class="pun">كائنات</span><span class="pln"> </span><span class="pun">جديدة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> resourceDataList </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[];</span><span class="pln"> 
  </span><span class="kwd">for</span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> i </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> i </span><span class="pun">&lt;</span><span class="pln"> resourceUrls</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> i</span><span class="pun">++){</span><span class="pln">
    resourceDataList</span><span class="pun">.</span><span class="pln">push</span><span class="pun">(</span><span class="pln">
      fetchApiResourceObject_</span><span class="pun">(</span><span class="pln">resourceUrls</span><span class="pun">[</span><span class="pln">i</span><span class="pun">])</span><span class="pln">
    </span><span class="pun">);</span><span class="pln"> 
  </span><span class="pun">}</span><span class="pln"> 

  </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">المفاتيح</span><span class="pln"> </span><span class="pun">المستخدمة</span><span class="pln"> </span><span class="pun">للإشارة</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">جزء</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">داخل</span><span class="pln"> </span><span class="pun">الموارد</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">ويُفترض</span><span class="pln"> </span><span class="pun">أن</span><span class="pln"> </span><span class="pun">تكون</span><span class="pln"> </span><span class="pun">المفاتيح</span><span class="pln"> </span><span class="pun">متطابقة</span><span class="pln"> </span><span class="pun">لكل</span><span class="pln"> </span><span class="pun">كائن</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">نظرًا</span><span class="pln"> </span><span class="pun">لأنها</span><span class="pln"> </span><span class="pun">جميعها</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">نفس</span><span class="pln"> </span><span class="pun">نوع</span><span class="pln"> </span><span class="pun">المورد</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> resourceObjectKeys </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Object</span><span class="pun">.</span><span class="pln">keys</span><span class="pun">(</span><span class="pln">resourceDataList</span><span class="pun">[</span><span class="lit">0</span><span class="pun">]);</span><span class="pln">

  </span><span class="pun">إنشاء</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">بالاسم</span><span class="pln"> </span><span class="pun">المناسب</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">وتصبح</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">النشطة</span><span class="pln"> </span><span class="pun">تلقائيًا</span><span class="pln"> </span><span class="pun">بعد</span><span class="pln"> </span><span class="pun">إنشائها</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> resourceSheet </span><span class="pun">=</span><span class="pln"> createNewSheet_</span><span class="pun">(</span><span class="pln">
      </span><span class="str">"شخصيات "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> episodeNumber</span><span class="pun">);</span><span class="pln">

  </span><span class="pun">إضافة</span><span class="pln"> </span><span class="pun">بيانات</span><span class="pln"> </span><span class="pun">الـ</span><span class="pln"> <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">الجديدة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">باستخدام</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">مفتاح</span><span class="pln"> </span><span class="pun">كائن</span><span class="pln"> </span><span class="pun">كرأس</span><span class="pln"> </span><span class="pun">عمود</span><span class="pln"> </span><span class="com">// </span><span class="pln">
  fillSheetWithData_</span><span class="pun">(</span><span class="pln">resourceSheet</span><span class="pun">,</span><span class="pln"> resourceObjectKeys</span><span class="pun">,</span><span class="pln"> resourceDataList</span><span class="pun">);</span><span class="pln">

  </span><span class="pun">تنسيق</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">الجديدة</span><span class="pln"> </span><span class="pun">باستخدام</span><span class="pln"> </span><span class="pun">نفس</span><span class="pln"> </span><span class="pun">الأنماط</span><span class="pln"> </span><span class="pun">التي</span><span class="pln"> </span><span class="pun">تطبقها</span><span class="pln"> </span><span class="pun">عناصر</span><span class="pln"> </span><span class="pun">قائمة</span><span class="pln"> </span><span class="pun">المخصصة</span><span class="pln"> </span><span class="str">"تنسيقات سريعة"</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">وتعمل</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">هذه</span><span class="pln"> </span><span class="pun">التوابع</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">النشطة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">التي</span><span class="pln"> </span><span class="pun">تم</span><span class="pln"> </span><span class="pun">إنشاؤها</span><span class="pln"> </span><span class="pun">للتو</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  formatRowHeader</span><span class="pun">();</span><span class="pln">
  formatColumnHeader</span><span class="pun">();</span><span class="pln">   
  formatDataset</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	سادسًا، أضف الدوال المساعدة التالية إلى نهاية ملف مشروع النص البرمجي "<abbr title="Application Programming Interface | واجهة برمجية">API</abbr>.gs":
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3961_33" style="">
<span class="com">/** 
 الدالة المساعدة التي تسترد كائن JSON *
 الذي يحتوي على استجابة من واجهة برمجة تطبيقات عامة *
*
* @param {string} url عنوان الرابط لكائن واجهة برمجة التطبيقات الذي يتم جلبه
* @return {object} resourceObject كائن جيسون الذي تم جلبه
 من طلب الـ URL إلى الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> fetchApiResourceObject_</span><span class="pun">(</span><span class="pln">url</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">تقديم</span><span class="pln"> </span><span class="pun">طلب</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">الـ</span><span class="pln"> <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> </span><span class="pun">والحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">رد</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> response </span><span class="pun">=</span><span class="pln">
    </span><span class="typ">UrlFetchApp</span><span class="pun">.</span><span class="pln">fetch</span><span class="pun">(</span><span class="pln">url</span><span class="pun">,</span><span class="pln"> </span><span class="pun">{</span><span class="str">'muteHttpExceptions'</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">});</span><span class="pln">

  </span><span class="pun">تحليل</span><span class="pln"> </span><span class="pun">وإرجاع</span><span class="pln"> </span><span class="pun">الاستجابة</span><span class="pln"> </span><span class="pun">ككائن</span><span class="pln"> JSON </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> json </span><span class="pun">=</span><span class="pln"> response</span><span class="pun">.</span><span class="pln">getContentText</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> responseObject </span><span class="pun">=</span><span class="pln"> JSON</span><span class="pun">.</span><span class="pln">parse</span><span class="pun">(</span><span class="pln">json</span><span class="pun">);</span><span class="pln"> 
  </span><span class="kwd">return</span><span class="pln"> responseObject</span><span class="pun">;</span><span class="pln"> 
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/** 
 الدالة المساعدة التي تقوم بإنشاء ورقة *
 أو إرجاع ورقة موجودة بنفس الاسم *
 *
 * @param {string} name اسم الورقة
 * @return {object} الورقة المنشأة أو الحالية وتحمل الاسم نفسه
 لتصبح هذه الورقة نشطة *
 */</span><span class="pln"> 
</span><span class="kwd">function</span><span class="pln"> createNewSheet_</span><span class="pun">(</span><span class="pln">name</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> ss </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSpreadsheet</span><span class="pun">();</span><span class="pln">

  </span><span class="pun">إرجاع</span><span class="pln"> </span><span class="pun">ورقة</span><span class="pln"> </span><span class="pun">موجودة</span><span class="pln"> </span><span class="pun">إذا</span><span class="pln"> </span><span class="pun">كانت</span><span class="pln"> </span><span class="pun">تحمل</span><span class="pln"> </span><span class="pun">الاسم</span><span class="pln"> </span><span class="pun">المحدد</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">وتنشيط</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">قبل</span><span class="pln"> </span><span class="pun">إرجاعها</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> sheet </span><span class="pun">=</span><span class="pln"> ss</span><span class="pun">.</span><span class="pln">getSheetByName</span><span class="pun">(</span><span class="pln">name</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">sheet</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> sheet</span><span class="pun">.</span><span class="pln">activate</span><span class="pun">();</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="pun">وإلا</span><span class="pln"> </span><span class="pun">أنشيء</span><span class="pln"> </span><span class="pun">ورقة</span><span class="pln"> </span><span class="pun">جديدة</span><span class="pln"> </span><span class="pun">واضبط</span><span class="pln"> </span><span class="pun">اسمها</span><span class="pln"> </span><span class="pun">وأعدها</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">والأوراق</span><span class="pln"> </span><span class="pun">الجديدة</span><span class="pln"> </span><span class="pun">التي</span><span class="pln"> </span><span class="pun">تم</span><span class="pln"> </span><span class="pun">إنشاؤها</span><span class="pln"> </span><span class="pun">بهذه</span><span class="pln"> </span><span class="pun">الطريقة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">تصبح</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">النشطة</span><span class="pln"> </span><span class="pun">تلقائيًا</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  sheet </span><span class="pun">=</span><span class="pln"> ss</span><span class="pun">.</span><span class="pln">insertSheet</span><span class="pun">(</span><span class="pln">name</span><span class="pun">);</span><span class="pln"> 
  </span><span class="kwd">return</span><span class="pln"> sheet</span><span class="pun">;</span><span class="pln"> 
</span><span class="pun">}</span><span class="pln">

</span><span class="com">/** 
 الدالة المساعدة التي تضيف بيانات الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> إلى الورقة *
 ويتم استخدام كل مفتاح كائن كرأس عمود في الورقة الجديدة *
 *
 * @param {object} resourceSheet كائن الورقة التي تم تعديلها
 * @param {object} objectKeys قائمة مفاتيح الموارد
 * @param {object} resourceDataList قائمة كائنات موارد واجهة برمجة التطبيقات
 التي تحتوي على بيانات لإضافتها إلى الورقة *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> fillSheetWithData_</span><span class="pun">(</span><span class="pln">
    resourceSheet</span><span class="pun">,</span><span class="pln"> objectKeys</span><span class="pun">,</span><span class="pln"> resourceDataList</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="pun">تعيين</span><span class="pln"> </span><span class="pun">أبعاد</span><span class="pln"> </span><span class="pun">نطاق</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">التي</span><span class="pln"> </span><span class="pun">يتم</span><span class="pln"> </span><span class="pun">إضافتها</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> numRows </span><span class="pun">=</span><span class="pln"> resourceDataList</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> numColumns </span><span class="pun">=</span><span class="pln"> objectKeys</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln">

  </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">نطاق</span><span class="pln"> </span><span class="pun">الموارد</span><span class="pln"> </span><span class="pun">ومجموعة</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">المرتبطة</span><span class="pln"> </span><span class="pun">بها</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">وإضافة</span><span class="pln"> </span><span class="pun">صفًا</span><span class="pln"> </span><span class="pun">إضافيًا</span><span class="pln"> </span><span class="pun">لرؤوس</span><span class="pln"> </span><span class="pun">الأعمدة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> resourceRange </span><span class="pun">=</span><span class="pln">
    resourceSheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> numRows </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> numColumns</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> resourceValues </span><span class="pun">=</span><span class="pln"> resourceRange</span><span class="pun">.</span><span class="pln">getValues</span><span class="pun">();</span><span class="pln"> 

 </span><span class="pun">عمل</span><span class="pln"> </span><span class="pun">حلقة</span><span class="pln"> </span><span class="pun">تكرار</span><span class="pln"> </span><span class="pun">فوق</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">قيمة</span><span class="pln"> </span><span class="pun">ومفتاح</span><span class="pln"> </span><span class="pun">للمورد</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">واستخراج</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">ووضعها</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">مصفوفة</span><span class="pln"> </span><span class="pun">قيم</span><span class="pln"> </span><span class="pun">الموارد</span><span class="pln"> </span><span class="pun">الثنائية</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> column </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> column </span><span class="pun">&lt;</span><span class="pln"> numColumns</span><span class="pun">;</span><span class="pln"> column</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

    </span><span class="pun">ضبط</span><span class="pln"> </span><span class="pun">رأس</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> </span><span class="com">//</span><span class="pln">
    </span><span class="kwd">var</span><span class="pln"> columnHeader </span><span class="pun">=</span><span class="pln"> objectKeys</span><span class="pun">[</span><span class="pln">column</span><span class="pun">];</span><span class="pln">
    resourceValues</span><span class="pun">[</span><span class="lit">0</span><span class="pun">][</span><span class="pln">column</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> columnHeader</span><span class="pun">;</span><span class="pln">

    </span><span class="pun">قراءة</span><span class="pln"> </span><span class="pun">وضبط</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">صف</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">هذا</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> </span><span class="com">//</span><span class="pln">
    </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> row </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"> row </span><span class="pun">&lt;</span><span class="pln"> numRows </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"> row</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      </span><span class="kwd">var</span><span class="pln"> resource </span><span class="pun">=</span><span class="pln"> resourceDataList</span><span class="pun">[</span><span class="pln">row </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">];</span><span class="pln">
      </span><span class="kwd">var</span><span class="pln"> value </span><span class="pun">=</span><span class="pln"> resource</span><span class="pun">[</span><span class="pln">columnHeader</span><span class="pun">];</span><span class="pln">
      resourceValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="pln">column</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> value</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="pun">إزالة</span><span class="pln"> </span><span class="pun">أي</span><span class="pln"> </span><span class="pun">بيانات</span><span class="pln"> </span><span class="pun">موجودة</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">وتعيين</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">الجديدة</span><span class="pln"> </span><span class="pun">محلها</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  resourceSheet</span><span class="pun">.</span><span class="pln">clear</span><span class="pun">()</span><span class="pln">
  resourceRange</span><span class="pun">.</span><span class="pln">setValues</span><span class="pun">(</span><span class="pln">resourceValues</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	احفظ مشروع نصك البرمجي.
</p>

<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	لقد أضفت للتو الكثير من الشيفرات البرمجية، دعنا ننتقل إلى كل دالة على حدة لفهم كيفية عملها:
</p>

<h4>
	1. الدالة ()onOpen
</h4>

<p>
	لقد أضفت هنا بعض العناصر الجديدة للقائمة المخصصة "تنسيقات سريعة"، لقد عينت خط فاصل ثم استخدمت التابع <code>()Menu.addSubMenu</code> الذي يأخذ معامل واحد فقط، وهو"اسم القائمة الفرعية"، وذلك لإنشاء بنية قائمة متداخلة مع ثلاثة عناصر جديدة، وأضيفت العناصر الفرعية الجديدة باستخدام التابع <code>()Menu.addItem</code> الذي يأخذ معاملين فقط، وهما: "اسم عنصر القائمة" و "اسم الدالة" ويكون الاسم باللغة الإنجليزية كما نوهنا سابقًا.
</p>

<h4>
	2. الدوال الغالفة لعناصر القائمة الفرعية المخصصة
</h4>

<p>
	جميع عناصر القائمة الفرعية الجديدة تفعل شيئًا مشابهًا، إنهم يحاولون إنشاء ورقة جدول ببيانات سُحبت SWAPI، الاختلاف الوحيد هو أن كل دالة تركز على جزء مختلف من الفيلم.
</p>

<p>
	نعم سيكون من الملائم كتابة دالة واحدة فقط لإنشاء ورقة جدول البيانات، من خلال جعل الدالة تقبل معامل لتحديد الفيلم الذي يجب سحب بياناته، لكن المشكلة هنا أن التابع <code>()Menu.addItem</code> لا يسمح لك بتمرير المعاملات إليه عندما تستدعيه القائمة الفرعية المخصصة، إذن كيف تتجنب كتابة نفس الشيفرة البرمجية ثلاث مرات؟
</p>

<p>
	الجواب هو "الدالة الغالفة wrapper functions" وهي دوال خفيفة يمكنك الاتصال بها لكي تستدعي على الفور دالة أخرى مع ضبط معاملات محددة لها.
</p>

<p>
	هنا تستخدم الشيفرة البرمجية ثلاث دوال غالفة: الأولى <code>()createPeopleSheetIV</code>، والثانية <code>()createPeopleSheetV</code>، والثالثة <code>()createPeopleSheetVI</code>، وعناصر القائمة الفرعية مرتبطة بهذه الدوال.
</p>

<p>
	فعند النقر على أحد عناصر القائمة الفرعية، تعمل الدالة الغالفة على استدعاء دالة منشئ الورقة الرئيسية على الفور <code>()_createResourceSheet</code>، لتمرير المعاملات المناسبة لعنصر القائمة الفرعية، وتحديدًا ثلاثة معاملات، هم: "نوع المصدر" و "رقم معرف الفيلم" و "رقم جزء الفيلم"، وينتج عن هذا الإجراء إنشاء ورقة جدول بيانات مليئة ببيانات الشخصيات الرئيسية من أحد أجزاء فيلم "Star Wars".
</p>

<h4>
	3. الدالة (createResourceSheet_(‎
</h4>

<p>
	هذه هي دالة بناء ورقة جدول البيانات الرئيسية لهذا التمرين، فبمساعدة بعض الدوال المساعدة تحصل على بيانات من SWAPI، ثم تنشئ ورقة جدول بيانات جديدة، ثم تكتب بيانات الواجهة <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> في الورقة، ثم تنسق الورقة باستخدام الدوال التي أنشأتها في الأقسام السابقة من هذا المقال، وإليك التفاصيل:
</p>

<p>
	بدايةً، تستخدم الدالة <code>()_fetchApiResourceObject</code> التي تأخذ معامل واحد فقط، وهو: "الرابط"، وذلك لتقديم طلب إلى SWAPI لاسترداد معلومات الفيلم الأساسية، وتتضمن استجابة واجهة برمجة التطبيقات SWAPI مجموعة من الروابط التي يمكن أن تستخدمها الشيفرة البرمجية للحصول على مزيد من التفاصيل حول أشخاص محددين (يُعرفون هنا باسم resources) من الأفلام، تجمع الشيفرة البرمجية كل شيء في المصفوفة <code>ResourceUrls</code>.
</p>

<p>
	بعد ذلك تستخدم الشيفرة البرمجية <code>()_fetchApiResourceObject</code> لتكرار استدعاء الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> لكل رابط في المصفوفة <code>ResourceUrls</code>، وتُخزن النتائج في المصفوفة <code>ResourceDataList</code>، وكل عنصر في هذه المصفوفة هو كائن يصف شخصية مختلفة من الفيلم.
</p>

<p>
	تحتوي البيانات التي خُزنت في المصفوفة <code>ResourceDataList</code> على العديد من المفاتيح العامة التي عُينت لمعلومات حول الشخصيات التي مثلت في هذا الفيلم، فعلى سبيل المثال: يرمز المفتاح "name" إلى اسم الشخصية في الفيلم، ونحن نفترض أن أسماء المفاتيح لكل كائن بيانات متطابقة مع نوع البيانات بداخلها، لأنها تهدف إلى استخدام هياكل بيانات مشتركة، ولأننا سوف نحتاج إلى قائمة المفاتيح لاحقًا، لذلك تخزن الشيفرة البرمجية قائمة المفاتيح في المتغير <code>ResourceObjectKeys</code> باستخدام التابع من لغة جافا سكريبت <code>()Object.keys</code>.
</p>

<p>
	بعد ذلك تستدعي دالة البناء الدالة المساعدة <code>()_createNewSheet</code> التي تأخذ معامل واحد فقط، وهو: "اسم الورقة"، وذلك لإنشاء الورقة التي سوف توضع البيانات الجديدة بداخلها، ويؤدي استدعاء الدالة المساعدة أيضًا إلى تنشيط الورقة الجديدة.
</p>

<p>
	بعد إنشاء الورقة تُستدعى الدالة المساعدة <code>()_fillSheetWithData</code> التي تأخذ ثلاث معاملات، هم: "الورقة الجديدة" و "قائمة مفاتيح الكائنات" و "قائمة كائنات موارد الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>"، وذلك لإضافة جميع بيانات الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> إلى الورقة.
</p>

<p>
	أخيرًا تُستدعى جميع دوال التنسيق التي أنشأتها مسبقًا لتطبيق نفس قواعد التنسيق على البيانات الجديدة، نظرًا لأن الورقة الجديدة هي الورقة النشطة يمكن للشيفرة البرمجية إعادة استخدام هذه الدوال دون تعديل.
</p>

<h4>
	4: الدالة ()fetchApiResourceObject
</h4>

<p>
	تشبه الدالة المساعدة هذه الدالة المساعدة <code>()_fetchBookData</code> التي استخدمناها في المقال السابق "العمل مع البيانات"، فهي تأخذ الرابط المحدد ثم تستخدم التابع <code>()UrlFetchApp.fetch</code> الذي يأخذ معاملين، هما: "الرابط" و "المعاملات"، وذلك للحصول على استجابة، ثم تُحَلل الاستجابة في كائن JSON باستخدام التابع <code>()HTTPResponse.getContextText</code> وتابع <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-javascript-r550/" rel="">جافا سكريبت</a> <code>(JSON.parse(json</code>، ثم يُرجع كائن JSON الناتج.
</p>

<h4>
	5: الدالة ()_createNewSheet
</h4>

<p>
	هذه الدالة المساعدة بسيطة إلى حدٍ ما، فهي تتحقق أولاً من وجود ورقة بالاسم المحدد في جدول البيانات، فإن وجدته تعمل الدالة على تنشيط الورقة وإعادتها.
</p>

<p>
	أما إذا لم تكن الورقة موجودة، تعمل الدالة على إنشائها باستخدام <code>()Spreadsheet.insertSheet</code> الذي يأخذ معامل واحد فقط، هو: "اسم الورقة"، ثم تنشيطها وإرجاع الورقة الجديدة.
</p>

<h4>
	6: الدالة ()_fillSheetWithData
</h4>

<p>
	هذه الدالة المساعدة مسؤولة عن ملء الورقة الجديدة ببيانات الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>، فهي تأخذ كمعاملات ( الورقة الجديدة، وقائمة مفاتيح الكائنات، وقائمة كائنات موارد الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>)، ويمثل كل مفتاح كائن عمودًا في الورقة الجديدة، ويمثل كل كائن مورد صفًا.
</p>

<p>
	أولاً تحسب الدالة عدد الصفوف والأعمدة المطلوبة لتقديم بيانات الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> الجديدة وهو حجم قائمة الموارد والمفاتيح على التوالي، بعد ذلك تحدد الدالة نطاق الإخراج من خلال المتغير <code>ResourceRange</code> لوضع البيانات مع إضافة صف إضافي للاحتفاظ برؤوس الأعمدة، وتحتوي قيم المتغير <code>ResourceValues</code> على مصفوفة ثنائية مستخرجة من المتغير <code>ResourceRange</code>.
</p>

<p>
	بعد ذلك تسنخدم الدالة حلقة التكرار <code>For</code> عبر كل مفتاح كائن في قائمة <code>ObjectKeys</code> ثم يُعين المفتاح كرأس للعمود، ثم تمر حلقة تكرار <code>For</code> ثانية عبر كل كائن مورد، ولكل زوج (صف، عمود) تُنسخ معلومات الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> المقابلة لهما إلى <code>[resourceValues[row][column</code>.
</p>

<p>
	<strong>تنويه</strong>: تذكر أن الصفوف والأعمدة في "جداول البيانات" تبدأ فهرستها بالرقم "1"، بينما مصفوفات جافا سكريبت تبدأ فهرستها بالرقم "0"، وبسبب هذا الاختلاف غالبًا ما نضطر إلى إضافة أو طرح "1" من الفهارس عند البرمجة في Apps Script.
</p>

<p>
	بعد ملء المتغير <code>ResourceValues</code> بالبيانات، تُمسح ورقة الوجهة باستخدام <code>()Sheet.clear</code> في حالة احتوائها على بيانات من نقرات على عنصر القائمة الفرعية. أخيرًا تُكتب القيم الجديدة في الورقة.
</p>

<h3>
	النتائج
</h3>

<p>
	يمكنك رؤية نتائج عملك عن طريق تنفيذ ما يلي:
</p>

<ol>
<li>
		إذهب إلى جداول بيانات جوجل الذي نتدرب عليه "تنسيق البيانات" ثم انقر على القائمة "تنسيقات سريعة" في شريط القوائم، ثم اختر منها القائمة الفرعية "أبطال ثلاثية حرب النجوم" ثم اختر من القائمة المنبثقة "الجزء الرابع" .
	</li>
	<li>
		يجب أن تبدو النتائج كما يلي:
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101978" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5d890359_006-6.gif.0316a8486605f46fdcb9d01fc5f9ae60.gif" rel=""><img alt="006 - تنسيق البيانات 6.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="101978" data-unique="xu67p3ztr" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5d890359_006-6.gif.0316a8486605f46fdcb9d01fc5f9ae60.gif" style="width: 700px; height: auto;"></a>
</p>

<p>
	تهانينا، لقد كتبت الآن شيفرة برمجية لاستيراد البيانات من <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> إلى جداول البيانات وتنسيقها تلقائيًا، لكن هل لاحظت أن الورقة اتجاه عرضها من اليسار إلى اليمين؟
</p>

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

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_3961_41" style="">
<span class="pun">تحويل</span><span class="pln"> </span><span class="pun">اتجاه</span><span class="pln"> </span><span class="pun">عرض</span><span class="pln"> </span><span class="pun">ورقة</span><span class="pln"> </span><span class="pun">جدول</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">إلى:</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">اليمين</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">اليسار</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">const</span><span class="pln"> ss </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSpreadsheet</span><span class="pun">();</span><span class="pln">
  ss</span><span class="pun">.</span><span class="pln">getSheets</span><span class="pun">().</span><span class="pln">forEach</span><span class="pun">(</span><span class="pln">s </span><span class="pun">=&gt;</span><span class="pln"> s</span><span class="pun">.</span><span class="pln">setRightToLeft</span><span class="pun">(</span><span class="kwd">true</span><span class="pun">));</span></pre>

<p>
	نعم، أحيّك على انتباهك معي، أنا بالفعل لم أذكر لك أين تضع هذه الأسطر الثلاثة في شيفرتك البرمجية، لذلك اعتبر هذا الأمر بمثابة تدريب لك، فقط سوف أسهل عليك الأمر وأعطيك تلميح "الدوال الغالفة".
</p>

<p>
	الآن أريد منك استخدم هذه الأسطر الثلاثة في شيفرتك البرمجية لتصبح النتيجة النهائية تبدو كما يلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101979" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5e11d979_007-7.gif.6b98f632a068c9c34dac334cb333889f.gif" rel=""><img alt="007 - تنسيق البيانات 7.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="101979" data-unique="1kmhfvbep" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f5e11d979_007-7.gif.6b98f632a068c9c34dac334cb333889f.gif" style="width: 700px; height: auto;"></a>
</p>

<h2>
	خاتمة
</h2>

<p>
	وإلى هنا نكون قد وصلنا إلى نهاية هذا المقال من دليل أساسيات برمجة التطبيقات باستخدام جداول بيانات جوجل الذي تعلمنا فيه كيفية تطبيق عمليات تنسيق جداول البيانات المختلفة باستخدام Apps Script، وكيفية إنشاء قوائم فرعية باستخدام الدالة <code>()onOpen</code>، وكيفية تنسيق قائمة كائنات JSON التي جلبناها في ورقة جديدة من البيانات باستخدام Apps Script.
</p>

<p>
	وفي المقال القادم سوف نتعلم كيفية استخدام Apps Script لتصور البيانات في مخطط، ثم تصدير هذه المخططات إلى برنامج العروض التقديمية من جوجل.
</p>

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

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		المقال السابق: <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AF%D8%B9%D8%A7%D8%A1-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-api-%D8%B9%D8%A7%D9%85%D8%A9-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-apps-script-r749/" rel="">كيفية استدعاء واجهة برمجة تطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> عامة في جداول بيانات جوجل باستخدام Apps Script</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">أساسيات برمجة التطبيقات Apps Script باستخدام جداول بيانات جوجل </a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D9%88%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r747/" rel="">التعامل مع جداول البيانات والأوراق والنطاقات من خلال Apps Script </a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r748/" rel="">العمل مع البيانات في جداول بيانات جوجل من خلال Apps Script </a>
	</li>
</ul>
]]></description><guid isPermaLink="false">750</guid><pubDate>Fri, 08 Jul 2022 08:46:44 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x627;&#x633;&#x62A;&#x62F;&#x639;&#x627;&#x621; &#x648;&#x627;&#x62C;&#x647;&#x629; &#x628;&#x631;&#x645;&#x62C;&#x629; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; API &#x639;&#x627;&#x645;&#x629; &#x641;&#x64A; &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; Apps Script</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AF%D8%B9%D8%A7%D8%A1-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-api-%D8%B9%D8%A7%D9%85%D8%A9-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-apps-script-r749/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62c7ee5868429_-----API-------Apps-Script.jpg.941d37ebf6e29589a41b724518d2c21d.jpg" /></p>

<p>
	مرحبًا بك في المقال الرابع من دليل تعلم أساسيات برمجة التطبيقات باستخدام<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r295/" rel=""> جداول بيانات جوجل</a>، فبعد إكمالك لهذا المقال سوف يصبح لديك المعرفة في كيفية استرداد بيانات <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-api-r1314/" rel="">لواجهة برمجة تطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr></a> عامة في Apps Script لتحسين تجربة جداول البيانات.
</p>

<p>
	وسوف نستمر في العمل مع فئات <code>SpreadsheetApp</code>، و <code>Spreadsheet</code>، و <code>Sheet</code>، و <code>Range</code> التي تعرفنا عليها في المقالات السابقة من هذا الدليل.
</p>

<p>
	هذا هو المقال الرابع في دليل تعلم أساسيات برمجة التطبيقات مع جداول بيانات جوجل، وقبل البدء تأكد من إكمال المقالات السابقين:
</p>

<ol>
<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">أساسيات برمجة التطبيقات Apps Script</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D9%88%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r747/" rel="">جداول البيانات والأوراق والنطاقات.</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r748/" rel="">العمل مع البيانات</a>.
	</li>
</ol>
<h2>
	ماذا ستتعلم
</h2>

<ol>
<li>
		كيفية سحب بيانات كائن <a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%B9%D9%84%D9%85-json-r604/" rel="">JSON</a> ومعالجتها من مصدر <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> عام.
	</li>
	<li>
		كتابة بيانات الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> في جدول بيانات
	</li>
</ol>
<h2>
	ماذا ستحتاج
</h2>

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

<p>
	هذا المقال يعتبر استكمالاً للمقال السابق "العمل مع البيانات"، وستتعلم فيه كيفية زيادة تحسين مجموعة البيانات الموجودة داخل جدول البيانات الذي أنشأته باسم "معالجة البيانات والقوائم المخصصة"، فسوف تعمل على ملء الخلايا الفارغة داخل هذا الجدول ببيانات مستمدة من واجهة برمجة تطبيقات عامة <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>. لذلك سوف نستكمل التدريبات في هذا المقال باستخدام جدول البيانات "معالجة البيانات والقوائم المخصصة"، ومشروع Apps Script الذي أنشأناه باسم "Data Manipulation and Custom Menus" أيضًا، فإن كنت متابع لهذه السلسلة من البداية فليس مطلوب منك عمل أي شيء، فقط استكمل تنفيذ التدريبات الموجودة بهذا المقال باستخدام جدول البيانات "معالجة البيانات والقوائم المخصصة" الذي استخدمته في المقال السابق "العمل مع البيانات".
</p>

<p>
	أما إن كنت غير متابع لهذه السلسلة من بدايتها، فأنت قد فاتك ثلاث مقالات فقط من هذه السلسلة، لذلك أنصحك بالاطلاع على هذه المقالات الثلاثة، أو على الأقل الاطلاع على المقال الثالث "العمل مع البيانات" حتى تتمكن من فهم تسلسل هذا المقال وتنفيذ التدريبات المضمنة به.
</p>

<h2>
	نظرة عامة: الحصول على البيانات من واجهات برمجة التطبيقات العامة <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>
</h2>

<p>
	لقد نجحت حتى الآن في تحسين مجموعة البيانات الخاصة بك لإصلاح بعض مشكلات تنسيق العنوان والمؤلف، لكن مجموعة البيانات لا تزال تفتقد بعض المعلومات كما هو موضح أدناه:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101970" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6eff46f905_012-12.png.b2d3d065dfe5b78a524406a8cea18df2.png" rel=""><img alt="نسخة من 012 - العمل مع البيانات 12.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101970" data-unique="tk218hvt2" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6eff6262dd_012-12.thumb.png.bdb68f9de070d83caf706ea2723236af.png" style="width: 750px; height: auto;"></a>
</p>

<p>
	سوف تحتاج للحصول على البيانات المفقودة إلى مصدر آخر، ويمكنك عمل ذلك في Apps Script عن طريق طلب معلومات من واجهات برمجة التطبيقات الخارجية <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> التي يمكنها توفير بيانات إضافية.
</p>

<p>
	وتعد "<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-api-r1314/" rel="">واجهات برمجة التطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr></a>" خدمة يمكن للبرامج والسكربتات الاتصال بها لطلب معلومات أو لاتخاذ إجراءات معينة، ونحن في هذا القسم من المقال سنعمل على الاتصال بواجهة برمجة تطبيقات متاحة للجمهور لطلب معلومات الكتب التي يمكنك إدراجها في الخلايا الشاغرة بورقة جدول البيانات الخاصة بك.
</p>

<p>
	وسوف يعلمك هذا القسم كيفية:
</p>

<ul>
<li>
		طلب بيانات الكتاب من مصدر خارجي لواجهة برمجة التطبيقات.
	</li>
	<li>
		استخراج معلومات العنوان والمؤلف من البيانات التي تم إرجاعها ووضعها في الخلايا الشاغرة بجدول البيانات الخاص بك.
	</li>
</ul>
<h2>
	إحضار البيانات الخارجية باستخدام UrlFetch
</h2>

<p>
	سوف تأخذ الدالة المساعدة <code>()_fetchBookData</code> معاملًا واحدًا هو رقم ISBN أو الرقم العالمي الموحد للكتاب وهو مكون من 13 رقمًا كمعامل، ثم تتصل بواجهة برمجة التطبيقات العامة "Open Library <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>" ثم تعيد بيانات حول هذا الكتاب في كائن JSON.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: Open Library هو أرشيف على الإنترنت يسعى إلى إنشاء صفحة لكل كتاب منشور، فإذا كنت مهتمًا فيمكنك قراءة المزيد حول وثائق <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> الخاصة بهم على <a href="https://openlibrary.org/developers/api" rel="external nofollow">موقعهم الرسمي</a>.
		</p>
	</div>
</blockquote>

<h3>
	التطبيق
</h3>

<p>
	يمكنك إنشاء هذه الدالة المساعدة بإضافة الدالة التالية إلى نهاية مشروع النص البرمجي في محرر Apps Script:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_9438_8" style="">
<span class="com">/**
 دالة مساعدة لاسترداد بيانات الكتب *
 من واجهة برمجة التطبيقات العامة "Open Library <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>" *
 *
 * @param {number} ISBN - الرقم العالمي الموحد للكتاب الذي تريد العثور عليه
 * @return {object} بيانات الكتاب بتنسيق جيسون
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> fetchBookData_</span><span class="pun">(</span><span class="pln">ISBN</span><span class="pun">){</span><span class="pln">
 </span><span class="pun">الاتصال</span><span class="pln"> </span><span class="pun">بواجهة</span><span class="pln"> </span><span class="pun">برمجة</span><span class="pln"> </span><span class="pun">التطبيقات</span><span class="pln"> </span><span class="pun">العامة</span><span class="pln"> <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> url </span><span class="pun">=</span><span class="pln"> </span><span class="str">"https://openlibrary.org/api/books?bibkeys=ISBN:"</span><span class="pln">
      </span><span class="pun">+</span><span class="pln"> ISBN </span><span class="pun">+</span><span class="pln"> </span><span class="str">"&amp;jscmd=details&amp;format=json"</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> response </span><span class="pun">=</span><span class="pln"> </span><span class="typ">UrlFetchApp</span><span class="pun">.</span><span class="pln">fetch</span><span class="pun">(</span><span class="pln">
      url</span><span class="pun">,</span><span class="pln"> </span><span class="pun">{</span><span class="str">'muteHttpExceptions'</span><span class="pun">:</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">});</span><span class="pln">

 </span><span class="pun">تقديم</span><span class="pln"> </span><span class="pun">طلبًا</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> </span><span class="pun">والحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">استجابة</span><span class="pln"> </span><span class="pun">قبل</span><span class="pln"> </span><span class="pun">هذه</span><span class="pln"> </span><span class="pun">النقطة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> json </span><span class="pun">=</span><span class="pln"> response</span><span class="pun">.</span><span class="pln">getContentText</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> bookData </span><span class="pun">=</span><span class="pln"> JSON</span><span class="pun">.</span><span class="pln">parse</span><span class="pun">(</span><span class="pln">json</span><span class="pun">);</span><span class="pln"> 

  </span><span class="pun">إرجاع</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">التي</span><span class="pln"> </span><span class="pun">نهتم</span><span class="pln"> </span><span class="pun">بها</span><span class="pln"> </span><span class="pun">فقط</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">return</span><span class="pln"> bookData</span><span class="pun">[</span><span class="str">'ISBN:'</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> ISBN</span><span class="pun">];</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	احفظ مشروع نصك البرمجي.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: في Apps Script تعتبر أسماء الدوال المنتهية بـ _ (شرطة سفلية) خاصة، فلا تستطيع السكربتات الأخرى استدعاء هذه الدوال، لذلك إذا كنت تعرف أن الدالة ستستخدم فقط بواسطة السكربت الحالي فقط، فمن الأفضل إنهاء اسم الدالة بـ _ (شرطة سفلية)
		</p>
	</div>
</blockquote>

<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	تنقسم هذه الشيفرة البرمجية إلى قسمين رئيسيين:
</p>

<h4>
	1. طلب <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>
</h4>

<p>
	في السطرين الأولين تتصل الدالة <code>()_fetchBookData</code> بواجهة برمجة التطبيقات العامة "Open Library <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>" باستخدام نقطة نهاية <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r1435/" rel="">عنوان URL</a> لواجهة برمجة التطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>، وخدمة جلب عنوان URL لبرمجة التطبيقات Apps Script.
</p>

<p>
	المتغير <code>url</code> هو مجرد عنوان ويب يشير إلى موقع على خوادم Open Library، ويتضمن هذا المتغير ثلاثة معاملات، هي: bibkeys و jscmd و format، تخبر خوادم Open Library بالمعلومات التي تطلبها وكيفية هيكلة الاستجابة، ففي مثالنا أنت تقدم رقم ISBN أو الرقم العالمي للكتاب وتطلب عرض معلومات مفصلة عنه <a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%B9%D9%84%D9%85-json-r604/" rel="">بتنسيق JSON</a>.
</p>

<p>
	بمجرد إنشاء سلسلة URL تُرسل الشيفرة البرمجية طلبًا إلى الموقع ويتلقى ردًا، ويحدث ذلك باستخدام التابع <code>(UrlFetchApp.fetch(url, params</code> يرسل طلب معلومات إلى عنوان URL الخارجي الذي تقدمه ويخزن الاستجابة الناتجة في المتغير <code>response</code> بالإضافة إلى عنوان URL، وتعيّن الشيفرة البرمجية المعامل الاختياري "muteHttpExceptions" إلى القيمة "true"، ويعني هذا الإعداد أن الشيفرات البرمجية الخاصة بك لن تتوقف إذا نتج عن الطلب خطأ في واجهة برمجة التطبيقات، وبدلاً من ذلك تُرجع استجابة الخطأ.
</p>

<p>
	يُرجع الطلب كائن <code>HTTPResponse</code> يُخزن في المتغير <code>response</code>، ويتضمن الكائن <code>HTTPResponse</code> معرف الاستجابة ورؤوس <a href="https://academy.hsoub.com/programming/general/%d9%85%d8%af%d8%ae%d9%84-%d8%a5%d9%84%d9%89-http-r73/" rel="">HTTP</a> ومحتوى الاستجابة الرئيسي، أما المعلومات ذات الأهمية هنا في محتوى JSON الرئيسي، لذلك يجب على الشيفرة البرمجية استخراج ذلك ثم تحليل JSON لتحديد موقع المعلومات المطلوبة وإرجاعها.
</p>

<h4>
	2. تحليل استجابة <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> وإرجاع المعلومات التي تهمك
</h4>

<p>
	في الأسطر الثلاثة الأخيرة من الشيفرة البرمجية، يعمل التابع <code>()HTTPResponse.getContentText</code> على إرجاع المحتوى الرئيسي من المتغير <code>response</code> كسلسلة بتنسيق JSON، ثم يعمل التابع <code>(JSON.parse(jsonString</code> على تحويل سلسلة JSON إلى كائن <a href="https://wiki.hsoub.com/JavaScript" rel="external">JavaScript</a> إذ يمكن استخراج أجزاء مختلفة من البيانات بسهولة.
</p>

<p>
	أخيرًا تعمل الدالة على إرجاع البيانات المقابلة لرقم ISBN أو الترقيم العالمي للكتاب.
</p>

<h3>
	النتائج
</h3>

<p>
	الآن بعد أن نفذت الدالة <code>()_fetchBookData</code> يمكنك استخدامها للمساعدة في ملء الخلايا الشاغرة في جدول البيانات، لكن إن استخدمتها الآن سوف تحصل على رسالة خطأ لأننا لم ننشىء بعد الدالة <code>()fillInTheBlanks</code> المرتبطة بالقائمة الفرعية المخصصة "ملء الخلايا الفارغة بالعنوان والمؤلف".
</p>

<h2>
	كتابة بيانات الواجهة <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> في جدول بيانات
</h2>

<p>
	يمكنك الآن إنشاء الدالة <code>()fillInTheBlanks</code> التي تنفذ ما يلي:
</p>

<ol>
<li>
		تحديد بيانات العنوان والمؤلف المفقودة ضمن نطاق البيانات النشط.
	</li>
	<li>
		استرجاع البيانات المفقودة لكتاب معين عن طريق استدعاء Open Library <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> باستخدام التابع <code>()_fetchBookData</code>.
	</li>
	<li>
		تحديث قيم العنوان والمؤلف المفقودة في الخلايا الخاصة بهما.
	</li>
</ol>
<h3>
	التطبيق
</h3>

<p>
	يمكنك إنشاء هذه الدالة من خلال إضافة الدالة التالية إلى نهاية مشروع النص البرمجي في محرر Apps Script:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_9438_10" style="">
<span class="com">/**
 يملأ بيانات العنوان والمؤلف المفقودة *
 باستخدام استدعاءات Open Library <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> *
 */</span><span class="pln"> 
</span><span class="kwd">function</span><span class="pln"> fillInTheBlanks</span><span class="pun">(){</span><span class="pln">
  </span><span class="pun">تعريف</span><span class="pln"> </span><span class="pun">الثوابت</span><span class="pln"> </span><span class="pun">التي</span><span class="pln"> </span><span class="pun">تحدد</span><span class="pln"> </span><span class="pun">رقم</span><span class="pln"> </span><span class="pun">فهرس</span><span class="pln"> </span><span class="pun">أعمدة</span><span class="pln"> </span><span class="str">"اسم الكتاب"</span><span class="pln"> </span><span class="pun">و</span><span class="pln"> </span><span class="str">"المؤلف"</span><span class="pln"> </span><span class="pun">و</span><span class="pln"> </span><span class="str">"الرقم العالمي الموحد للكتاب"</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">في</span><span class="pln"> </span><span class="pun">مصفوفة</span><span class="pln"> </span><span class="pun">المتغير</span><span class="pln"> bookValues </span><span class="pun">أدناه</span><span class="pln"> </span><span class="com">// </span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> TITLE_COLUMN </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> AUTHOR_COLUMN </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> ISBN_COLUMN </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">

  </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">معلومات</span><span class="pln"> </span><span class="pun">الكتب</span><span class="pln"> </span><span class="pun">الموجودة</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">النشطة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
 </span><span class="pun">وتوضع</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">داخل</span><span class="pln"> </span><span class="pun">المصفوفة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> dataRange </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSpreadsheet</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">getDataRange</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> bookValues </span><span class="pun">=</span><span class="pln"> dataRange</span><span class="pun">.</span><span class="pln">getValues</span><span class="pun">();</span><span class="pln">

  </span><span class="pun">فحص</span><span class="pln"> </span><span class="pun">كل</span><span class="pln"> </span><span class="pun">صف</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">باستثناء</span><span class="pln"> </span><span class="pun">رؤوس</span><span class="pln"> </span><span class="pun">الصفوف</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">إذا</span><span class="pln"> </span><span class="pun">كان</span><span class="pln"> </span><span class="pun">رقم</span><span class="pln"> ISBN </span><span class="pun">موجودًا</span><span class="pln"> </span><span class="pun">وكان</span><span class="pln"> </span><span class="pun">اسم</span><span class="pln"> </span><span class="pun">الكتاب</span><span class="pln"> </span><span class="pun">أو</span><span class="pln"> </span><span class="pun">المؤلف</span><span class="pln"> </span><span class="pun">مفقودًا</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">فاستخدم</span><span class="pln"> </span><span class="pun">التابع</span><span class="pln"> </span><span class="pun">(</span><span class="pln">fetchBookData_ </span><span class="pun">(</span><span class="pln">isbn </span><span class="com">//</span><span class="pln">
  </span><span class="pun">لاسترداد</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">المفقودة</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="typ">Open</span><span class="pln"> </span><span class="typ">Library</span><span class="pln"> <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">ثم</span><span class="pln"> </span><span class="pun">املأ</span><span class="pln"> </span><span class="pun">عمود</span><span class="pln"> </span><span class="str">"اسم الكتاب"</span><span class="pln"> </span><span class="pun">أو</span><span class="pln"> </span><span class="str">"المؤلف"</span><span class="pln"> </span><span class="pun">المفقودين</span><span class="pln"> </span><span class="pun">ببياناتهم</span><span class="pln"> </span><span class="pun">عند</span><span class="pln"> </span><span class="pun">العثور</span><span class="pln"> </span><span class="pun">عليهم</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">for</span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> row </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln"> row </span><span class="pun">&lt;</span><span class="pln"> bookValues</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> row</span><span class="pun">++){</span><span class="pln">   
    </span><span class="kwd">var</span><span class="pln"> isbn </span><span class="pun">=</span><span class="pln"> bookValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="pln">ISBN_COLUMN</span><span class="pun">];</span><span class="pln">
    </span><span class="kwd">var</span><span class="pln"> title </span><span class="pun">=</span><span class="pln"> bookValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="pln">TITLE_COLUMN</span><span class="pun">];</span><span class="pln">
    </span><span class="kwd">var</span><span class="pln"> author </span><span class="pun">=</span><span class="pln"> bookValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="pln">AUTHOR_COLUMN</span><span class="pun">];</span><span class="pln">

    </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">isbn </span><span class="pun">!=</span><span class="pln"> </span><span class="str">""</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> </span><span class="pun">(</span><span class="pln">title </span><span class="pun">===</span><span class="pln"> </span><span class="str">""</span><span class="pln"> </span><span class="pun">||</span><span class="pln"> author </span><span class="pun">===</span><span class="pln"> </span><span class="str">""</span><span class="pun">)</span><span class="pln"> </span><span class="pun">){</span><span class="pln">
      </span><span class="pun">الاتصال</span><span class="pln"> </span><span class="pun">فقط</span><span class="pln"> </span><span class="pun">بواجهة</span><span class="pln"> </span><span class="pun">برمجة</span><span class="pln"> </span><span class="pun">التطبيقات</span><span class="pln"> </span><span class="pun">إذا</span><span class="pln"> </span><span class="pun">كان</span><span class="pln"> </span><span class="pun">لديك</span><span class="pln"> </span><span class="pun">رقم</span><span class="pln"> ISBN </span><span class="com">//</span><span class="pln">
      </span><span class="pun">وكان</span><span class="pln"> </span><span class="pun">اسم</span><span class="pln"> </span><span class="pun">الكتاب</span><span class="pln"> </span><span class="pun">أو</span><span class="pln"> </span><span class="pun">المؤلف</span><span class="pln"> </span><span class="pun">مفقودًا</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      </span><span class="kwd">var</span><span class="pln"> bookData </span><span class="pun">=</span><span class="pln"> fetchBookData_</span><span class="pun">(</span><span class="pln">isbn</span><span class="pun">);</span><span class="pln">

      </span><span class="pun">في</span><span class="pln"> </span><span class="pun">بعض</span><span class="pln"> </span><span class="pun">الأحيان</span><span class="pln"> </span><span class="pun">لا</span><span class="pln"> </span><span class="pun">تقوم</span><span class="pln"> </span><span class="pun">واجهة</span><span class="pln"> </span><span class="pun">برمجة</span><span class="pln"> </span><span class="pun">التطبيقات</span><span class="pln"> </span><span class="pun">بإرجاع</span><span class="pln"> </span><span class="pun">المعلومات</span><span class="pln"> </span><span class="pun">المطلوبة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
     </span><span class="pun">في</span><span class="pln"> </span><span class="pun">هذه</span><span class="pln"> </span><span class="pun">الحالة</span><span class="pln"> </span><span class="pun">لا</span><span class="pln"> </span><span class="pun">تحاول</span><span class="pln"> </span><span class="pun">تحديث</span><span class="pln"> </span><span class="pun">الصف</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(!</span><span class="pln">bookData </span><span class="pun">||</span><span class="pln"> </span><span class="pun">!</span><span class="pln">bookData</span><span class="pun">.</span><span class="pln">details</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
        </span><span class="kwd">continue</span><span class="pun">;</span><span class="pln">
      </span><span class="pun">}</span><span class="pln">

      </span><span class="pun">قد</span><span class="pln"> </span><span class="pun">لا</span><span class="pln"> </span><span class="pun">تُرجع</span><span class="pln"> </span><span class="pun">واجهة</span><span class="pln"> </span><span class="pun">برمجة</span><span class="pln"> </span><span class="pun">التطبيقات</span><span class="pln"> </span><span class="pun">عنوانًا</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      </span><span class="pun">لذا</span><span class="pln"> </span><span class="pun">قم</span><span class="pln"> </span><span class="pun">بملئها</span><span class="pln"> </span><span class="pun">فقط</span><span class="pln"> </span><span class="pun">إذا</span><span class="pln"> </span><span class="pun">كانت</span><span class="pln"> </span><span class="pun">الاستجابة</span><span class="pln"> </span><span class="pun">تحتوي</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">عنوان</span><span class="pln"> </span><span class="com">//</span><span class="pln">
     </span><span class="pun">وإذا</span><span class="pln"> </span><span class="pun">كان</span><span class="pln"> </span><span class="pun">عمود</span><span class="pln"> </span><span class="str">"اسم الكتاب"</span><span class="pln"> </span><span class="pun">فارغًا</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">title </span><span class="pun">===</span><span class="pln"> </span><span class="str">""</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> bookData</span><span class="pun">.</span><span class="pln">details</span><span class="pun">.</span><span class="pln">title</span><span class="pun">){</span><span class="pln">
        bookValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="pln">TITLE_COLUMN</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> bookData</span><span class="pun">.</span><span class="pln">details</span><span class="pun">.</span><span class="pln">title</span><span class="pun">;</span><span class="pln"> 
      </span><span class="pun">}</span><span class="pln">

      </span><span class="pun">قد</span><span class="pln"> </span><span class="pun">لا</span><span class="pln"> </span><span class="pun">تُرجع</span><span class="pln"> </span><span class="pun">واجهة</span><span class="pln"> </span><span class="pun">برمجة</span><span class="pln"> </span><span class="pun">التطبيقات</span><span class="pln"> </span><span class="pun">اسم</span><span class="pln"> </span><span class="pun">المؤلف</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      </span><span class="pun">لذا</span><span class="pln"> </span><span class="pun">قم</span><span class="pln"> </span><span class="pun">بملئها</span><span class="pln"> </span><span class="pun">فقط</span><span class="pln"> </span><span class="pun">إذا</span><span class="pln"> </span><span class="pun">كانت</span><span class="pln"> </span><span class="pun">الاستجابة</span><span class="pln"> </span><span class="pun">تحتوي</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">اسم</span><span class="pln"> </span><span class="pun">المؤلف</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      </span><span class="pun">وإذا</span><span class="pln"> </span><span class="pun">كان</span><span class="pln"> </span><span class="pun">عمود</span><span class="pln"> </span><span class="str">"المؤلف"</span><span class="pln"> </span><span class="pun">فارغًا</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">author </span><span class="pun">===</span><span class="pln"> </span><span class="str">""</span><span class="pln"> </span><span class="pun">&amp;&amp;</span><span class="pln"> bookData</span><span class="pun">.</span><span class="pln">details</span><span class="pun">.</span><span class="pln">authors
          </span><span class="pun">&amp;&amp;</span><span class="pln"> bookData</span><span class="pun">.</span><span class="pln">details</span><span class="pun">.</span><span class="pln">authors</span><span class="pun">[</span><span class="lit">0</span><span class="pun">].</span><span class="pln">name</span><span class="pun">){</span><span class="pln">
        bookValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="pln">AUTHOR_COLUMN</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln">
          bookData</span><span class="pun">.</span><span class="pln">details</span><span class="pun">.</span><span class="pln">authors</span><span class="pun">[</span><span class="lit">0</span><span class="pun">].</span><span class="pln">name</span><span class="pun">;</span><span class="pln"> 
      </span><span class="pun">}</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="pun">أدخل</span><span class="pln"> </span><span class="pun">قيم</span><span class="pln"> </span><span class="pun">بيانات</span><span class="pln"> </span><span class="pun">الكتاب</span><span class="pln"> </span><span class="pun">المحدثة</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">جدول</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  dataRange</span><span class="pun">.</span><span class="pln">setValues</span><span class="pun">(</span><span class="pln">bookValues</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	احفظ مشروع النص البرمجي الخاص بك.
</p>

<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	تنقسم هذه الشيفرة البرمجية إلى ثلاثة أقسام:
</p>

<h4>
	1. قراءة معلومات الكتاب الموجودة
</h4>

<p>
	تحدد الأسطر الثلاثة الأولى من الدالة الثوابت التي تساعد في جعل الشيفرة البرمجية أكثر قابلية للقراءة.
</p>

<p>
	وفي الأسطر الثلاثة التالية يُستخدم المتغير <code>bookValues</code> للاحتفاظ بنسخة محلية من بيانات الكتاب، ستعمل الشيفرة البرمجية على قراءة المعلومات من المتغير <code>bookValues</code>، واستخدام الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> لملء المعلومات المفقودة، ثم كتابة هذه القيم مرة أخرى في جدول البيانات.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: يختلف الترتيب في هذه الدالة عن الترتيب في دالة <code>()splitAtFirstComma</code> ودالة <code>()splitAtLastBy</code>، ففيهما تفحص الشيفرة البرمجية فقط الخلايا النشطة، أما هذه الدالة تفحص الورقة بأكملها باستخدام التابع <code>()Spreadsheet.getDataRange</code>.
		</p>
	</div>
</blockquote>

<h4>
	2. إحضار المعلومات المفقودة
</h4>

<p>
	تمر حلقة التكرار <code>For</code> في كل صف بالمتغير <code>bookValues</code> للعثور على العناوين أو المؤلفين المفقودة، وذلك لتقليل عدد مرات استدعاء الواجهة <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> لتحسين كفاءة الشيفرة البرمجية، فلا يستدعى الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> إلا إذا كان ما يلي صحيحًا:
</p>

<ol>
<li>
		أن تحتوي الخلية بالعمود "الرقم العالمي الموحد للكتاب" على قيمة.
	</li>
	<li>
		أن تكون الخلية بعمود "اسم الكتاب" أو عمود "المؤلف" فارغة.
	</li>
</ol>
<p>
	فإذا تحقق الشرطان فإن الشيفرة البرمجية تستدعي واجهة التطبيقات البرمجية <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> باستخدام الدالة <code>()_fetchBookData</code> وتُخزن النتيجة في المتغير <code>bookData</code> ليصبح لديك المعلومات المفقودة التي تريد إدراجها في ورقة جدول البيانات.
</p>

<p>
	المهمة الوحيدة المتبقية هي إضافة المعلومات بالمتغير <code>bookData</code> في جدول البيانات الخاص بك، ومع ذلك قد يواجهك سوء حظ بعدم احتواء Open Library <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> على المعلومات التي تطلبها، أو قد تواجه أحيانًا مشكلة أخرى تمنعها من توفير تلك المعلومات، فإذا افترضت أن كل طلب تقدمه لواجهة برمجة التطبيقات سينجح، فلن تكون شيفرتك البرمجية قوية بما يكفي للتعامل مع الأخطاء غير المتوقعة.
</p>

<p>
	وللتأكد من أن الشيفرات البرمجية الخاصة بك يمكنها معالجة أخطاء الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> يجب أن تتحقق الشيفرة البرمجية من أن استجابة الـ <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> صالحة قبل محاولة استخدامها، فإنها تُجري فحصًا بسيطًا للتحقق من وجود <code>bookData</code> و <code>bookData.details</code> قبل محاولة القراءة منها، إذا كان أي منهما مفقودًا فهذا يعني أن واجهة برمجة التطبيقات لا تحتوي على البيانات التي تريدها، وفي هذه الحالة يخبر الأمر <code>continue</code> الشيفرة البرمجية بتخطي هذا الصف من جدول البيانات.
</p>

<p>
	نعم قد لا تتمكن من ملء الخلايا الشاغرة، ولكن على الأقل لن يتعطل النص البرمجي الخاص بك.
</p>

<h4>
	3. إعادة كتابة المعلومات المحدثة في الورقة
</h4>

<p>
	يحتوي الجزء الأخير من الشيفرة البرمجية على فحوصات مماثلة للتحقق من أن واجهة برمجة التطبيقات (<abbr title="Application Programming Interface | واجهة برمجية">API</abbr>) تعرض العنوان ومعلومات المؤلف، فتعمل الشيفرة البرمجية على تحديث مصفوفة <code>bookValues</code> فقط إذا كانت الخلية بعمود "اسم الكتاب" وعمود "المؤلف" فارغة، وكانت واجهة برمجة التطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> تُرجع قيمة يمكنك وضعها هناك.
</p>

<p>
	تخرج جملة التكرار <code>For</code> بعد فحص جميع الصفوف في ورقة جدول البيانات، والخطوة الأخيرة هي إعادة كتابة مصفوفة <code>bookValues</code> المحدّثة إلى جدول البيانات باستخدام التابع <code>()Range.setValues</code>.
</p>

<h3>
	النتائج
</h3>

<p>
	يمكنك الآن رؤية تأثيرات الدالة <code>()fillInTheBlanks</code>وهي تعمل إذ ستمكنك من إكمال تنظيم بيانات الكتب الخاصة بك، فقط اذهب إلى القائمة المخصصة "قائمة الكتب" واختر منها القائمة الفرعية "ملء الخلايا الفارغة بالعنوان والمؤلف" ومن المفترض أن تكون النتيجة لديك كما في الصورة التالية:
</p>

<p style="text-align: center;">
	<img alt="نسخة من 013 - العمل مع البيانات 13.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="101971" data-unique="c6sp8vh70" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6f00340c29_013-13.gif.01131c1548a8c3c89bc5d711510f4d49.gif" style="width: 750px; height: auto;"></p>

<h2>
	خاتمة
</h2>

<p>
	نكون إلى هنا قد وصلنا إلى نهاية هذا المقال من دليل أساسيات برمجة التطبيقات باستخدام جداول بيانات جوجل الذي تعلمنا فيه كيفية استدعاء واجهات برمجة التطبيقات العامة <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> باستخدام خدمة جلب عناوين URL، وأخيرًا كيفية تحليل بيانات كائن JSON المستردة من مصدر <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> عام.
</p>

<p>
	وفي المقال القادم سوف نتعمق أكثر في كيفية تنسيق البيانات داخل جدول بيانات.
</p>

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

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">أساسيات برمجة التطبيقات Apps Script باستخدام جداول بيانات جوجل </a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D9%88%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r747/" rel="">التعامل مع جداول البيانات والأوراق والنطاقات من خلال Apps Script</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r748/" rel="">العمل مع البيانات في جداول بيانات جوجل من خلال Apps Script </a>
	</li>
</ul>
]]></description><guid isPermaLink="false">749</guid><pubDate>Fri, 08 Jul 2022 08:45:08 +0000</pubDate></item><item><title>&#x627;&#x644;&#x639;&#x645;&#x644; &#x645;&#x639; &#x627;&#x644;&#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x641;&#x64A; &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644; &#x645;&#x646; &#x62E;&#x644;&#x627;&#x644; Apps Script</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r748/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62c7edae6ad29_---------Apps-Script.jpg.7f447b10cbb32922edd9617e6349b10d.jpg" /></p>

<p>
	مرحبًا بك في المقال الثالث من دليل تعلم أساسيات برمجة التطبيقات باستخدام جداول بيانات جوجل، فبعد إكمالك لهذا المقال سوف يصبح لديك المعرفة في كيفية استخدام معالجة البيانات، والقوائم المخصصة، واسترداد بيانات <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-api-r1314/" rel="">لواجهة برمجة تطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr></a> عامة في Apps Script لتحسين تجربة جداول البيانات.
</p>

<p>
	وسوف نستمر في العمل مع فئات <code>SpreadsheetApp</code>، و <code>Spreadsheet</code>، و <code>Sheet</code>، و <code>Range</code> التي تعرفنا عليها في <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D9%88%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r747/" rel="">المقال السابق</a> من هذا الدليل.
</p>

<h2>
	ماذا ستتعلم
</h2>

<ol>
<li>
		كيفية استيراد البيانات من جدول بيانات شخصي أو مشترك في Google Drive.
	</li>
	<li>
		كيفية إنشاء قائمة مخصصة باستخدام الدالة <code>()onOpen</code>.
	</li>
	<li>
		كيفية تحليل ومعالجة قيم سلسلة البيانات في خلايا ورقة جدول بيانات جوجل.
	</li>
	<li>
		كيفية سحب بيانات كائن <a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%B9%D9%84%D9%85-json-r604/" rel="">JSON</a> ومعالجتها من مصدر <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> عام.
	</li>
</ol>
<h2>
	ماذا ستحتاج
</h2>

<ul>
<li>
		فهم موضوعات Apps Script الأساسية التي استكشفناها في المقاين السابقين من هذا الدليل.
	</li>
	<li>
		الإلمام الأساسي بمحرر الشيفرات البرمجية Apps Script.
	</li>
	<li>
		الإلمام الأساسي <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r295/" rel="">بجداول بيانات Google</a>.
	</li>
	<li>
		الإلمام الأساسي <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-javascript-r550/" rel="">بلغة البرمجة JavaScript</a> وصنف 'String' الخاص به.
	</li>
</ul>
<p>
	نزل <a data-fileid="101969" href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=101969" rel="">جدول البيانات المرفق</a> في المقال الذي سنعمل عليه وافتحه عبر درايف برفعه مباشرة أو نسخ محتوى إلى جدول سابق لديك كما شرحنا طريقة استيراد الملف في <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">المقال الأول</a> من هذه السلسلة.
</p>

<h2>
	الإعداد للعمل
</h2>

<p>
	تتطلب التدريبات في هذا المقال وجود جدولين بيانات للعمل من خلالها.
</p>

<ul>
<li>
		<p>
			<strong>فالجدول الأول</strong> عبارة عن فهرس لمكتبة تحتوي على بيانات اسم الكتاب واسم المؤلف والرقم العالمي الموحد للكتاب، وستكون وظيفة هذا الجدول كقاعدة بيانات فقط لاستيراد هذه البيانات منه، لا تقلق لقد وفرنا لك هذا الجدول بالفعل ويمكنك الحصول عليه وتنزيله من المرفقات الخاصة بهذا المقال، ثم إعادة رفعه على حسابك بجوجل درايف بأحد الطريقتان اللتان ذكرناهما في المقال الأول من هذه السلسلة.
		</p>
	</li>
	<li>
		<p>
			<strong>والجدول الثاني</strong> سيكون جدول فارغ ستقوم أنت بإنشائه، وستكون وظيفة هذا الجدول الاتصال بجدول قاعدة البيانات لاستيراد البيانات التي بداخله ثم تنفيذ التدريبات الخاصة بهذا المقال عليه.
		</p>
	</li>
</ul>
<p>
	ولإنشاء جدول البيانات هذا اتبع الخطوات التالية:
</p>

<p>
	أولاً، إنشاء جدول بيانات في Google Drive، ويمكنك عمل ذلك من <a href="https://drive.google.com/drive/my-drive" rel="external nofollow">واجهة جوجل درايف</a> عن طريق النقر على زر "+ جديد" أعلى يمين النافذة، ثم النقر على "جداول بيانات Google"، ويؤدي هذا الإجراء إلى إنشاء وفتح جدول البيانات الجديد، وحفظه في مجلد Drive الخاص بك.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101955" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea3923bdf_001-1.png.339923f29ca0f99810838f6b6873972a.png" rel=""><img alt="001 - العمل مع البيانات 1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101955" data-unique="ojss0im2h" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea3923bdf_001-1.png.339923f29ca0f99810838f6b6873972a.png" style="width: 260px; height: auto;"></a>
</p>

<p>
	ثانيًا، انقر على عنوان جدول البيانات وغيره من "جدول بيانات بدون عنوان" إلى "معالجة البيانات والقوائم المخصصة"، يجب أن تبدو الورقة الخاصة بك كما يلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101956" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea39df48c_002-2.png.e70bb61ce5e0bb9e696f7376887e3ded.png" rel=""><img alt="002 - العمل مع البيانات 2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101956" data-unique="i7yhy8dw5" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea39df48c_002-2.png.e70bb61ce5e0bb9e696f7376887e3ded.png" style="width: 600px; height: auto;"></a>
</p>

<p>
	ثالثًا، افتح محرر النصوص البرمجية لـ Apps Script بالنقر على "الإضافات" ثم اختيار "محرر تطبيقات جوجل". رابعًا، انقر على عنوان مشروع برمجة التطبيقات وغيره من "مشروع بلا عنوان" إلى "Data Manipulation and Custom Menus"، ثم انقر على زر "إعادة تسمية" لحفظ تغيير العنوان.
</p>

<p>
	الآن بحصولك على جدول بيانات ومشروع Apps Script فارغين فأنت على استعداد لبدء المقال، انتقل إلى القسم التالي من هذا المقال للبدء في التعرف على القوائم المخصصة.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>ملاحظة</strong>: من خلال هذا المقالات قد تحصل على العديد من مطالبات الأذونات، فإذا ظهر لك مربع حوار "لم يتم التحقق من هذا التطبيق" عند استخدام الشيفرة البرمجية لأول مرة، فيمكنك اتباع الخطوات التي وردت في المقالين السابقين لإعطاء الإذن للماكرو لكي يعمل.
		</p>
	</div>
</blockquote>

<h2>
	نظرة عامة: استيراد البيانات باستخدام عنصر قائمة مخصص
</h2>

<p>
	يمنحك Apps Script القدرة على تعيين القوائم المخصصة التي يمكن أن تظهر في جداول بيانات جوجل، ويمكنك أيضًا استخدام القوائم المخصصة في "مستندات جوجل"، و "العروض التقديمية من جوجل" و "نماذج جوجل"، وعند تحديد عنصر قائمة مخصص تنشىء لها تسمية نصية وتربطها بدالة Apps Script في مشروع النص البرمجي الخاص بك، ويمكنك بعد ذلك إضافة القائمة المخصصة إلى <a href="https://academy.hsoub.com/design/user-interface/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D9%87%D9%8A%D8%A6%D8%A9-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-ui-r652/" rel="">واجهة المستخدم</a> لكي تظهر في جداول بيانات جوجل.
</p>

<p>
	وعندما ينقر المستخدم على عنصر قائمة مخصص تعمل دالة Apps Script التي ربطتها بهذا العنصر على تنفيذ الشيفرة البرمجية الموجودة داخل هذه الدالة،و هذه طريقة سريعة لتشغيل دوال Apps Script دون الحاجة إلى فتح محرر الشيفرة البرمجية، كما يسمح لمستخدمي جدول البيانات الآخرين بتنفيذ الشيفرات البرمجية الخاصة بك دون الحاجة إلى معرفة أي شيء عن كيفية عمل القائمة المخصصة أو كيفية عمل Apps Script، فبالنسبة لهم هو مجرد عنصر قائمة آخر.
</p>

<p>
	ويتم تعيين عناصر القائمة المخصصة في دالة التشغيل البسيطة <code>()onOpen</code> والتي ستتعرف عليها في القسم التالي.
</p>

<h2>
	الدالة ()onOpen
</h2>

<p>
	توفر المشغلات البسيطة في Apps Script طريقة لتشغيل شيفرة Apps Script معينة استجابةً لظروف أو أحداث معينة، وعند إنشاء مشغل فإنك تحدد الحدث الذي يتسبب في إطلاق هذا المشغل وتوفر له دالة Apps Script التي يتم تشغيلها لهذا الحدث.
</p>

<p>
	فالدالة <code>()onOpen</code> مثال على مشغل بسيط من السهل إعداده، كل ما عليك فعله هو كتابة دالة في Apps Script باسم <code>()onOpen</code> ليعمل Apps Script على تشغيلها في كل مرة تفتح فيها أو تُعيد تحميل جدول البيانات المرتبط بهذه الدالة:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2039_21" style="">
<span class="com">/**
دالة خاصة يتم تشغيلها عند فتح جدول البيانات لأول مرة أو إعادة تحميله *
تُستخدم ()onOpen لإضافة عناصر قائمة مخصصة إلى جدول البيانات *
*/</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> onOpen</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
 </span><span class="com">/* ... */</span><span class="pln"> 
</span><span class="pun">}</span></pre>

<h3>
	التطبيق
</h3>

<p>
	دعنا نبدأ في إنشاء قائمة مخصصة، استبدل الشيفرة البرمجية في مشروع Apps Script الذي أسميناه "Data Manipulation and Custom Menus" بما يلي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2039_23" style="">
<span class="com">/**
دالة خاصة يتم تشغيلها عند فتح جدول البيانات لأول مرة أو إعادة تحميله *
تُستخدم ()onOpen لإضافة عناصر قائمة مخصصة إلى جدول البيانات *
*/</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> onOpen</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> ui </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getUi</span><span class="pun">();</span><span class="pln">
  ui</span><span class="pun">.</span><span class="pln">createMenu</span><span class="pun">(</span><span class="str">'قائمة الكتب'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="str">'تحميل قائمة الكتب'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'loadBookList'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addToUi</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	احفظ مشروع نصك البرمجي.
</p>

<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	دعنا نراجع هذه الشيفرة البرمجية لفهم كيفية عمل الدالة <code>()onOpen</code>.
</p>

<p>
	يستخدم السطر الأول التابع<code>()getUi</code> للحصول على كائن "Ui" يمثل واجهة المستخدم لجدول البيانات النشط الذي يرتبط به هذا النص البرمجي أو السكربت.
</p>

<p>
	تعمل الأسطر الثلاثة التالية على إنشاء قائمة مخصصة باسم "قائمة الكتب" ثم إضافة عنصر داخل هذه القائمة باسم "تحميل قائمة الكتب"، ثم إضافة هذه القائمة المخصصة إلى واجهة جدول البيانات، ونفذنا ذلك باستخدام ثلاث توابع متتالية على النحو التالي:
</p>

<ul>
<li>
		أولاً: التابع <code>()createMenu</code> والذي يأخذ معامل واحد فقط وهو "اسم القائمة المخصصة".
	</li>
	<li>
		ثانيًا: التابع <code>()addItem</code> والذي يأخذ معاملين، الأول "اسم العنصر داخل القائمة المخصصة"، والثاني "اسم الدالة بالإنجليزية".
	</li>
	<li>
		ثالثًا: التابع <code>()addToUi</code> وهو لا يأخذ أي معاملات.
	</li>
</ul>
<p>
	ينشئ التابع <code>()addItem</code> اتصالًا بين تسمية العنصر الموجود داخل القائمة المخصصة (تحميل قائمة الكتب) ودالة Apps Script المرتبطة بهذا العنصر <code>loadBookList</code> (التي لم نوفرها بعد) لتشغيلها.
</p>

<h3>
	النتائج
</h3>

<ol>
<li>
		من محرر Apps Script انقر على زر "تنفيذ" لتشغيل هذه الدالة لترى هل ستعمل أم لا.
	</li>
	<li>
		اذهب إلى جداول بيانات جوجل ثم أعد تحميل جدول البيانات.
	</li>
	<li>
		أعد فتح محرر النص البرمجي مرة أخرى.
	</li>
	<li>
		بعد إعادة تحميل جدول البيانات، يجب أن تظهر لك قائمة جديدة باسم "قائمة الكتب" في شريط القوائم.
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101957" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea3ac91ee_003-3.png.dfc03ffe6be22fbb025997b022c3f066.png" rel=""><img alt="003 - العمل مع البيانات 3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101957" data-unique="vw9l0ib0c" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea3b6d0c5_003-3.thumb.png.a7365de3f20000eba8688e76627b7bb0.png" style="width: 550px; height: auto;"></a>
</p>

<ol start="5">
<li>
		من خلال النقر على "قائمة الكتب"، يمكنك رؤية القائمة الفرعية "تحميل قائمة الكتب".
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101958" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea3d16fd3_004-4.png.1d8ccd42bba58180ac67823c23f2d4af.png" rel=""><img alt="004 - العمل مع البيانات 4.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101958" data-unique="52ia8djyf" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea403f16e_004-4.thumb.png.94b0b42974968cb16f5495f89fcdf07c.png" style="width: 550px; height: auto;"></a>
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: يؤدي إعادة تحميل جدول البيانات عادةً إلى إغلاق علامة التبويب الخاصة بمحرر النص البرمجي.
		</p>
	</div>
</blockquote>

<p>
	في القسم التالي من هذا المقال سوف ننشىء الشيفرة البرمجية للدالة <code>()loadBookList</code> التي تقدم طريقة واحدة يمكنك من خلالها التفاعل مع البيانات في Apps Script، وهي: قراءة البيانات من جداول البيانات الأخرى.
</p>

<h2>
	استيراد بيانات جدول البيانات
</h2>

<p>
	الآن بعد أن أنشأت قائمة مخصصة، يمكنك إنشاء دوال يمكن تشغيلها من خلال النقر فوق عنصر القائمة المخصصة، لكن في الوقت الحالي تحتوي القائمة المخصصة التي أنشأناها "قائمة الكتب" على عنصر قائمة واحد "تحميل قائمة الكتب" والدالة <code>()loadBookList</code> التي من المفترض أن تعمل عند تحديد عنصر القائمة المخصصة تحميل قائمة الكتب غير موجودة في الشيفرة البرمجية الخاص بك، لذلك عند النقر عليها لفتحها سوف يؤدي هذا الإجراء إلى حدوث خطأ.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101959" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea435d8dc_005-5.png.9a049db7125f16a9b51a9d154f730091.png" rel=""><img alt="005 - العمل مع البيانات 5.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101959" data-unique="z458oqeuw" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea4543124_005-5.thumb.png.79aced7158d235bfe2ea391e69b9d188.png" style="width: 700px; height: auto;"></a>
</p>

<p>
	ويمكنك إصلاح هذا الخطأ عن طريق كتابة الشيفرة البرمجية للدالة <code>()loadBookList</code>.
</p>

<h3>
	التطبيق
</h3>

<p>
	الآن أنت في حاجة إلى أن يملأ عنصر القائمة الجديد جدول البيانات الحالي ببيانات لتتمكن من العمل معها، لذلك يجب عليك توفير الشيفرة البرمجية للدالة <code>()loadBookList</code> لتتمكن من تنفيذ قراءة بيانات الكتب من جدول بيانات آخر، ثم نسخها في هذا الجدول، افتح المشروع الذي أنشأناه في Apps Script باسم "Data Manipulation and Custom Menus"، ثم أضف الشيفرة البرمجية التالية بعد الدالة <code>()onOpen</code>:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2039_28" style="">
<span class="com">/** 
 دالة خاصة يتم تشغيلها عند الضغط على القائمة المخصصة "تحميل الكتب" *
 تنشئ قائمة كتب نموذجية مقدمة من فهرس مكتبة وفرناها لك *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> loadBookList</span><span class="pun">(){</span><span class="pln">
  </span><span class="pun">هذا</span><span class="pln"> </span><span class="pun">السطر</span><span class="pln"> </span><span class="pun">يجلب</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">النشطة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> sheet </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSheet</span><span class="pun">();</span><span class="pln">

</span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="pun">جدول</span><span class="pln"> </span><span class="pun">بيانات</span><span class="pln"> </span><span class="pun">مختلف</span><span class="pln"> </span><span class="pun">من</span><span class="pln"> </span><span class="typ">Google</span><span class="pln"> </span><span class="typ">Drive</span><span class="pln"> </span><span class="com">//</span><span class="pln">
 </span><span class="pun">باستخدام</span><span class="pln"> </span><span class="pun">معرف</span><span class="pln"> </span><span class="pun">جدول</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="com">// </span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> bookSS </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">openById</span><span class="pun">(</span><span class="pln">
    </span><span class="str">"spreadsheet-id"</span><span class="pln"> 
  </span><span class="pun">);</span><span class="pln">

 </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">ونطاق</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">وقيم</span><span class="pln"> </span><span class="pun">جدول</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">المخزنة</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">المتغير</span><span class="pln"> bookSS </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> bookSheet </span><span class="pun">=</span><span class="pln"> bookSS</span><span class="pun">.</span><span class="pln">getSheetByName</span><span class="pun">(</span><span class="str">"فهرس المكتبة"</span><span class="pun">);</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> bookRange </span><span class="pun">=</span><span class="pln"> bookSheet</span><span class="pun">.</span><span class="pln">getDataRange</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> bookListValues </span><span class="pun">=</span><span class="pln"> bookRange</span><span class="pun">.</span><span class="pln">getValues</span><span class="pun">();</span><span class="pln">

  </span><span class="pun">إضافة</span><span class="pln"> </span><span class="pun">هذه</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">النشطة</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">جدول</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">الحالي</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">سوف</span><span class="pln"> </span><span class="pun">يؤدي</span><span class="pln"> </span><span class="pun">هذا</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">الكتابة</span><span class="pln"> </span><span class="pun">فوق</span><span class="pln"> </span><span class="pun">أية</span><span class="pln"> </span><span class="pun">قيم</span><span class="pln"> </span><span class="pun">موجودة</span><span class="pln"> </span><span class="pun">بالفعل</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  sheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> bookRange</span><span class="pun">.</span><span class="pln">getHeight</span><span class="pun">(),</span><span class="pln"> bookRange</span><span class="pun">.</span><span class="pln">getWidth</span><span class="pun">())</span><span class="pln"> 
    </span><span class="pun">.</span><span class="pln">setValues</span><span class="pun">(</span><span class="pln">bookListValues</span><span class="pun">);</span><span class="pln">

  </span><span class="pun">إعادة</span><span class="pln"> </span><span class="pun">تسمية</span><span class="pln"> </span><span class="pun">الورقة</span><span class="pln"> </span><span class="pun">الوجهة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">وتغيير</span><span class="pln"> </span><span class="pun">حجم</span><span class="pln"> </span><span class="pun">أعمدة</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">لتسهيل</span><span class="pln"> </span><span class="pun">القراءة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  sheet</span><span class="pun">.</span><span class="pln">setName</span><span class="pun">(</span><span class="str">"قائمة الكتب"</span><span class="pun">);</span><span class="pln">
  sheet</span><span class="pun">.</span><span class="pln">autoResizeColumns</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	احفظ مشروع النص البرمجي الخاص بك.
</p>

<p>
	انتبه إلى تبديل قيمة <code>spreadsheet-id</code> الذي يأخذه التابع <code>openById()‎</code> بمعرّف جدول البيانات المرفق "فهرس المكتبة" بعد رفعه على حسابك بجوجل درايف، وقد شرحنا في المقال الثاني من هذه السلسلة كيفية جلب هذا المعرِّف.
</p>

<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	إذًا كيف تعمل هذه الدالة؟ تستخدم الدالة <code>()loadBookList</code> توابع من أصناف <code>Spreadsheet</code> و <code>Sheet</code> و <code>Range</code> التي تعرفنا عليها في المقال السابق، فمع وضع هذه المفاهيم في الاعتبار يمكنك تقسيم الشيفرة البرمجية للدالة <code>()loadBookList</code> إلى الأقسام الأربعة التالية:
</p>

<h4>
	1. تحديد الورقة الوجهة
</h4>

<p>
	يُستخدم السطر الأول <code>()SpreadsheetApp.getActiveSheet</code> للحصول على مرجع إلى كائن الورقة الحالية، ثم تخزينه في المتغير <code>sheet</code>، وهذه هي الورقة التي سيتم نسخ البيانات إليها.
</p>

<h4>
	2. تحديد مصدر البيانات
</h4>

<p>
	تحدد الأسطر القليلة التالية أربعة متغيرات تشير إلى بيانات المصدر التي سوف تقوم باستردادها: يخزن المتغير <code>bookSS</code> مرجعًا لجدول البيانات الذي تقرأ الشيفرة البرمجية البيانات منه، فتعثر الشيفرة البرمجية على جدول البيانات من خلال مُعرف جدول البيانات الخاص به، وفي هذا المثال قدمنا مُعرف جدول بيانات للقراءة منه، وفتحنا جدول البيانات من خلال استخدام التابع <code>(SpreadsheetApp.openById(id</code>.
</p>

<p>
	يخزن المتغير <code>bookSheet</code> مرجعًا إلى ورقة داخل المتغير <code>bookSS</code> تحتوي على البيانات التي تريدها، وتحدد الشيفرة البرمجية الورقة المراد قراءتها من خلال اسمها، وهو في مثالنا "فهرس المكتبة".
</p>

<p>
	يخزن المتغير <code>bookRange</code> مرجعًا لمجموعة من البيانات في المتغير <code>bookSheet</code>، ويعمل التابع <code>()Sheet.getDataRange</code> على إرجاع النطاق الذي يحتوي على جميع الخلايا غير الفارغة في الورقة، إنها طريقة سهلة للتأكد من حصولك على نطاق يغطي جميع البيانات في ورقة دون تضمين صفوف وأعمدة فارغة.
</p>

<p>
	المتغير <code>bookListValues</code> عبارة عن مصفوفة ثنائية تحتوي على جميع القيم المأخوذة من الخلايا الموجودة في المتغير <code>bookRange</code>، وينشئ التابع <code>()Range.getValues</code> هذه المصفوفة بقراءة البيانات من الورقة المصدر.
</p>

<h4>
	3. نسخ البيانات من المصدر إلى الوجهة
</h4>

<p>
	ينسخ القسم التالي من الشيفرة البرمجية بيانات المتغير <code>bookListValues</code> في الورقة، ثم يعيد تسمية الورقة أيضًا.
</p>

<p>
	يُستخدم التابع <code>()Sheet.getRange</code> وهو يأخذ أربع معاملات لتحديد مكان نسخ البيانات في الورقة وهم: الأول "صف البداية" والثاني "عمود البداية" والثالث "عدد الصفوف" والرابع "عدد الأعمدة".
</p>

<p>
	يُستخدم التابعان <code>()Range.getHeight</code> و <code>()Range.getWidth</code> لقياس حجم البيانات وتحديد نطاق الوجهة بنفس الأبعاد.
</p>

<p>
	يعمل التابع <code>()Range.setValues</code> على نسخ قيم المصفوفة الثنائية الخاصة بالمتغير <code>bookListValues</code> في النطاق الوجهة، مما يؤدي إلى الكتابة فوق أي بيانات موجودة بالفعل.
</p>

<h4>
	4. تنسيق الورقة الوجهة
</h4>

<p>
	يُستخدم التابع <code>()Sheet.setName</code> لتغيير اسم الورقة الوجهة، ونفعل ذلك بكتابة الاسم الذي نريده كمعامل للتابع، وفي مثالنا غيرنا الاسم إلى "قائمة الكتب".
</p>

<p>
	ويستخدم السطر الأخير التابع <code>()Sheet.autoResizeColumns</code> الذي يأخذ معاملين، الأول "عمود البداية" والثاني "عدد الأعمدة"، وذلك لتغيير حجم الأعمدة الثلاثة الأولى في ورقة الوجهة، مما يتيح لك قراءة البيانات الجديدة بسهولة أكبر.
</p>

<h3>
	النتائج
</h3>

<ol>
<li>
		اذهب إلى جداول بيانات جوجل الذي نتدرب عليه "معالجة البيانات والقوائم المخصصة" ثم أعد تحميل جدول البيانات.
	</li>
	<li>
		أعد فتح محرر النص البرمجي مرةً أخرى.
	</li>
	<li>
		بعد إعادة تحميل جدول البيانات، انقر على القائمة "قائمة الكتب" في شريط القوائم، ثم اختر منها القائمة الفرعية "تحميل قائمة الكتب".
	</li>
	<li>
		سوف تعمل الدالة <code>()loadBookList</code> على جلب البيانات بنجاح.
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101960" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea4b40a92_006-6.gif.c725e64b62375ca92afea832d51ba7d0.gif" rel=""><img alt="006 - العمل مع البيانات 6.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="101960" data-unique="9pxntuq5i" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea4b40a92_006-6.gif.c725e64b62375ca92afea832d51ba7d0.gif" style="width: 750px; height: auto;"></a>
</p>

<p>
	تهانينا، أصبح لديك الآن ورقة بها قائمة بعناوين الكتب والمؤلفين ودور النشر، في القسم التالي من هذا المقال ستتعلم كيفية تعديل البيانات وتحديثها في "قائمة الكتاب" هذه باستخدام معالجة السلاسل النصية والقوائم المخصصة.
</p>

<h2>
	نظرة عامة: ترتيب البيانات داخل جدول البيانات
</h2>

<p>
	لديك الآن معلومات الكتاب في الورقة الخاصة بك، فيشير كل صف إلى كتاب معين، ويسرد عنوانه ومؤلفه ودار النشر التي نشرته في أعمدة منفصلة، ومع ذلك يمكنك أيضًا رؤية بعض المشكلات في هذه البيانات الأولية كالتالي:
</p>

<ol>
<li>
		بالنسبة لبعض الصفوف وضع عنوان الكتاب والمؤلف معًا في عمود "اسم الكتاب" مرتبطين إما بفاصلة أو سلسلة نصية "تأليف".
	</li>
	<li>
		تفتقد بعض الصفوف إلى عنوان الكتاب أو مؤلفه.
	</li>
</ol>
<p>
	في الأقسام التالية من هذا المقال سوف نعمل على تصحيح هذه المشكلات عن طريق ترتيب البيانات، فسوف نعمل أولاً على إنشاء دوال تقرأ عمود العنوان ثم تقسم النص عند العثور على فاصلة أو كلمة "تأليف"، ثم وضع العنوان واسم المؤلف في الأعمدة الصحيحة.
</p>

<p>
	وثانيًا سنكتب شيفرة برمجية تبحث تلقائيًا عن معلومات الكتاب المفقودة باستخدام واجهة برمجة تطبيقات خارجية <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>، لتضيف هذه المعلومات إلى جدولك.
</p>

<h2>
	إضافة عناصر القائمة
</h2>

<p>
	أنت في حاجة إلى إنشاء ثلاثة عناصر قائمة للتحكم في عمليات ترتيب البيانات التي سوف تنفذها.
</p>

<h3>
	التطبيق
</h3>

<p>
	دعنا نحدث الدالة <code>()onOpen</code> لتضمين العناصر الإضافية التي ستحتاجها إلى القائمة المخصصة "قائمة الكتب"، فقط اتبع الخطوات التالية:
</p>

<p>
	أولًا، في مشروع Apps Script الذي باسم "Data Manipulation and Custom Menus" حدث الشيفرة البرمجية للدالة <code>()onOpen</code> لتصبح مطابقة لما يلي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2039_31" style="">
<span class="com">/**
دالة خاصة يتم تشغيلها عند فتح جدول البيانات لأول مرة أو إعادة تحميله *
تُستخدم ()onOpen لإضافة عناصر قائمة مخصصة إلى جدول البيانات *
*/</span><span class="pln">

</span><span class="kwd">function</span><span class="pln"> onOpen</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> ui </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getUi</span><span class="pun">();</span><span class="pln">
  ui</span><span class="pun">.</span><span class="pln">createMenu</span><span class="pun">(</span><span class="str">'قائمة الكتب'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="str">'تحميل قائمة الكتب'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'loadBookList'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addSeparator</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="pln">
      </span><span class="str">'افصل العنوان عن المؤلف عند أول فاصلة'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'splitAtFirstComma'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="pln">
      </span><span class="str">'افصل العنوان عن المؤلف عند كلمة "تأليف"'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'splitAtLastBy'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addSeparator</span><span class="pun">()</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addItem</span><span class="pun">(</span><span class="pln">
      </span><span class="str">'ملء الخلايا الفارغة بالعنوان والمؤلف'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'fillInTheBlanks'</span><span class="pun">)</span><span class="pln">
    </span><span class="pun">.</span><span class="pln">addToUi</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	احفظ مشروع نصك البرمجي.
</p>

<p>
	ثانيًا، في محرر النص البرمجي Apps Script حدد اسم الدالة "onOpen" من قائمة الدوال، ثم انقر على زر "Run"، سوف يعمل هذا الإجراء على تشغيل الدالة <code>()onOpen</code> لإعادة إنشاء قائمة جدول البيانات، وذلك حتى لا تضطر إلى إعادة تحميل جدول البيانات.
</p>

<p>
	في هذه الشيفرة البرمجية الجديدة تنشئ التابع <code>()Menu.addSeparator</code> لعمل فاصل أفقي في القائمة المخصصة للحفاظ على مجموعات عناصر القائمة ذات الصلة منظمة، ثم إضافة عناصر القائمة الجديدة تحتها.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: تظهر عناصر القائمة المخصصة في شريط قوائم جدول البيانات بنفس الترتيب الذي تضيفه في الشيفرة البرمجية للدالة <code>()onOpen</code>.
		</p>
	</div>
</blockquote>

<h3>
	النتائج
</h3>

<p>
	اذهب إلى جداول بيانات جوجل الذي نتدرب عليه "معالجة البيانات والقوائم المخصصة"، ثم انقر على القائمة المخصصة "قائمة الكتب" من شريط القوائم لعرض عناصر القائمة المخصصة الجديدة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101961" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea4e02811_007-7.png.8a7aefb660f2c1d85ec2b52a9453da35.png" rel=""><img alt="007 - العمل مع البيانات 7.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101961" data-unique="ekwg18b1l" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea502ab6f_007-7.thumb.png.c10cf27f21eb737e12d4ad7aa6f834f4.png" style="width: 600px; height: auto;"></a>
</p>

<p>
	يؤدي النقر على هذه العناصر الجديدة إلى حدوث خطأ نظرًا لأنك لم تنشئ دوالها المقابلة، لذلك دعنا نفعل ذلك في القسم التالي.
</p>

<h2>
	تقسيم النص على محدد الفاصلة
</h2>

<p>
	تحتوي مجموعة البيانات التي جلبتها في جدول البيانات على بضع خلايا دُمج فيها المؤلف والعنوان بطريقة غير صحيحة في خلية واحدة باستخدام فاصلة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101962" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea522f724_008-8.png.88c94148d2b3693717f2acd5ac8a882d.png" rel=""><img alt="008 - العمل مع البيانات 8.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101962" data-unique="n75qvqd49" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea522f724_008-8.png.88c94148d2b3693717f2acd5ac8a882d.png" style="width: 550px; height: auto;"></a>
</p>

<p>
	يُعد تقسيم السلاسل النصية إلى أعمدة منفصلة مهمة شائعة في جدول البيانات، وتوفر جداول بيانات جوجل الدالة <code>()SPLIT</code> التي تقسم السلاسل النصية إلى أعمدة، ومع ذلك غالبًا ما تواجه مجموعات البيانات مشكلات لا يمكن حلها بسهولة باستخدام الدوال المضمنة في جداول البيانات، وفي مثل هذه الحالات يمكنك كتابة شيفرة برمجية في Apps Script لتنفيذ العمليات المعقدة اللازمة لتنظيم بياناتك.
</p>

<p>
	ابدأ في تنظيم بياناتك عن طريق تنفيذ الدالة التي تسمى <code>()splitAtFirstComma</code>، فهي تفصل بين المؤلف والعنوان ثم تضعهم في خلايا كل منهما عند العثور على الفاصلة.
</p>

<p>
	ويجب أن تتخذ الدالة <code>()splitAtFirstComma</code> الخطوات التالية:
</p>

<ol>
<li>
		الحصول على النطاق الذي يمثل الخلايا المحددة حاليًا.
	</li>
	<li>
		التحقق مما إذا كانت الخلايا الموجودة في النطاق تحتوي على فاصلة أم لا.
	</li>
	<li>
		عند العثور على الفاصلات تُقسم الدالة السلسلة النصية إلى سلسلتين فرعيتين فقط في موقع الفاصلة الأولى هكذا: [العنوان]، [المؤلف] في حالتنا.
	</li>
	<li>
		تعيين السلاسل الفرعية كمحتويات جديدة لخلية العنوان وخلية المؤلف.
	</li>
</ol>
<h3>
	التطبيق
</h3>

<p>
	لتنفيذ هذه الخطوات لن تكتفي باستخدام نفس التوابع التي استخدمتها من قبل، ولكنك ستحتاج أيضًا إلى استخدام JavaScript لمعالجة بيانات السلسلة النصية، فقط أضف في محرر Apps Script الدالة التالية إلى نهاية مشروع النص البرمجي:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2039_38" style="">
<span class="com">/**
 دالة خاصة يتم تشغيلها عند الضغط على القائمة المخصصة "افصل العنوان عن المؤلف عند أول فاصلة" *
 عن طريق تقسيم عمود العنوان عند الفاصلة الأولى إن وجدت *
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> splitAtFirstComma</span><span class="pun">(){</span><span class="pln">
  </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">النطاق</span><span class="pln"> </span><span class="pun">النشط</span><span class="pln"> </span><span class="pun">(المحدد</span><span class="pln"> </span><span class="pun">حاليًا)</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> activeRange </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveRange</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> titleAuthorRange </span><span class="pun">=</span><span class="pln"> activeRange</span><span class="pun">.</span><span class="pln">offset</span><span class="pun">(</span><span class="pln">
    </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> activeRange</span><span class="pun">.</span><span class="pln">getHeight</span><span class="pun">(),</span><span class="pln"> activeRange</span><span class="pun">.</span><span class="pln">getWidth</span><span class="pun">()</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">

 </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">الحالية</span><span class="pln"> </span><span class="pun">لخلايا</span><span class="pln"> </span><span class="pun">عمود</span><span class="pln"> </span><span class="pun">العنوان</span><span class="pln"> </span><span class="pun">المحدد</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">هذه</span><span class="pln"> </span><span class="pun">مصفوفة</span><span class="pln"> </span><span class="pun">ثنائية</span><span class="pln"> </span><span class="pun">الاتجاه</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> titleAuthorValues </span><span class="pun">=</span><span class="pln"> titleAuthorRange</span><span class="pun">.</span><span class="pln">getValues</span><span class="pun">();</span><span class="pln">

  </span><span class="pun">تحديث</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">حيث</span><span class="pln"> </span><span class="pun">توجد</span><span class="pln"> </span><span class="pun">الفواصل</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">يفترض</span><span class="pln"> </span><span class="pun">أن</span><span class="pln"> </span><span class="pun">وجود</span><span class="pln"> </span><span class="pun">الفاصلة</span><span class="pln"> </span><span class="pun">يشير</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">نمط</span><span class="pln"> </span><span class="str">"العنوان، الفاصلة، المؤلف"</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> row </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> row </span><span class="pun">&lt;</span><span class="pln"> titleAuthorValues</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> row</span><span class="pun">++){</span><span class="pln">
    </span><span class="kwd">var</span><span class="pln"> indexOfFirstComma </span><span class="pun">=</span><span class="pln">
        titleAuthorValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="lit">0</span><span class="pun">].</span><span class="pln">indexOf</span><span class="pun">(</span><span class="str">"، "</span><span class="pun">);</span><span class="pln">

    </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">indexOfFirstComma </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">){</span><span class="pln">
      </span><span class="pun">في</span><span class="pln"> </span><span class="pun">حالة</span><span class="pln"> </span><span class="pun">العثور</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">فاصلة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      </span><span class="pun">يتم</span><span class="pln"> </span><span class="pun">تقسيم</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">وتحديثها</span><span class="pln"> </span><span class="pun">بالمصفوفة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      </span><span class="kwd">var</span><span class="pln"> titlesAndAuthors </span><span class="pun">=</span><span class="pln"> titleAuthorValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="lit">0</span><span class="pun">];</span><span class="pln">

      </span><span class="pun">تحديث</span><span class="pln"> </span><span class="pun">قيمة</span><span class="pln"> </span><span class="pun">العنوان</span><span class="pln"> </span><span class="pun">بالمصفوفة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      titleAuthorValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln">
        titlesAndAuthors</span><span class="pun">.</span><span class="pln">slice</span><span class="pun">(</span><span class="pln">indexOfFirstComma </span><span class="pun">+</span><span class="pln"> </span><span class="lit">2</span><span class="pun">);</span><span class="pln">

      </span><span class="pun">تحديث</span><span class="pln"> </span><span class="pun">قيمة</span><span class="pln"> </span><span class="pun">المؤلف</span><span class="pln"> </span><span class="pun">بالمصفوفة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      titleAuthorValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln">
        titlesAndAuthors</span><span class="pun">.</span><span class="pln">slice</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> indexOfFirstComma</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

 </span><span class="pun">وضع</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">المحدثة</span><span class="pln"> </span><span class="pun">مرة</span><span class="pln"> </span><span class="pun">أخرى</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">جدول</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  titleAuthorRange</span><span class="pun">.</span><span class="pln">setValues</span><span class="pun">(</span><span class="pln">titleAuthorValues</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	احفظ بعدها مشروع النص البرمجي الخاص بك.
</p>

<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	دعنا نراجع الشيفرة البرمجية الجديدة التي تتكون من ثلاثة أقسام رئيسية:
</p>

<h4>
	1. استرجاع قيم العنوان المميزة
</h4>

<p>
	تحدد الأسطر الثلاثة الأولى ثلاثة متغيرات تشير إلى البيانات الحالية في الورقة: يمثل المتغير <code>activeRange</code> النطاق الذي حدده المستخدم حاليًا عند استدعاء الدالة <code>()splitAtFirstComma</code>.
</p>

<p>
	يمثل المتغير <code>titleAuthorRange</code> نطاقًا جديدًا يغطي نفس الخلايا مثل المتغير <code>activeRange</code>، ولكنه يتضمن أيضًا عمودًا إضافيًا إلى اليسار، وتحتاج الشيفرة البرمجية إلى هذا النطاق الموسع لأنه يحتاج إلى مكان لوضع المؤلف الذي يعثر عليه في عمود العنوان.
</p>

<p>
	يمثل المتغير <code>titleAuthorValues</code> مصفوفة ثنائية من البيانات المستخرجة من المتغير <code>titleAuthorRange</code> باستخدام التابع <code>()Range.getValues</code>.
</p>

<h4>
	2. فحص كل عنوان وتقسيم النص عند أول فاصلة يُعثر عليها
</h4>

<p>
	يفحص القسم التالي القيم الموجودة في المتغير <code>titleAuthorValues</code> للعثور على الفواصل، ولتنفيذ ذلك يستخدم حلقة التكرار <code>For</code> <a href="https://academy.hsoub.com/programming/javascript/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-javascript-r664/" rel="">بلغة البرمجة JavaScript</a> لفحص كل القيم في العمود الأول من المتغير <code>titleAuthorValues</code>، وعندما يعثر على سلسلة فرعية فاصلة (" ،") باستخدام التابع <code>()indexOf</code> من لغة JavaScript، تعمل الشيفرة البرمجية على تنفيذ ما يلي:
</p>

<ol>
<li>
		نسخ قيمة السلسلة النصية للخلية إلى المتغير <code>titleAndAuthors</code>.
	</li>
	<li>
		تحديد موقع الفاصلة باستخدام التابع <code>()indexOf</code> من لغة JavaScript.
	</li>
	<li>
		استدعاء التابع <code>()slice</code> من لغة JavaScript مرتين للحصول على السلسلة الفرعية قبل الفاصلة المحدِّد والسلسلة الفرعية بعد الفاصلة المحدِّد.
	</li>
	<li>
		تُنسخ السلاسل الفرعية مرة أخرى إلى المصفوفة الثنائية داخل المتغير <code>titleAuthorValues</code>، ثم الكتابة فوق القيم الموجودة في هذا الموضع.
	</li>
</ol>
<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: عندما لا تعثر الشيفرة البرمجية على فاصلة، فإنها تترك البيانات الموجودة في الصف دون تغيير.
		</p>
	</div>
</blockquote>

<h4>
	3. نسخ القيم الجديدة مرة أخرى إلى الورقة
</h4>

<p>
	بمجرد فحص جميع قيم خلية العنوان تنسخ المصفوفة المحدثة <code>titleAuthorValues</code> مرة أخرى إلى جدول البيانات باستخدام التابع <code>()Range.setValues</code>.
</p>

<h3>
	النتائج
</h3>

<p>
	يمكنك الآن رؤية تأثيرات الدالة <code>()splitAtFirstComma</code>وهي تعمل، فقط حدد أحد الخلايا التي يوجد بها عنوان الكتاب واسم المؤلف مفصول بينهما بفاصلة، ثم اذهب إلى القائمة المخصصة "قائمة الكتب" واختر منها القائمة الفرعية "افصل العنوان عن المؤلف عند أول فاصلة" ومن المفترض أن تكون النتيجة لديك كما في الصورة التالية: تحديد خلية واحدة
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101963" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea53de5c3_009-9.gif.ed90e14dc01dda3e5813e5d80fd88271.gif" rel=""><img alt="009 - العمل مع البيانات 9.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="101963" data-unique="6v67otjgp" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea53de5c3_009-9.gif.ed90e14dc01dda3e5813e5d80fd88271.gif" style="width: 750px; height: auto;"></a>
</p>

<p>
	تحديد عدة خلايا:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101964" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea5653364_010-10.gif.01104de40ed431d1bbfde67b1459d427.gif" rel=""><img alt="010 - العمل مع البيانات 10.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="101964" data-unique="9grggy5wq" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea5653364_010-10.gif.01104de40ed431d1bbfde67b1459d427.gif" style="width: 750px; height: auto;"></a>
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: بدلًا من استخدام هذه الدالة مع خلية منفردة أو عدة خلايا، يمكنك استخدامها مع العمود بالكامل مرة واحدة لتوفير الوقت والمجهود.
		</p>
	</div>
</blockquote>

<p>
	تهانينا، لقد أنشأت الآن دالة في Apps Script تعالج البيانات في جداول البيانات، في القسم التالي سنعمل على تنفيذ دالة التقسيم الثانية.
</p>

<h2>
	تقسيم النص على المحدد "تأليف"
</h2>

<p>
	بالنظر إلى البيانات الأصلية بالجدول، يمكنك رؤية مشكلة أخرى في هذه البيانات وهي اجتماع عنوان الكتاب واسم المؤلف في نفس الخلية ويفصل بينهما كملة "تأليف" هكذا: [العنوان] تأليف [المؤلف].
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101965" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea57176a0_011-11.png.6413bcc8a468ff44f98faa0183c90fd2.png" rel=""><img alt="011 - العمل مع البيانات 11.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101965" data-unique="ysswd03rw" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6ea5a73717_011-11.thumb.png.635a9a86250c4ae3f8f93eea1447fc74.png" style="width: 550px; height: auto;"></a>
</p>

<h3>
	التطبيق
</h3>

<p>
	يمكنك حل هذه المشكلة باستخدام نفس الأسلوب الذي انتهجته في القسم السابق من هذا المقال، فالدالة <code>()splitAtLastBy</code> لها وظيفة مماثلة للدالة <code>()splitAtFirstComma</code> الاختلاف الحقيقي الوحيد هو أنها تبحث عن نمط نص مختلف، فقط نفذ هذه الدالة من خلال إضافة ما يلي في نهاية مشروع النص البرمجي في محرر Apps Script:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_2039_11" style="">
<span class="com">/**
 دالة خاصة يتم تشغيلها عند الضغط على القائمة المخصصة "افصل العنوان عن المؤلف عند كلمة تأليف" *
 عن طريق تقسيم عمود العنوان عند كلمة "تأليف" الأخيرة إن وجدت *
 */</span><span class="pln">

</span><span class="kwd">function</span><span class="pln"> splitAtLastBy</span><span class="pun">(){</span><span class="pln">
  </span><span class="pun">احصل</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">النطاق</span><span class="pln"> </span><span class="pun">النشط</span><span class="pln"> </span><span class="pun">(المحدد</span><span class="pln"> </span><span class="pun">حاليًا)</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> activeRange </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveRange</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> titleAuthorRange </span><span class="pun">=</span><span class="pln"> activeRange</span><span class="pun">.</span><span class="pln">offset</span><span class="pun">(</span><span class="pln">
    </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> activeRange</span><span class="pun">.</span><span class="pln">getHeight</span><span class="pun">(),</span><span class="pln"> activeRange</span><span class="pun">.</span><span class="pln">getWidth</span><span class="pun">()</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">

  </span><span class="pun">الحصول</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">الحالية</span><span class="pln"> </span><span class="pun">لخلايا</span><span class="pln"> </span><span class="pun">عمود</span><span class="pln"> </span><span class="pun">العنوان</span><span class="pln"> </span><span class="pun">المحدد</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">هذه</span><span class="pln"> </span><span class="pun">مصفوفة</span><span class="pln"> </span><span class="pun">ثنائية</span><span class="pln"> </span><span class="pun">الاتجاه</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> titleAuthorValues </span><span class="pun">=</span><span class="pln"> titleAuthorRange</span><span class="pun">.</span><span class="pln">getValues</span><span class="pun">();</span><span class="pln">

 </span><span class="pun">تحديث</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">حيث</span><span class="pln"> </span><span class="pun">توجد</span><span class="pln"> </span><span class="pun">السلسلة</span><span class="pln"> </span><span class="pun">النصية</span><span class="pln"> </span><span class="str">"تأليف"</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="pun">يفترض</span><span class="pln"> </span><span class="pun">أن</span><span class="pln"> </span><span class="pun">وجود</span><span class="pln"> </span><span class="pun">كلمة</span><span class="pln"> </span><span class="str">"تأليف"</span><span class="pln"> </span><span class="pun">يشير</span><span class="pln"> </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">نمط</span><span class="pln"> </span><span class="str">"العنوان، تأليف، المؤلف"</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">for</span><span class="pun">(</span><span class="kwd">var</span><span class="pln"> row </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> row </span><span class="pun">&lt;</span><span class="pln"> titleAuthorValues</span><span class="pun">.</span><span class="pln">length</span><span class="pun">;</span><span class="pln"> row</span><span class="pun">++){</span><span class="pln">
    </span><span class="kwd">var</span><span class="pln"> indexOfLastBy </span><span class="pun">=</span><span class="pln">
        titleAuthorValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="lit">0</span><span class="pun">].</span><span class="pln">lastIndexOf</span><span class="pun">(</span><span class="str">" تأليف "</span><span class="pun">);</span><span class="pln">

    </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">indexOfLastBy </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">){</span><span class="pln">
      </span><span class="pun">في</span><span class="pln"> </span><span class="pun">حالة</span><span class="pln"> </span><span class="pun">العثور</span><span class="pln"> </span><span class="pun">على</span><span class="pln"> </span><span class="pun">كلمة</span><span class="pln"> </span><span class="str">"تأليف"</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      </span><span class="pun">يتم</span><span class="pln"> </span><span class="pun">تقسيم</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">وتحديثها</span><span class="pln"> </span><span class="pun">بالمصفوفة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      </span><span class="kwd">var</span><span class="pln"> titlesAndAuthors </span><span class="pun">=</span><span class="pln"> titleAuthorValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="lit">0</span><span class="pun">];</span><span class="pln">

      </span><span class="pun">تحديث</span><span class="pln"> </span><span class="pun">قيمة</span><span class="pln"> </span><span class="pun">العنوان</span><span class="pln"> </span><span class="pun">بالمصفوفة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      titleAuthorValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="lit">0</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln">
        titlesAndAuthors</span><span class="pun">.</span><span class="pln">slice</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> indexOfLastBy</span><span class="pun">);</span><span class="pln">

      </span><span class="pun">تحديث</span><span class="pln"> </span><span class="pun">قيمة</span><span class="pln"> </span><span class="pun">المؤلف</span><span class="pln"> </span><span class="pun">بالمصفوفة</span><span class="pln"> </span><span class="com">//</span><span class="pln">
      titleAuthorValues</span><span class="pun">[</span><span class="pln">row</span><span class="pun">][</span><span class="lit">1</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln">
        titlesAndAuthors</span><span class="pun">.</span><span class="pln">slice</span><span class="pun">(</span><span class="pln">indexOfLastBy </span><span class="pun">+</span><span class="pln"> </span><span class="lit">7</span><span class="pun">);</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="pun">وضع</span><span class="pln"> </span><span class="pun">القيم</span><span class="pln"> </span><span class="pun">المحدثة</span><span class="pln"> </span><span class="pun">مرة</span><span class="pln"> </span><span class="pun">أخرى</span><span class="pln"> </span><span class="pun">في</span><span class="pln"> </span><span class="pun">جدول</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  titleAuthorRange</span><span class="pun">.</span><span class="pln">setValues</span><span class="pun">(</span><span class="pln">titleAuthorValues</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	احفظ مشروع النص البرمجي الخاص بك.
</p>

<h3>
	مراجعة الشيفرة البرمجية
</h3>

<p>
	هناك بعض الاختلافات الرئيسية بين هذا الشيفرة البرمجية لهذه الدالة ودالة <code>()splitAtFirstComma</code> كما يلي:
</p>

<p>
	أولاً، نحن نبحث عن السلسلة النصية "تأليف" كمحدد سلسلة بدلاً من الفاصلة "،".
</p>

<p>
	ثانيًا، هنا نستخدم التابع <code>()lastindexOf</code> من <a href="https://wiki.hsoub.com/JavaScript" rel="external">لغة JavaScript</a>. بدلاً من التابع <code>()indexOf</code>، وهذا يعني أنه إذا كانت هناك عدة سلاسل نصية "تأليف" في الخلية فمن المفترض أن تكون جميع السلاسل النصية "تأليف" جزءًا من العنوان وستعمل الشيفرة البرمجية على تقسيم النص عند كلمة "تأليف الأخيرة"، على سبيل المثال "كيفية تأليف كتاب تأليف مصطفى أمان" سوف تعتبر الشيفرة البرمجية كلمة "تأليف الأولى من ضمن عنوان الكتاب وتقسم النص بداية من كلمة "تأليف" الثانية.
</p>

<p>
	ثالثًا، بعد تقسيم السلسلة النصية، تُعيَّن السلسلة النصية الأولى كعنوان والثانية كمؤلف.
</p>

<h3>
	النتائج
</h3>

<p>
	يمكنك الآن رؤية تأثيرات الدالة <code>()splitAtLastBy</code>وهي تعمل، فقط حدد أحد الخلايا التي يوجد بها عنوان الكتاب واسم المؤلف مفصول بينهما بكلمة "تأليف"، ثم اذهب إلى القائمة المخصصة "قائمة الكتب" واختر منها القائمة الفرعية "افصل العنوان عن المؤلف عند كلمة تأليف" وأخبرنا في التعليقات بالنتيجة التي حصلت عليها.
</p>

<p>
	تهانينا، يمكنك الآن استخدام Apps Script لقراءة بيانات السلسلة النصية وتعديلها في ورقة جدول البيانات، واستخدام القوائم المخصصة لتنفيذ أوامر Apps Script المختلفة.
</p>

<h2>
	خاتمة
</h2>

<p>
	نكون إلى هنا قد وصلنا إلى نهاية هذا المقال من دليل أساسيات برمجة التطبيقات باستخدام جداول بيانات جوجل الذي تعلمنا فيه كيفية استيراد البيانات من جدول بيانات جوجل، كيفية إنشاء قائمة مخصصة من خلال الدالة <code>()onOpen</code>، كيفية تحليل ومعالجة قيم بيانات سلسلة نصية.
</p>

<p>
	وفي المقال القادم سوف نتعلم كيفية زيادة تحسين مجموعة البيانات هذه عن طريق ملء الخلايا الفارغة ببيانات مستمدة من واجهة برمجة تطبيقات عامة <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>.
</p>

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

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">أساسيات برمجة التطبيقات Apps Script باستخدام جداول بيانات جوجل </a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D9%88%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r747/" rel="">التعامل مع جداول البيانات والأوراق والنطاقات من خلال Apps Script</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">748</guid><pubDate>Fri, 08 Jul 2022 08:42:41 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x639;&#x627;&#x645;&#x644; &#x645;&#x639; &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x627;&#x644;&#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x648;&#x627;&#x644;&#x623;&#x648;&#x631;&#x627;&#x642; &#x648;&#x627;&#x644;&#x646;&#x637;&#x627;&#x642;&#x627;&#x62A; &#x645;&#x646; &#x62E;&#x644;&#x627;&#x644; Apps Script</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D9%88%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-%D9%85%D9%86-%D8%AE%D9%84%D8%A7%D9%84-apps-script-r747/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62c7e79858219_--------Apps-Script.jpg.f3e49b6e1cd50dde1956697dbddb9bc4.jpg" /></p>

<p>
	مرحبًا بك في المقال الثاني من دليل تعلم أساسيات برمجة التطبيقات باستخدام جداول بيانات جوجل، ففي <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">المقال السابق</a> ركزنا على مفاهيم محرر السكربت ووحدات الماكرو والدوال المخصصة، أما في هذا الدرس سوف نتعمق في خدمة جداول البيانات التي يمكنك استخدامها لقراءة البيانات وكتابتها ومعالجتها في <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r295/" rel="">جداول بيانات Google</a>.
</p>

<p>
	هذا هو الدرس الثاني في دليل تعلم أساسيات برمجة التطبيقات مع جداول بيانات جوجل، وقبل البدء تأكد من إكمال <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">المقال الأول: وحدات الماكرو والدوال المخصصة</a>.
</p>

<h2>
	ماذا ستتعلم
</h2>

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

<ul>
<li>
		فهم موضوعات Apps Script الأساسية التي استكشفناها في الدرس السابق من هذا الدليل.
	</li>
	<li>
		الإلمام الأساسي بمحرر السكربت Apps Script.
	</li>
	<li>
		الإلمام الأساسي بجداول بيانات Google.
	</li>
	<li>
		الإلمام الأساسي <a href="https://wiki.hsoub.com/JavaScript" rel="external">بلغة البرمجة JavaScript</a> وصنف <code>String</code> الخاص به.
	</li>
</ul>
<h2>
	ما هي خدمة جداول البيانات؟
</h2>

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

<h3>
	الصنف SpreadsheetApp
</h3>

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

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

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101940" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e207d8d2c_001-1.png.ffb7953e6356c6e4a27569816b584f71.png" rel=""><img alt="001 - خدمة جداول البيانات 1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101940" data-unique="up8qmopur" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e207d8d2c_001-1.png.ffb7953e6356c6e4a27569816b584f71.png" style="width: 350px; height: auto;"></a>
</p>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101941" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e2083e9d4_002-2.png.7716904ab188469c877db77927fdfb52.png" rel=""><img alt="002 - خدمة جداول البيانات 2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101941" data-unique="0pgw8o5x1" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e2083e9d4_002-2.png.7716904ab188469c877db77927fdfb52.png" style="width: 450px; height: auto;"></a>
</p>

<p>
	بالإضافة إلى الاسم، تحتوي جداول البيانات أيضًا على معرّف نصي (سلسلة نصية عشوائية فريدة)، هذا المعرّف موجود في <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r1435/" rel="">عنوان URL</a> لجدول البيانات، كما تحتوي كل ورقة في جدول البيانات أيضًا على معرّف رقمي (سلسلة رقمية عشوائية فريدة) لتلك الورقة، هذا المعرّف موجود في عنوان URL لجدول البيانات، وتنسيق المعرفين كالتالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101942" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e20a482ea_003-3.png.98f18458375dcb178e1690aec88d11a4.png" rel=""><img alt="003 - خدمة جداول البيانات 3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101942" data-unique="3ludya3lp" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e20b1cef6_003-3.thumb.png.8c66634430a7019c3d96cf530a8df1fe.png" style="width: 550px; height: auto;"></a>
</p>

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

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_8028_17" style="">
<span class="pln">https</span><span class="pun">:</span><span class="com">//docs.google.com/spreadsheets/d/1xW0pLog0mQFVU5QCob1AHPxR7WEt1/edit#gid=3614239</span></pre>

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

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

<h3>
	الصنف Range
</h3>

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

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>توضيح</strong>: المصطلحات الأساسية في Apps Script مصطلح "الورقة النشطة active sheet" هي الورقة المفتوحة والمرئية حاليًا في واجهة جداول بيانات جوجل، وبالمثل فإن مصطلح "النطاق النشط active range" هو مجموعة مكونة من خلية واحدة أو أكثر مظللة حاليًا داخل الورقة النشطة، ومصطلح "الخلية النشطة active cell" هي الخلية الوحيدة المميزة داخل الورقة النشطة مع تركيز المؤشر.
		</p>
	</div>
</blockquote>

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

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

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

<h2>
	الإعداد للعمل
</h2>

<p>
	قبل المتابعة أنت بحاجة إلى جدول بيانات يحتوي على بعض البيانات، لا تقلق فقد وفرنا لك <a href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=102740" data-fileid="102740" rel="">جدول بيانات جاهز &amp;nbsp;حول أسعار الأفوكادو</a> يمكنك تنزيله، ثم إعادة رفعه بإحدى الطريقتين اللتين ذكرناها في المقال الأول من هذه السلسلة.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>للتذكير</strong>: يمكنك فتح محرر السكربت من جداول بيانات جوجل بالنقر على "الإضافات" ثم اختيار "برمجة تطبيقات جوجل"، وعند فتح مشروع Apps Script في محرر السكربت لأول مرة، ينشئ محرر السكربت مشروعًا نصيًا وملفًا نصيًا لك.
		</p>
	</div>
</blockquote>

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

<h2>
	الوصول إلى جداول البيانات وتعديلها
</h2>

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

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

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

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

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

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_8028_21" style="">
<span class="kwd">function</span><span class="pln"> renameSpreadsheet</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> mySS </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSpreadsheet</span><span class="pun">();</span><span class="pln">
  mySS</span><span class="pun">.</span><span class="pln">rename</span><span class="pun">(</span><span class="str">"أسعار الأفوكادو"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101943" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e20bca8b5_005-5.png.f6ca35e2bc09bd5b0990c30b153b9aa2.png" rel=""><img alt="005 - خدمة جداول البيانات 5.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101943" data-unique="v1o6hdltq" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e2134ef2d_005-5.thumb.png.83ce1d55d2a5db93b8f3923b818373f7.png" style="width: 650px; height: auto;"></a>
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101944" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e216dc88a_006-6.png.a4425a51f65a2952c805606cdbe04907.png" rel=""><img alt="006 - خدمة جداول البيانات 6.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101944" data-unique="f5ak7gs29" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e216dc88a_006-6.png.a4425a51f65a2952c805606cdbe04907.png" style="width: 700px; height: auto;"></a>
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101945" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e218b64dc_007-7.png.49125470c9290f2e0d0acabe434521d8.png" rel=""><img alt="007 - خدمة جداول البيانات 7.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101945" data-unique="91y4u9lcl" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e21b04486_007-7.thumb.png.3cb0dba663dc38f4b7ee739a843db9ad.png" style="width: 700px; height: auto;"></a>
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101946" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e21c640c9_008-8.png.093c87af07d212413971f1c07e19eab5.png" rel=""><img alt="008 - خدمة جداول البيانات 8.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101946" data-unique="6bmv59n8f" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e21e0699a_008-8.thumb.png.c8ee9ae54b2c9667ce7625a6881f61c4.png" style="width: 450px; height: auto;"></a>
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101947" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e21f1e353_009-9.png.45fe2e8df7654580d6430b805a46eb70.png" rel=""><img alt="009 - خدمة جداول البيانات 9.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101947" data-unique="wk84dttnb" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e21fe4ee4_009-9.thumb.png.e685d2103cd01daa3c53e565cd948abe.png" style="width: 450px; height: auto;"></a>
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: تستخدم جوجل إجراء الأمان هذا لتنبيه المستخدمين من استعمال أي ماكرو قد يكون غير آمن أو من دون إذنهم، فإذا رأيت مربع الحوار هذا فلا بأس بالمتابعة لأنك مؤلف الشيفرة البرمجية، فقط اتبع التعليمات التي تظهر على النافذة لمتابعة مصادقة الشيفرة البرمجية.
		</p>
	</div>
</blockquote>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101948" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e220b9351_010-10.png.501822d62b6e8786d5cac9e9238238c9.png" rel=""><img alt="010 - خدمة جداول البيانات 10.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101948" data-unique="5me6fgrqg" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e220b9351_010-10.png.501822d62b6e8786d5cac9e9238238c9.png" style="width: 500px; height: auto;"></a>
</p>

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

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

<h3>
	تكرار الورقة النشطة
</h3>

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

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

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_8028_31" style="">
<span class="kwd">function</span><span class="pln"> duplicateAndOrganizeActiveSheet</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> mySS </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSpreadsheet</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> duplicateSheet </span><span class="pun">=</span><span class="pln"> mySS</span><span class="pun">.</span><span class="pln">duplicateActiveSheet</span><span class="pun">();</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101949" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e2213d9bb_011-11.png.72b2242cf2fb6bca7e703589f0fa2a25.png" rel=""><img alt="011 - خدمة جداول البيانات 11.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101949" data-unique="vkip3vjcp" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e221466cb_011-11.thumb.png.158f4eb9e1490f59b8572c6966d63e22.png" style="width: 550px; height: auto;"></a>
</p>

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

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

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

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

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

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

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

<h3>
	تغيير اسم الورقة
</h3>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101950" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e22241b0d_012-12.png.acadb7cfd997394b68cddc3a1c5bac7c.png" rel=""><img alt="012 - خدمة جداول البيانات 12.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101950" data-unique="30wbjju4x" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e22675f38_012-12.thumb.png.c1280c05af722ffabbce5bb30e3cefb3.png" style="width: 600px; height: auto;"></a>
</p>

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

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_8028_37" style="">
<span class="kwd">function</span><span class="pln"> duplicateAndOrganizeActiveSheet</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> mySS </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSpreadsheet</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> duplicateSheet </span><span class="pun">=</span><span class="pln"> mySS</span><span class="pun">.</span><span class="pln">duplicateActiveSheet</span><span class="pun">();</span><span class="pln">

  </span><span class="com">// تغيير اسم الورقة الجديدة.</span><span class="pln">
  duplicateSheet</span><span class="pun">.</span><span class="pln">setName</span><span class="pun">(</span><span class="str">"_الورقة"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> duplicateSheet</span><span class="pun">.</span><span class="pln">getSheetId</span><span class="pun">());</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101951" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e2287df6c_013-13.png.2f907d50f6e1196cdc4c008900a7fb46.png" rel=""><img alt="013 - خدمة جداول البيانات 13.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101951" data-unique="j7hn2gvqu" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e22a9e424_013-13.thumb.png.0898dfb912bb69f08686e91c5a1709ae.png" style="width: 600px; height: auto;"></a>
</p>

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

<h3>
	تعديل أعمدة وصفوف الورقة
</h3>

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

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

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_8028_40" style="">
<span class="kwd">function</span><span class="pln"> duplicateAndOrganizeActiveSheet</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> mySS </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSpreadsheet</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> duplicateSheet </span><span class="pun">=</span><span class="pln"> mySS</span><span class="pun">.</span><span class="pln">duplicateActiveSheet</span><span class="pun">();</span><span class="pln">

  </span><span class="com">// تغيير اسم الورقة الجديدة.</span><span class="pln">
  duplicateSheet</span><span class="pun">.</span><span class="pln">setName</span><span class="pun">(</span><span class="str">"_الورقة"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> duplicateSheet</span><span class="pun">.</span><span class="pln">getSheetId</span><span class="pun">());</span><span class="pln">

  </span><span class="com">// تنسيق الورقة الجديدة.</span><span class="pln">
  duplicateSheet</span><span class="pun">.</span><span class="pln">autoResizeColumns</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">);</span><span class="pln">
  duplicateSheet</span><span class="pun">.</span><span class="pln">setFrozenRows</span><span class="pun">(</span><span class="lit">2</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

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

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_8028_42" style="">
<span class="pln">autoResizeColumns</span><span class="pun">(</span><span class="pln">startColumn</span><span class="pun">,</span><span class="pln"> numColumns</span><span class="pun">)</span></pre>

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

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>ملاحظة</strong>: عند العمل مع المصفوفات في Apps Script فإنك تتبع الاصطلاح القائل بأن القائمة تبدأ من الفهرس "0"، ولكن عند العمل مع الصفوف والأعمدة يبدأ الفهرس عند الرقم "1"، ويتماشى هذا المنطق مع تنسيق جدول البيانات التقليدي إذ تبدأ من الصف "1" والعمود "A" في جداول البيانات، لذلك ضع في اعتبارك هذا الأمر عند استخدام التوابع المتعلقة بالأعمدة والصفوف، مثل التابع <code>()autoResizeColumns</code>، ففي تمريننا الحالي أدخلنا القيمة "1" وليس القيمة "0" كمعامل للإشارة إلى العمود "A" داخل الصنف <code>duplicateSheet</code>.
		</p>
	</div>
</blockquote>

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

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

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

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

<h3>
	نطاقات النقل
</h3>

<p>
	يمكنك تنشيط نطاقات البيانات ونقلها باستخدام توابع الأصناف بالإضافة إلى التدوين أو التأشير A1، وهو اختصار لتحديد مجموعات معينة من الخلايا داخل جداول البيانات، فإذا كنت بحاجة إلى التعرف عليها بنفسك يمكنك التحقق من هذا <a href="https://developers.google.com/sheets/api/guides/concepts#expandable-1" rel="external nofollow">الوصف لترميز A1</a>.
</p>

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

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

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_8028_44" style="">
<span class="kwd">function</span><span class="pln"> duplicateAndOrganizeActiveSheet</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> mySS </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSpreadsheet</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> duplicateSheet </span><span class="pun">=</span><span class="pln"> mySS</span><span class="pun">.</span><span class="pln">duplicateActiveSheet</span><span class="pun">();</span><span class="pln">

  </span><span class="com">// تغيير اسم الورقة الجديدة.</span><span class="pln">
  duplicateSheet</span><span class="pun">.</span><span class="pln">setName</span><span class="pun">(</span><span class="str">"_الورقة"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> duplicateSheet</span><span class="pun">.</span><span class="pln">getSheetId</span><span class="pun">());</span><span class="pln">

  </span><span class="com">// تنسيق الورقة الجديدة.</span><span class="pln">
  duplicateSheet</span><span class="pun">.</span><span class="pln">autoResizeColumns</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">);</span><span class="pln">
  duplicateSheet</span><span class="pun">.</span><span class="pln">setFrozenRows</span><span class="pun">(</span><span class="lit">2</span><span class="pun">);</span><span class="pln">

 </span><span class="pun">نقل</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> F </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> C </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> myRange </span><span class="pun">=</span><span class="pln"> duplicateSheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="str">"F2:F"</span><span class="pun">);</span><span class="pln">
  myRange</span><span class="pun">.</span><span class="pln">moveTo</span><span class="pun">(</span><span class="pln">duplicateSheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="str">"C2"</span><span class="pun">));</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101952" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e22bc4452_014-14.png.8da9d62fc7693e86297e655a06177acb.png" rel=""><img alt="014 - خدمة جداول البيانات 14.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101952" data-unique="lu301mqjq" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6e22ddb344_014-14.thumb.png.2d3e059dcf42e29d3c6aad0bf7dae60b.png" style="width: 550px; height: auto;"></a>
</p>

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

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

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: عند كتابة النصوص البرمجية الخاصة بك تأكد من اختبارها بدقة للتأكد من أن بياناتك وضعت في المكان الذي تريده، وذلك لأن Apps Script يكتب فوق قيم البيانات الحالية عند تغيير قيم الخلية، فإذا لم تكن حريصًا سوف تتسبب في الكتابة فوق البيانات التي تنوي الاحتفاظ بها، ففي هذا المثال كان العمود "C" فارغًا ولكن إذا كانت هناك بيانات فإن التابع <code>(moveTo(target</code> سيزيلها.
		</p>
	</div>
</blockquote>

<h3>
	نطاقات الفرز
</h3>

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

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

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_8028_47" style="">
<span class="kwd">function</span><span class="pln"> duplicateAndOrganizeActiveSheet</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> mySS </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActiveSpreadsheet</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> duplicateSheet </span><span class="pun">=</span><span class="pln"> mySS</span><span class="pun">.</span><span class="pln">duplicateActiveSheet</span><span class="pun">();</span><span class="pln">

  </span><span class="com">// تغيير اسم الورقة الجديدة.</span><span class="pln">
  duplicateSheet</span><span class="pun">.</span><span class="pln">setName</span><span class="pun">(</span><span class="str">"_الورقة"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> duplicateSheet</span><span class="pun">.</span><span class="pln">getSheetId</span><span class="pun">());</span><span class="pln">

  </span><span class="com">// تنسيق الورقة الجديدة.</span><span class="pln">
  duplicateSheet</span><span class="pun">.</span><span class="pln">autoResizeColumns</span><span class="pun">(</span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">5</span><span class="pun">);</span><span class="pln">
  duplicateSheet</span><span class="pun">.</span><span class="pln">setFrozenRows</span><span class="pun">(</span><span class="lit">2</span><span class="pun">);</span><span class="pln">

  </span><span class="pun">نقل</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> F </span><span class="pun">إلى</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> C </span><span class="com">//</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> myRange </span><span class="pun">=</span><span class="pln"> duplicateSheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="str">"F2:F"</span><span class="pun">);</span><span class="pln">
  myRange</span><span class="pun">.</span><span class="pln">moveTo</span><span class="pun">(</span><span class="pln">duplicateSheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="str">"C2"</span><span class="pun">));</span><span class="pln">

</span><span class="pun">فرز</span><span class="pln"> </span><span class="pun">جميع</span><span class="pln"> </span><span class="pun">البيانات</span><span class="pln"> </span><span class="pun">باستخدام</span><span class="pln"> </span><span class="pun">العمود</span><span class="pln"> C </span><span class="pun">(معلومات</span><span class="pln"> </span><span class="pun">السعر)</span><span class="pln"> </span><span class="com">//</span><span class="pln">
  myRange </span><span class="pun">=</span><span class="pln"> duplicateSheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="str">"A3:D55"</span><span class="pun">);</span><span class="pln">
  myRange</span><span class="pun">.</span><span class="pln">sort</span><span class="pun">(</span><span class="lit">3</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span></pre>

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

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

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

<p>
	ويمكن أن يؤدي التابع <code>(sort(sortSpecObj</code> مهام فرز أكثر تعقيدًا، لكنك لست بحاجة إليها هنا، ويمكنك عرض جميع التوابع المختلفة التي يمكنك من خلالها استدعاء نطاقات الفرز من خلال <a href="https://developers.google.com/apps-script/reference/spreadsheet/range#sort(Object)" rel="external nofollow">الوثائق المرجعية لتوابع الفرز</a>.
</p>

<h2>
	خاتمة
</h2>

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

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

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

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/" rel="">أساسيات برمجة التطبيقات Apps Script باستخدام جداول بيانات جوجل </a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%88%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r521/" rel="">إنشاء وتصميم جداول بيانات جوجل Google Sheets</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">747</guid><pubDate>Wed, 06 Jul 2022 15:09:00 +0000</pubDate></item><item><title>&#x623;&#x633;&#x627;&#x633;&#x64A;&#x627;&#x62A; &#x628;&#x631;&#x645;&#x62C;&#x629; &#x627;&#x644;&#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; Apps Script &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644;</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-apps-script-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r746/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_07/62c7e719f21eb_---Apps-Script----.jpg.9cac580630a5ceb699d43c3125df4f26.jpg" /></p>

<p>
	تواصل Google عملها في مهمة تسهيل الحياة اليومية على المستخدمين، فبعد أن أتاحت التطبيقات المختلفة التي لا غِنى عنها، مثل: بريد Gmail، والمستندات، وجداول البيانات، والعروض التقديمية، وذلك لمساعدة الأفراد والشركات في إنجاز أعمالهم كلها من مكان واحد ودون عناء، فقد أتاحت أيضًا أداة تُعد من أكثر أدوات الإنتاجية فعالية وهي "برمجة التطبيقات Apps Script"، فهي تتيح لك إنشاء إضافات فعالة لتطبيقات Google باستخدام مقتطفات من <a href="https://academy.hsoub.com/programming/javascript/%D9%86%D9%85%D8%B7-%D9%83%D8%AA%D8%A7%D8%A8%D8%A9-%D8%B4%D9%8A%D9%81%D8%B1%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r785/" rel="">شيفرة JavaScript</a>، فبضعة دقائق من كتابة الشيفرة البرمجية تمكنك من تشكيل تطبيقات جوجل إلى أدوات مخصصة لعملك.
</p>

<p>
	فعلى سبيل المثال: سوف تتمكن من إرسال رسائل شكر بالبريد الإلكتروني تلقائيًا باستخدام بريد Gmail، أو إضافة جهات اتصال جديدة تلقائيًا من جدول بيانات إلى جهات اتصال جوجل.
</p>

<p>
	ومن خلال هذا الدليل سوف نتعلم سويًّا أساسيات Apps Script وكيفية استخدامها لتحسين تجربتك في استخدام <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r295/" rel="">جداول بيانات جوجل</a>.
</p>

<h2>
	ما هو Apps Script؟
</h2>

<p>
	يُعد Apps Script نظامًا أساسيًا سريعًا لتطوير التطبيقات يمنحك القدرة على أتمتة المهام الخاصة بك وتخصيصها وتوسيعها. باستخدام Apps Script، يمكنك توفير الوقت والجهد من خلال تبسيط العمل الشاق أو المعقد داخل حزمة تطبيقات جوجل، وتتضمن ميزات Apps Script ما يلي: تتيح لك الخدمات المضمنة في Apps Script قراءة بيانات تطبيق Google Workspace وتحديثها ومعالجتها وذلك باستخدام "السكربت Script". يمكنك إنشاء نصوص برمجية باستخدام محرر السكربت في Apps Script وذلك من خلال المتصفح، فليست هناك حاجة لتثبيت أو تشغيل برنامج تحرير الشيفرات البرمجية. يمكنك تصميم واجهات مستخدم لتطبيقات Google Workspace مما يتيح لك تشغيل هذه التطبيقات مباشرة باستخدام عناصر القائمة ومربعات الحوار والأشرطة الجانبية.
</p>

<h2>
	جداول البيانات
</h2>

<p>
	يمكنك استخدام Apps Script مع جداول بيانات جوجل لتوفير الوقت والجهد، مما يسمح للنصوص بالتفاعل مع ملفات جداول بيانات جوجل والبيانات التي تحتوي عليها، ويمكنك استخدام هذه الخدمة لأتمتة مهام جدول البيانات الشائعة التالية:
</p>

<ul>
<li>
		إنشاء أو تعديل جدول البيانات.
	</li>
	<li>
		قراءة وتحديث بيانات الخلية والصيغ والتنسيق.
	</li>
	<li>
		إنشاء أزرار وقوائم مخصصة.
	</li>
	<li>
		استيراد وتصدير البيانات من تطبيقات جوجل الأخرى أو من مصادر خارجية.
	</li>
	<li>
		المشاركة والتحكم في الوصول إلى جداول البيانات.
	</li>
</ul>
<h2>
	ماذا ستتعلم
</h2>

<p>
	يغطي هذا الدليل جميع الموضوعات التي ستحتاج إليها لبدء استخدام Apps Script مع جداول بيانات جوجل، وهي على النحو التالي:
</p>

<ol>
<li>
		أساسيات برمجة التطبيقات Apps Script باستخدام جداول بيانات جوجل.
	</li>
	<li>
		التعامل مع جداول البيانات والأوراق والنطاقات من خلال Apps Script.
	</li>
	<li>
		العمل مع البيانات في جداول بيانات جوجل من خلال Apps Script.
	</li>
	<li>
		كيفية استدعاء <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-%D9%84%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-api%D8%9F-r1512/" rel="">واجهة برمجة تطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr></a> عامة في جداول بيانات جوجل باستخدام Apps Script.
	</li>
	<li>
		تنسيق البيانات داخل جداول بيانات جوجل باستخدام Apps Script.
	</li>
	<li>
		الرسوم البيانية وعرضها في شرائح جوجل من خلال Apps Script.
	</li>
</ol>
<p>
	وعلى وجه التحديد، سوف يركز هذا الدليل على مفهومين أساسيين، وهما:
</p>

<ul>
<li>
		<strong>وحدات الماكرو Macros</strong>: وهي عبارة عن سلسلة من الإجراءات المسجلة داخل جداول بيانات جوجل، وبمجرد تسجيلها يمكنك تشغيلها لتكرار هذه الإجراءات لاحقًا باستخدام عنصر قائمة أو مفتاح اختصار، ويمكنك إنشاء وتحديث وحدات الماكرو الخاصة بك في كل من "جداول بيانات جوجل" و "محرر السكربت Apps Script".
	</li>
	<li>
		<strong>الدوال المخصصة Custom Functions</strong>: في محرر السكربت يمكنك أيضًا إنشاء دوال مخصصة، وذلك على غرار الدوال المضمنة التي توفرها جداول البيانات، مثل: <code>SUM</code> أو <code>AVERAGE</code>، ويمكنك استخدام Apps Script لكتابة دوالك المخصصة لعمليات بسيطة ومتخصصة، وبمجرد إنشاؤها يمكنك استدعاء هذه الدوال في "جداول البيانات" كما تفعل مع أي دالة مضمنة، ويمكنك أيضًا استخدام الدوال المخصصة في صيغ الخلايا التي تكتبها وتجمعها مع دوال أخرى حسب الحاجة.
	</li>
</ul>
<h2>
	ماذا ستحتاج
</h2>

<ul>
<li>
		الإلمام الأساسي <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-javascript-r550/" rel="">بلغة البرمجة جافا سكريبت</a>.
	</li>
	<li>
		الإلمام الأساسي بجداول بيانات جوجل.
	</li>
</ul>
<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: يعتمد استخدام Apps Script مع جدول بيانات جوجل أن تكون على دراية <a href="https://wiki.hsoub.com/JavaScript" rel="external">بلغة البرمجة جافا سكريبت JavaScript</a> وكيفية التعامل مع جداول بيانات جوجل، فإن كنت جديدًا أو غير متمكنًا منهم فإن أكاديمية حسوب تقدم سلسلة مقالات في لغة البرمجة جافا سكريبت باسم <a href="https://academy.hsoub.com/search/?&amp;page=4&amp;tags=%D8%AF%D9%84%D9%8A%D9%84%20%D8%AA%D8%B9%D9%84%D9%85%20%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA&amp;sortby=newest" rel="">دليل تعلم جافاسكربت</a> وسلسلة مقالات حول <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/" rel="">جداول بيانات جوجل</a> تغطي كل ما تحتاج إلى معرفته.
		</p>
	</div>
</blockquote>

<h2>
	إنشاء ماكرو في جداول البيانات
</h2>

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

<p>
	ولأتمتة الإجراءات المتكررة هذه، توفر "جداول بيانات جوجل" خدمة وحدات ماكرو التي تتيح لك "تسجيل" سلسلة من الإجراءات في ورقة جدول البيانات، ثم باستخدام وحدة ماكرو مسجلة يمكنك تكرار نفس الإجراءات في أي مكان آخر في جدول البيانات بضغطة بسيطة على مفتاح الاختصار.
</p>

<p>
	لذلك في هذا القسم من دليل "أساسيات برمجة التطبيقات باستخدام جداول بيانات جوجل"، ستتعلم كيفية إنشاء وحدة ماكرو في "جداول البيانات"، وفي القسم التالي ستتعلم كيفية إنشاء وحدات الماكرو باستخدام Apps Script.
</p>

<h3>
	قبل أن تبدأ
</h3>

<p>
	قبل المتابعة أنت بحاجة إلى جدول بيانات يحتوي على بعض البيانات، لا تقلق فقد وفرنا لك <a href="https://academy.hsoub.com/applications/core/interface/file/attachment.php?id=102739" data-fileid="102739" rel="">جدول بيانات.zip</a> جاهز. نزله، وبعد تنزيله واستخراجه من الملف المضغوط يمكنك تنفيذ أحد هذين الحلين:
</p>

<p>
	الحل الأول أن تنسخ البيانات الموجودة بملف مايكروسوفت إكسل الذي حملته من المقالة وذلك من خلال الضغط على مفتاحي Ctrl + A من لوحة المفاتيح لتحديد جميع البيانات بالملف.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101927" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d903a3079_029-15.png.0a3d66e596447187f03db2e5d9727f5c.png" rel=""><img alt="029 - إنشاء مايكرو 15.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101927" data-unique="eio8y0k44" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d90478122_029-15.thumb.png.c2fedac698d6cc04ab32201955f975c4.png" style="width: 750px; height: auto;"></a>
</p>

<p>
	ثم الذهاب إلى حسابك في جوجل درايف لإنشاء جدول بيانات جوجل، وذلك من خلال إما الضغط على زر "جديد" الموجود أعلى يمين النافذة، أو من خلال النقر على زر الفأرة الأيمن ومن القائمة التي ستظهر اختر منها "جدول بيانات Google".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101928" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d905cf976_030-16.png.cfc912678686cdde166dba3cf9345751.png" rel=""><img alt="030 - إنشاء مايكرو 16.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101928" data-unique="1lojnptpo" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d9090b42c_030-16.thumb.png.8d7beec0f91323d0031a0fc04364133d.png" style="width: 650px; height: auto;"></a>
</p>

<p>
	وبعد أن يفتح الجدول تلصق به هذه البيانات التي أخذتها من ملف مايكروسوف إكسيل، وافتراضيًا يكون أسلوب عرض البيانات من اليسار إلى اليمين، ويمكنك تعديلها بالضغط على زر "ورقة من اليمين إلى اليسار" كما هو موضح بالصورة التالية.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101929" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d90b03d6e_031-17.png.89af8426b16af6e144b3c4616f87648b.png" rel=""><img alt="031 - إنشاء مايكرو 17.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101929" data-unique="xxdvemkdp" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d90c16b24_031-17.thumb.png.2fd7552c26c40e8cb6ea082932bb3cb6.png" style="width: 750px; height: auto;"></a>
</p>

<p>
	وفي النهاية أعطي اسمًا من اختيارك لهذا الجدول وذلك من خلال النقر على كلمة "جدول بيانات بدون عنوان" الموجودة أعلى يمين النافذة، ولكن ننصحك بأن تعطيه نفس اسم ملف التدريب حتى لا تتشتت أثناء الشرح.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101930" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d90eb56f1_032-18.png.a93262693df7604fb7d8a3d16c1339c6.png" rel=""><img alt="032 - إنشاء مايكرو 18.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101930" data-unique="6er8de6mm" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d911b55ad_032-18.thumb.png.6acb5ba4713f1db701e2ef9edfe6e976.png" style="width: 750px; height: auto;"></a>
</p>

<p>
	الحل الثاني أن تذهب مباشرة إلى حسابك في جوجل درايف وفي أي مكان خالي انقر بزر الفأرة الأيمن، ومن القائمة التي ستظهر اختر منها "تحميل ملف".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101931" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d9153f785_033-19.png.524441c2b37f98d700ef512d432d3cef.png" rel=""><img alt="033 - إنشاء مايكرو 19.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101931" data-unique="6ws7dhonc" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d918a9afe_033-19.thumb.png.5c74e3f384ac1add1ea50067c8a113e6.png" style="width: 650px; height: auto;"></a>
</p>

<p>
	ومن النافذة التي ستظهر لك حدد الملف من المسار الذي حملته فيه ثم اضغط على زر "Open" ليتم رفعه إلى حسابك على جوجل درايف.
</p>

<p style="text-align: center;">
	<img alt="034 - إنشاء مايكرو 20.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101932" data-unique="5hpbdlv5w" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d91b0d155_034-20.png.287a478186e02c0968ad0b96a8b2d3f2.png" style="width: 650px; height: auto;"></p>

<p>
	الآن انتبه من أمر هام، فالملف الذي رفعته هو بتنسيق "مايكروسوفت إكسيل" وبالتلي لن تجد به القائمة "إضافات" التي تمكنك من إضافة الشيفرات البرمجية لـ Apps Script
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101933" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d91ce4169_035-21.png.43c3c587f6588b56611600b50552dd6e.png" rel=""><img alt="035 - إنشاء مايكرو 21.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101933" data-unique="smrm2uzp8" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d91ddc5ee_035-21.thumb.png.6ea27516b9573981a9e18b882761383d.png" style="width: 750px; height: auto;"></a>
</p>

<p>
	لذلك يجب علينا تحويل هذا الملف إلى "جدول بيانات جوجل"، وذلك من خلال النقر على القائمة "ملف" ثم اختيار "الحفظ بتنسيق جدول بيانات Google".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101934" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d9201cd5a_036-22.png.a8924de279c5fe0e2a2f066859ad16b3.png" rel=""><img alt="036 - إنشاء مايكرو 22.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101934" data-unique="3whucc86c" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d923620a8_036-22.thumb.png.a6a137e3e6738f2ece6707c214bbbe91.png" style="width: 750px; height: auto;"></a>
</p>

<p>
	سوف يفتح لك الملف بتنسيق جدول بيانات جوجل في تبويبة جديدة، ويمكنك الآن حذف الملف الذي بتنسيق مايكروسوفت اكسل حتى لا يحدث لك ارتباك بين الملفين أثناء تنفيذ التدريبات. ذ
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101935" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d9263af0c_037-23.png.ab1be9a07e68845204abfdadae2e6d58.png" rel=""><img alt="037 - إنشاء مايكرو 23.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101935" data-unique="qy71j547p" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d92aa3c1a_037-23.thumb.png.ad20c717ace74903956f4c858862a510.png" style="width: 700px; height: auto;"></a>
</p>

<p>
	سنطبق هذه العملية مع كل الجداول في هذا المقال طبعًا والمقالات اللاحقة لذا لن نكررها لاحقًا في مقالات السلسلة.
</p>

<p>
	أصبح الجدول الذي سنطبق عليه المقال جاهزًا حتى تتابع معنا ولا بأس من اختيار جدول آخر من اختيارك لتطبيق ما تريد.
</p>

<h3>
	طريقة إنشاء ماكرو
</h3>

<p>
	الآن بعد أن أصبح لديك جدول بيانات للعمل معه، يمكنك تسجيل ماكرو في جداول بيانات جوجل، ففي هذا المثال سوف ننشىء ماكرو يعمل على تنسيق صف الرأس لبياناتك، فقط ما عليك سوى اتباع هذه الخطوات:
</p>

<ul>
<li>
		أولًا، انقر فوق الخلية "A1" لوضع المؤشر في صف الرأس لبياناتك.
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101899" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8dbd056d_001-1.png.a125f34b0e6e6b69dad786a3ee1abff9.png" rel=""><img alt="001 - إنشاء ماكرو 1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101899" data-unique="p88vgc300" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8dcbacd1_001-1.thumb.png.a276e9044bd0c163ebacb042f8cb4015.png" style="width: 750px; height: auto;"></a>
</p>

<ul>
<li>
		ثانيًا، من شريط القوائم بأعلى جدول البيانات حدد "الإضافات"، ثم اختر منها "وحدات الماكرو"، ثم اختر منها "تسجيل ماكرو".
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101900" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8ddd6279_002-2.png.020e81a9e43be0d182598339fcfeb551.png" rel=""><img alt="002 - إنشاء ماكرو 2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101900" data-unique="1w7sj3y9e" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8de971d6_002-2.thumb.png.45995328e041f0e3c488c0b05cf68714.png" style="width: 750px; height: auto;"></a>
</p>

<p style="margin-right: 40px;">
	وبمجرد بدء عملية التسجيل سوف تتذكر "جداول بيانات جوجل" كل إجراء تتخذه داخل جدول البيانات، مثل: تمييز الخلايا، إضافة البيانات، التبديل إلى أوراق مختلفة، التنسيق وما إلى ذلك، وتصبح هذه الإجراءات "الشيفرة البرمجية Script" التي تتكرر بمجرد حفظ الماكرو وتنشيطه لاحقًا.
</p>

<ul>
<li>
		ثالثًا، في مربع حوار الماكرو حدد "استخدام المراجع ذات الصلة".
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101901" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8dff26a4_003-3.png.2692cebd6ac4a27460ce20a1b3095929.png" rel=""><img alt="003 - إنشاء ماكرو 3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101901" data-unique="ii6gtl0m7" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e143cbf_003-3.thumb.png.ee1ea4b928233b02974a517740c7f4c7.png" style="width: 550px; height: auto;"></a>
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>توضيح</strong>: يمكن لوحدات الماكرو استخدام نوعين من المراجع في "جداول البيانات" للإشارة إلى خلايا معينة، فيتم استخدام "المراجع المطلقة" على المواقع الدقيقة، مثل: الخلية "A5"، بينما يتم استخدام "المراجع ذات الصلة" لتحديد الموقع الحالي للمستخدم كنقطة بداية، مثل: الخلية الرابعة أسفل الموقع الحالي.
		</p>
	</div>
</blockquote>

<ul>
<li>
		رابعًا، حدد الصف الأول عن طريق النقر على الخلية التي اسمها "1".
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101902" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e31ddff_004-4.png.24f48575598d328d57b7f3ba7b0f5480.png" rel=""><img alt="004 - إنشاء ماكرو 4.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101902" data-unique="9am9hbvf0" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e418a78_004-4.thumb.png.82d3078981807a11774b0e56e17bd988.png" style="width: 750px; height: auto;"></a>
</p>

<ul>
<li>
		خامسًا، أعد تلوين لون التعبئة للصف العلوي من الأبيض إلى أي لون تريده.
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101903" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e4cdb72_005-5.png.d675b062cb966d2c2129e4c18b88f5bb.png" rel=""><img alt="005 - إنشاء ماكرو 5.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101903" data-unique="1bnp7xsbu" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e4cdb72_005-5.png.d675b062cb966d2c2129e4c18b88f5bb.png"></a>
</p>

<ul>
<li>
		سادسًا، أعد تلوين لون نص الصف العلوي من الأسود إلى أي لون تريده.
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101904" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e595ddc_006-6.png.705cc00592e8cdf85a4ce045eb5f63c4.png" rel=""><img alt="006 - إنشاء ماكرو 6.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101904" data-unique="f4c3wbbyu" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e595ddc_006-6.png.705cc00592e8cdf85a4ce045eb5f63c4.png"></a>
</p>

<ul>
<li>
		سابعًا، لتغميق النص اضغط على مفتاحي Ctrl + B من لوحة المفاتيح، أو مفتاحي Cmd + B في نظام macOS.
	</li>
	<li>
		ثامنًا، لتجميد الصف العلوي حدد القائمة "عرض"، ثم اختر منها "تجميد"، ثم اختر منها "صف واحد".
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101905" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e658240_007-7.png.09cf15b62b708dd34b98815d5bd43431.png" rel=""><img alt="007 - إنشاء ماكرو 7.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101905" data-unique="5n8145iyo" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e658240_007-7.png.09cf15b62b708dd34b98815d5bd43431.png" style="width: 600px; height: auto;"></a>
</p>

<ul>
<li>
		أخيرًا، انقر على "حفظ" في مربع حوار الماكرو، سيطلب منك مربع حوار جديد تسمية الماكرو، أدخل أي اسم تريده لكن يُفضل أن يكون ذا دلالة على وظيفته، كما يُفضل أن تكون التسمية بالإنجليزية، على سبيل المثال: "تنسيق الصف الرئيسي" أو "HeaderFormat"، ثم انقر على "حفظ".
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101906" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e6be6f9_008-8.png.a3ed1a1a8ded23e1c45521877a083334.png" rel=""><img alt="008 - إنشاء ماكرو 8.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101906" data-unique="z9f43aqxa" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e6be6f9_008-8.png.a3ed1a1a8ded23e1c45521877a083334.png" style="width: 350px; height: auto;"></a>
</p>

<p>
	أصبح لديك الآن ماكرو مخصص لتنسيق الصف الرئيسي، وذلك باستخدام واجهة مستخدم جداول البيانات.
</p>

<h3>
	استخدام الماكرو الخاص بك
</h3>

<p>
	يمكنك تطبيق الماكرو الجديد في "جداول البيانات" باتباع الإرشادات التالية:
</p>

<ul>
<li>
		أولًا، في جدول البيانات الحالي انقر على (+) الموجودة أسفل يمين النافذة، وذلك لإضافة ورقة جديدة.
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101907" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e74d1a0_009-9.png.4a2deafd3f981c7a443a231ec1e31d32.png" rel=""><img alt="009 - إنشاء ماكرو 9.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101907" data-unique="geab61tyi" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e74d1a0_009-9.png.4a2deafd3f981c7a443a231ec1e31d32.png" style="width: 450px; height: auto;"></a>
</p>

<ul>
<li>
		ثانيا، في الورقة الجديدة أضف بعض النصوص ابتداءً من الخلية A1 إلى الخلية C2.
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101908" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e7a13ae_010-10.png.46e8bb1d0e0a56ee339c485eb037d428.png" rel=""><img alt="010 - إنشاء ماكرو 10.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101908" data-unique="fynfs7f6e" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e7a13ae_010-10.png.46e8bb1d0e0a56ee339c485eb037d428.png" style="width: 450px; height: auto;"></a>
</p>

<ul>
<li>
		ثالثًا، حدد الصف الأول عن طريق النقر على الخلية التي اسمها "1".
	</li>
	<li>
		رابعًا، لتطبيق الماكرو على المنطقة المحددة، انقر على "الإضافات"، ثم اختر منها "وحدات الماكرو"، ثم اختر منها الاسم الذي أعطيته لوحدة الماكرو أثناء حفظه، وفي المثال الذي معنا سيكون باسم "تنسيق الصف الرئيسي".
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101909" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8e84c2ca_011-11.png.feceaf85198672b58cdc8ac17048cf34.png" rel=""><img alt="011 - إنشاء ماكرو 11.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101909" data-unique="koa89b3dk" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8ea6dfff_011-11.thumb.png.f7dae7b257835553e3173988d83b703e.png" style="width: 750px; height: auto;"></a>
</p>

<ul>
<li>
		خامسًا، سوف يطلب منك جدول البيانات إعطاء الإذن لوحدة الماكرو لكي تتمكن من تنفيذ الشيفرة البرمجية، فقط اضغط على زر "متابعة".
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101910" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8eb82a0e_012-12.png.eddc4722699f09ec30a24b7a82f4dbba.png" rel=""><img alt="012 - إنشاء ماكرو 12.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101910" data-unique="hd51i6tbh" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8eb82a0e_012-12.png.eddc4722699f09ec30a24b7a82f4dbba.png" style="width: 520px; height: auto;"></a>
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>تنويه</strong>: إذا كنت تستخدم حساب gmail.com فقد يظهر لك مربع حوار عن "تطبيق لم يتم التحقق منه" وذلك عند استخدام الشيفرة البرمجية لأول مرة، وتستخدم جوجل هذا الإجراء لتحذير المستخدمين الذين قد يستخدمون رمزًا من مؤلفين غير معروفين أو غير موثوق بهم، فإذا رأيت مربع الحوار هذا فلا بأس بالمتابعة لأنك مؤلف الشيفرة البرمجية، فقط اتبع التعليمات التي تظهر على النافذة لمتابعة مصادقة الشيفرة البرمجية.
		</p>
	</div>
</blockquote>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101911" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8ecb124d_013-13.png.ed4b16a1022a37f0749b2f0132403c05.png" rel=""><img alt="013 - إنشاء ماكرو 13.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101911" data-unique="sibw8rkq2" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8ecb124d_013-13.png.ed4b16a1022a37f0749b2f0132403c05.png" style="width: 500px; height: auto;"></a>
</p>

<ul>
<li>
		سادسًا، كرر الخطوة 4 لتشغيل الماكرو مرة أخرى، وذلك لأن عملية الحصول على إذن له أوقفت عملية التنفيذ.
	</li>
</ul>
<p>
	تهانينا، لقد تعلمت كيفية تطبيق وحدات الماكرو في جداول البيانات، ويجب أن يبدو جدول البيانات كما يلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101912" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8ed7bb18_014-14.png.b0b39bb5c262f98df564fc8fd1f966ae.png" rel=""><img alt="014 - إنشاء ماكرو 14.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101912" data-unique="xyw16l4r5" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8ed7bb18_014-14.png.b0b39bb5c262f98df564fc8fd1f966ae.png" style="width: 400px; height: auto;"></a>
</p>

<p>
	في الجزء التالي من هذا الدليل ستتعلم كيفية جعل وحدات الماكرو أكثر قوة، إليكم السر: عند تسجيل ماكرو ما تفعله حقًا هو كتابة شيفرة برمجية في Apps Script لكن من خلف الكواليس، فجداول البيانات هي التي تنشئ الشيفرة البرمجية التي تطابق إجراءات الماكرو، لذلك في القسم التالي ستتعلم كيفية تعديل الشيفرة البرمجية مباشرةً باستخدام محرر Apps Script في المتصفح.
</p>

<h2>
	وحدات الماكرو في محرر السكربت
</h2>

<p>
	أثناء إنشاء وحدة ماكرو تحفظ "جداول بيانات جوجل" إجراءاتك كدالة Apps Script، وعند تطبيق الماكرو تستدعي "جداول بيانات جوجل" دالة Apps Script لتطبيق هذه الإجراءات بالترتيب نفسه.
</p>

<h3>
	محرر السكربت
</h3>

<p>
	الآن بعد أن أنشأت وحدة ماكرو، يمكنك إلقاء نظرة على الشيفرة البرمجية الخاصة به، ولعرض الشيفرة البرمجية لهذا الماكرو انقر على "الإضافات"، ثم اختر منها "برمجة تطبيقات جوجل" لفتح محرر شيفرات البرمجة لـ Apps Script من خلال المتصفح.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101913" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8eea6e99_015-1.png.9d88da4d83c166cc64cf0c6115b1620d.png" rel=""><img alt="015 - تعديل الماكرو من خلال المحرر 1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101913" data-unique="uwsfz0k8v" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8eea6e99_015-1.png.9d88da4d83c166cc64cf0c6115b1620d.png" style="width: 700px; height: auto;"></a>
</p>

<p>
	يتيح لك محرر السكربت كتابة التعليمات البرمجية في Apps Script وتشغيل تلك النصوص البرمجية على خوادم جوجل.
</p>

<h3>
	تحليل الشيفرات البرمجية لوحدات الماكرو gs.
</h3>

<p>
	أنشأت جداول البيانات ملف السكربت "macros.gs" عند تسجيل وحدة الماكرو، وملئه بدالة Apps Script التي تسمى <code>HeaderFormat</code>، وهو نفس الاسم الذي كتبناه أثناء حفظ وحدة الماكرو في الخطوة التاسعة من خطوات "إنشاء ماكرو"، لكن في حالة كتابة اسم الماكرو باللغة العربية ستظهر لك دالة Apps Script باسم <code>MyFunction</code>، لذلك أكرر عليك باستخدم التسميات الإنجليزية.
</p>

<p>
	انظر إلى الصورة أدناه للتعرف على بنية دالة الماكرو في Apps Script، لكن انتبه إذا سجلت الخطوات بترتيب مختلف عن الذي نفذناه هنا، أو نقرت في جدول البيانات أثناء التسجيل، فقد تبدو الشيفرة البرمجية الخاصة بك مختلفة قليلاً عن هذه.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101914" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8efa1b9c_016-2.png.d05ab501406ca0bed591fac6e7fa5ecf.png" rel=""><img alt="016 - تعديل الماكرو من خلال المحرر 2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101914" data-unique="gbftr12wx" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8f36d470_016-2.thumb.png.dd65675dd82d2155195432ce756569c7.png" style="width: 550px; height: auto;"></a>
</p>

<ul>
<li>
		<strong>السطر الأول</strong>: عبارة عن تعليق توضيحي يؤثر على التفويض، تطلب معظم البرامج النصية من المستخدم بعض الأذونات قبل تشغيلها، وتتحكم هذه الأذونات في ما يسمح المستخدم للبرنامج النصي بتنفيذه، فعندما يكون التعليق <code>OnlyCurrentDoc</code> موجودًا في مشروع شيفرة برمجية، فإن Apps Script تطلب فقط الإذن للوصول إلى جدول البيانات الحالي وتحديثه، لكن بدون هذا التعليق سيطلب Apps Script إذنًا للوصول إلى جميع جداول بيانات المستخدم وتحديثها، لذلك من الأفضل دائمًا تضمين هذا التعليق التوضيحي عندما تعمل مع ملف واحد فقط، ويضيف مسجل الماكرو هذا التعليق تلقائيًا نيابة عنك.
	</li>
</ul>
<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4998_34" style="">
<span class="com">/** @OnlyCurrentDoc */</span></pre>

<ul>
<li>
		<strong>السطر الثاني</strong>: عبارة عن تحديد اسم الدالة كما ذكرنا سابقًا، ثم يلي الاسم قوسان لتمرير المُعَامل، لكن دوال الماكرو في Apps Script لا تحتاج إلى أي مُعَامل أو مدخلات، ثم يأتي في نهاية السطر القوس المعقوص الذي يحتوي جسم الدالة.
	</li>
</ul>
<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4998_36" style="">
<span class="kwd">function</span><span class="pln"> </span><span class="typ">HeaderFormat</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span></pre>

<ul>
<li>
		<strong>السطر الثالث</strong>: لاحقًا في هذا الدليل سوف نتناول "الأصناف Classes" و "المفاهيم Concepts" التي ينطوي عليها إنشاء الماكرو، لكن في الوقت الحالي يمكنك الاطلاع على أوصاف الشيفرة البرمجية في هذا السطر للحصول على فكرة عامة عن مكوناته ودوره في بناء الماكرو الخاص بك، فعلى سبيل المثال: هنا يُرجع <code>()getActive.</code> كائنًا يمثل ملف جدول البيانات النشط الحالي في "ورقة البيانات" ويخزنها في متغير اسمه <code>spreadsheet</code>.
	</li>
</ul>
<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4998_38" style="">
<span class="kwd">var</span><span class="pln"> spreadsheet </span><span class="pun">=</span><span class="pln"> </span><span class="typ">SpreadsheetApp</span><span class="pun">.</span><span class="pln">getActive</span><span class="pun">();</span></pre>

<ul>
<li>
		<strong>السطرين الرابع والخامس</strong>: هذان السطران يتوافقان مع إجراء النقر على الصف الأول لتمييزه، وهذا الإجراء يسمى "التنشيط"، فيخزن السطر الرابع الورقة الحالية في متغير باسم <code>sheet</code>، بينما يحصل السطر الخامس على الصف الأول بالكامل باستخدام الـ Method أو التابع <code>()getRange.</code> ثم استدعاء التابع <code>()activate.</code> لتنشيطه، وحدد الصف الأول باستخدام أرقام الصفوف والأعمدة، فالاستدعاء <code>()spreadsheet.getCurrentCell().getRow</code> يُرجع رقم الصف الحالي، أما الاستدعاء <code>()sheet.getMaxColumns</code> يُرجع الحد الأقصى لعدد الأعمدة في الورقة.
	</li>
</ul>
<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4998_40" style="">
<span class="kwd">var</span><span class="pln"> sheet </span><span class="pun">=</span><span class="pln"> spreadsheet</span><span class="pun">.</span><span class="pln">getActiveSheet</span><span class="pun">();</span><span class="pln">
sheet</span><span class="pun">.</span><span class="pln">getRange</span><span class="pun">(</span><span class="pln">spreadsheet</span><span class="pun">.</span><span class="pln">getCurrentCell</span><span class="pun">().</span><span class="pln">getRow</span><span class="pun">(),</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">,</span><span class="pln"> sheet</span><span class="pun">.</span><span class="pln">getMaxColumns</span><span class="pun">()).</span><span class="pln">activate</span><span class="pun">();</span></pre>

<ul>
<li>
		<strong>السطر السادس إلى الثامن</strong>: الاستدعاء <code>()getActiveRangeList.</code> يُرجع قائمة بالنطاقات النشطة الحالية في جدول البيانات وهو الصف الأول بالكامل في مثالنا، وتعمل كل من <code>(setBackground(color</code> و <code>(setFontColor(color</code> على تغيير سمات اللون للخلايا في النطاق النشط، أما التابع <code>(setFontWeight(fontWeight</code> يضبط وزن الخط للخلايا في النطاق النشط.
	</li>
</ul>
<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4998_42" style="">
<span class="pln">spreadsheet</span><span class="pun">.</span><span class="pln">getActiveRangeList</span><span class="pun">().</span><span class="pln">setBackground</span><span class="pun">(</span><span class="str">'#38761d'</span><span class="pun">)</span><span class="pln">
</span><span class="pun">.</span><span class="pln">setFontColor</span><span class="pun">(</span><span class="str">'#ffffff'</span><span class="pun">)</span><span class="pln">
</span><span class="pun">.</span><span class="pln">setFontWeight</span><span class="pun">(</span><span class="str">'bold'</span><span class="pun">);</span></pre>

<ul>
<li>
		<strong>السطر التاسع</strong>: يجمد هذا السطر الصف الأول من الماكرو.
	</li>
</ul>
<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4998_44" style="">
<span class="pln">spreadsheet</span><span class="pun">.</span><span class="pln">getActiveSheet</span><span class="pun">().</span><span class="pln">setFrozenRows</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);</span></pre>

<p>
	هذه هي الشيفرة البرمجية التي أنشأتها عندما سجلت الماكرو الخاص بك، لا تقلق بشأن أي مصطلحات أو أساليب غير مألوفة مذكورة أعلاه، يهدف هذا التحليل للنص البرمجي إلى جعلك تفكر في بعض الأفكار التي يركز عليها Apps Script في دالة ماكرو نموذجية.
</p>

<h3>
	تخصيص وحدات الماكرو باستخدام محرر Apps Script
</h3>

<p>
	يعرض محرر Apps Script الماكرو الذي أنشأته مسبقًا في جداول بيانات جوجل، فمن خلال ضبط محتويات جسم "الدالة Function" يمكنك تخصيص تعليمات الماكرو لاتخاذ إجراءات مختلفة أو إضافية، وتوضح التمارين التالية طرائق مختلفة للتعامل مع وحدات الماكرو باستخدام محرر السكربت.
</p>

<h4>
	تغيير الخلايا المستهدفة
</h4>

<p>
	لنفترض أنك تريد تعديل الماكرو ليؤثر فقط على الأعمدة التسعة الأولى فقط من الصف الأول بدلاً من الصف بأكمله، نعم يمكنك حذف الماكرو وإعادة تسجيله، لكن باستخدام محرر Apps Script يمكنك إجراء هذه التغييرات مباشرة، وإليك طريقة واحدة للقيام بذلك:
</p>

<p>
	بدايةً، في محرر السكربت استبدل الاستدعاء <code>()sheet.getMaxColumns</code> بالعدد "9"، يغير هذا التعديل نطاق الخلايا التي يؤثر عليها الماكرو في جدول البيانات.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101915" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8f67649c_017-3.png.4e0f749e2bfecb356a20a662b6dff9d9.png" rel=""><img alt="017 - تعديل الماكرو من خلال المحرر 3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101915" data-unique="rz3jdwocu" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8f67649c_017-3.png.4e0f749e2bfecb356a20a662b6dff9d9.png" style="width: 700px; height: auto;"></a>
</p>

<p>
	بعد تنفيذ التعديل ستلاحظ ظهور دائرة برتقالية بجوار "وحدات الماكرو gs." مما يشر إلى وجود تعديلات غير محفوظة، احفظ الشيفرة البرمجية الخاصة بك بالنقر على أيقونة "حفظ".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101916" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8f70dcd6_018-4.png.9489a63543b437b2efcf4f49f258c990.png" rel=""><img alt="018 - تعديل الماكرو من خلال المحرر 4.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101916" data-unique="f1go1go9y" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8f70dcd6_018-4.png.9489a63543b437b2efcf4f49f258c990.png" style="width: 550px; height: auto;"></a>
</p>

<p>
	خذ نسخة جديدة من جدول البيانات "أفضل 10 أفلام لعام 2022" ثم طبق عليه وحدة الماكرو.
</p>

<h4>
	تغيير الألوان بوحدة الماكرو
</h4>

<p>
	لمساعدتك في تصميم نظام ألوان وحدات الماكرو أو العناصر الأخرى في "جداول البيانات"، يمكن لـ Apps Script تعديل لون تعبئة خلفية النطاق أو لون النص، اعمل من خلال الإرشادات التالية لتتعلم كيف يمكنك تخصيص ألوان الماكرو:
</p>

<p>
	بدايةً، افتح جدول البيانات "أفضل 10 أفلام لعام 2022"، ثم حدد الصف الأول عن طريق النقر على الخلية التي اسمها "1"، واستبدل في محرر السكربت نظام الألوان الستة عشري للخلفية من <code>38761d#</code> إلى <code>afeeee#</code>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101917" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8f8a5ecf_019-5.png.f2d041d3735d7c42ab02fe274a9e84e5.png" rel=""><img alt="019 - تعديل الماكرو من خلال المحرر 5.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101917" data-unique="kd3pn85a5" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8f8a5ecf_019-5.png.f2d041d3735d7c42ab02fe274a9e84e5.png" style="width: 600px; height: auto;"></a>
</p>

<p>
	احفظ الشيفرة البرمجية الخاص بك بالنقر على أيقونة "حفظ"، ثم حدد من قائمة الدوال اسم الدالة التي نعمل عليها وهي <code>HeaderFormat</code>، ثم انقر على الزر "Run".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101918" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8f985d6a_020-6.png.c19567ffe06664761e6c20c9802d99ec.png" rel=""><img alt="020 - تعديل الماكرو من خلال المحرر 6.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101918" data-unique="i1hsvorf1" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8f985d6a_020-6.png.c19567ffe06664761e6c20c9802d99ec.png" style="width: 550px; height: auto;"></a>
</p>

<p>
	ستجد أن جدول البيانات أُعيد تلوين الخلفية لأول 10 أعمدة في الصف الأول بلون فيروزي مخصص، واستنادًا لما تعلمته سوف أترك لك مهمة تغيير لون النص بالصف الأول من اللون الأبيض إلى اللون الأسود.
</p>

<p>
	في القسم التالي من هذا الدليل ستتمكن من عرض طريقة أخرى تساعدك بها Apps Script في العمل مع جداول بيانات جوجل، وهي: الدوال المخصصة.
</p>

<h2>
	أكتب نصك البرمجي الأول: الدوال المخصصة
</h2>

<p>
	مثل معظم تطبيقات جداول البيانات، تحتوي جداول بيانات جوجل على العديد من الدوال المضمنة مثل '()SUM=' التي تتيح إجراء عمليات حسابية سريعة على بيانات جدول البيانات، والدوال المخصصة هي ببساطة دالة تحددها باستخدام Apps Script، وبمجرد تحديد دالة مخصصة يمكنك استخدامها في أي مكان في جدول البيانات تمامًا مثل الدالة المضمنة.
</p>

<p>
	ويوضح لك هذا القسم كيفية إنشاء دالة مخصصة في Apps Script تقوم بإجراء تحويل نقدي.
</p>

<h3>
	إنشاء ملف نصي
</h3>

<p>
	باستخدام نفس جدول البيانات الذي نعمل عليه "أفضل 10 أفلام لعام 2022"، اتبع هذه الإرشادات لمعرفة كيفية إنشاء نَص برمجي جديد، والذي يمكنك استخدامه في النهاية لإنشاء أول دالة مخصصة لك:
</p>

<ul>
<li>
		أولًا، افتح محرر السكربت كما تعلمنا.
	</li>
	<li>
		ثانيًا، بجوار القائمة "الملفات" انقر على الأيقونة (+) لإضافة ملف، ثم اختر منها "نص برمجي".
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101919" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8faa8341_021-1.png.1c8825f067e8339da16efe30d11f1e16.png" rel=""><img alt="021 - إنشاء دالة مخصصة 1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101919" data-unique="5t0m664sz" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8faa8341_021-1.png.1c8825f067e8339da16efe30d11f1e16.png" style="width: 400px; height: auto;"></a>
</p>

<ul>
<li>
		ثالثًا، سمّ ملف الشيفرة البرمجية الجديد "ChangeCurrency"، ثم اضغط على مفتاح "Enter" من لوحة المفاتيح، وستلاحظ أن Apps Script يُلحق تلقائيًا الامتداد "gs." لاسم ملف الشيفرة البرمجية.
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101920" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8fb8b814_022-2.png.0e26228769e9b3cdbc6124b32994b457.png" rel=""><img alt="022 - إنشاء دالة مخصصة 2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101920" data-unique="isyirjgyq" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8fb8b814_022-2.png.0e26228769e9b3cdbc6124b32994b457.png" style="width: 500px; height: auto;"></a>
</p>

<p>
	الآن بعد أن أنشأت ملف شيفرة برمجية لدالة مخصصة، يمكنك ملؤه بالشيفرة البرمجية.
</p>

<h3>
	تحويل الدولار الأمريكي إلى جنيه مصري
</h3>

<p>
	لنفترض أنك أردت تعديل بيانات "أعلى 10 أفلام من حيث إجمالي الدخل لعام 2022" لتظهر القيم بالدولار الأمريكي والجنيه المصري، فباستخدام الدوال المخصصة يمكنك عمل ذلك بسهولة، يوضح التمرين التالي كيفية إنشاء دالة مخصصة لتحويل قيم الدولار إلى قيم الجنيه المصري رياضيًا.
</p>

<p>
	لكن قبل أن تتمكن من كتابة أول دالة مخصصة لك، عَدِّل مجموعة البيانات الخاصة بك للسماح للدالة بإظهار مخرجات مناسبة، ولفعل هذا نفذ الآتي.
</p>

<p>
	في جداول البيانات "أفضل 10 أفلام لعام 2022" انقر بزر الفأرة الأيمن على العمود "G"، ومن القائمة التي ستظهر انقر على "إدراج عمود واحد لليسار".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101921" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8fc86c94_023-3.png.b64d298f8f9f556f22103148f2d03c3a.png" rel=""><img alt="023 - إنشاء دالة مخصصة 3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101921" data-unique="vhuf29ykp" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8fc86c94_023-3.png.b64d298f8f9f556f22103148f2d03c3a.png" style="width: 450px; height: auto;"></a>
</p>

<p>
	حدد الخلية "H1" ثم أعطها هذا الاسم "الإيرادات عالميًا بالجنيه المصري".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101922" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8fd928b1_024-4.png.ad601ea27c565edb7ca783e8b1f55822.png" rel=""><img alt="024 - إنشاء دالة مخصصة 4.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101922" data-unique="gi409kyxy" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8fd928b1_024-4.png.ad601ea27c565edb7ca783e8b1f55822.png" style="width: 580px; height: auto;"></a>
</p>

<p>
	الآن أصبح لديك عمود يمكنه تخزين نتائج دالة تحويل العملة المخصصة، بعد ذلك يمكنك استخدام محرر السكربت لإنشاء أول دالة مخصصة لك.
</p>

<p>
	اذهب بعدها إلى المحرر وحدد الملف النصي الذي أنشأته باسم "ChangeCurrency.gs" واحذف الشيفرة البرمجية الموجودة بداخله واستبدله بالشيفرة البرمجية التالية:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4998_57" style="">
<span class="com">/**
 تحول الدولار الأمريكي إلى جنيه مصري *
*
* @param {number} dollars إجمالي الإيرادات بالدولار الأمريكي
* @return {number} EGPs إجمالي المبلغ المحول إلى الجنيه المصري
* @customfunction دالة مخصصة
 */</span><span class="pln">
</span><span class="kwd">function</span><span class="pln"> USDTOEGP</span><span class="pun">(</span><span class="pln">dollars</span><span class="pun">){</span><span class="pln">
  </span><span class="kwd">var</span><span class="pln"> EGP </span><span class="pun">=</span><span class="pln"> dollars </span><span class="pun">*</span><span class="pln"> </span><span class="lit">18.31</span><span class="pun">;</span><span class="pln"> 
  </span><span class="kwd">return</span><span class="pln"> EGP</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

<p>
	هذه هي الشيفرة البرمجية التي سوف تحول الدولار الأمريكي إلى الجنيه المصري، الآن جرب الإرشادات أدناه وشاهد كيف يمكنك تشغيل دالة مخصصة في جدول البيانات.
</p>

<p>
	احفظ بعد ذلك الشيفرة البرمجية الخاصة بك بالنقر على أيقونة "حفظ" ثم اذهب إلى جدول البيانات "أفضل 10 أفلام لعام 2022"، ثم حدد الخلية "H2"، واكتب في شريط المعادلات هذه المعادلة <code>(USDTOEGP(G2=</code>، ثم اضغط على زرار "Enter" من لوحة المفاتيح.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101923" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8fea7057_025-5.png.c40820cc26f014438fb3988307f3223e.png" rel=""><img alt="025 - إنشاء دالة مخصصة 5.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101923" data-unique="0aodjecu7" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8fea7057_025-5.png.c40820cc26f014438fb3988307f3223e.png" style="width: 450px; height: auto;"></a>
</p>

<p>
	ولتطبيق هذه المعادلة على باقي الخلايا في العمود، اتبع التالي:
</p>

<p>
	حرك بعد ذلك مؤشر الفأرة إلى الزاوية السفلية اليسرى للخلية "H2" وحدد المربع الأزرق الصغير، ويجب أن يتحول مؤشر الفأرة إلى علامة (+) عند الإشارة إلى المربع الأزرق بعدها اسحب المربع الأزرق للأسفل لتحديد جميع الخلايا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101924" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8ff92ab1_026-6.png.29ec59b17aa7e49f196e52230444208a.png" rel=""><img alt="026 - إنشاء دالة مخصصة 6.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101924" data-unique="u564jspg3" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d8ff92ab1_026-6.png.29ec59b17aa7e49f196e52230444208a.png" style="width: 450px; height: auto;"></a>
</p>

<p>
	تهانينا، لقد أنشأت أول دالة مخصصة لك تعمل على سرد العمود "H" تحويلات الجنيه المصري لقيم الدولار الأمريكي الموجودة في العمود "G"، وفي القسم التالي تحليل للشيفرة البرمجية لهذه الدالة.
</p>

<h3>
	تحليل الشيفرة البرمجية للدالة المخصصة ()USDTOEGP
</h3>

<p>
	أولًا، توضح التعليقات الأولية الغرض من الشيفرة البرمجية:
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4998_61" style="">
<span class="com">/**
 تحول الدولار الأمريكي إلى جنيه مصري *
 *
 * @param {number} dollars إجمالي الإيرادات بالدولار الأمريكي
 * @return {number} EGPs إجمالي المبلغ المحول إلى الجنيه المصري
 * @customfunction دالة مخصصة
 */</span></pre>

<p>
	تُستخدم كتل التعليقات مثل هذه في البرمجة لشرح المهمة التي تنفذها الشيفرة البرمجية، ففي هذا التعليق يمكنك تحديد جزأين من التعليقات به: الأول وصف الدالة (تحويل الدولارات إلى جنيهات)، والثاني التعليقات التوضيحية التي تصف معاملات الدالة ونوع الإرجاع.
</p>

<p>
	فعندما تكتب التعليقات التوضيحية يستخدم برمجة التطبيقات <a href="https://en.wikipedia.org/wiki/JSDoc" rel="external nofollow">JSDoc</a> لمساعدتك في توثيق وإنشاء تلميحات الإكمال التلقائي لشيفرتك البرمجية.
</p>

<ul>
<li>
		<strong>فالتعليق param@</strong>: يستخدم لوصف كل مُعَامل تم تمريرها إلى الدالة.
	</li>
	<li>
		<strong>والتعليق return@</strong>: يستخدم لوصف ما تعيده الدالة.
	</li>
	<li>
		<strong>والتعليق customfunction@</strong>: يُخطر هذا التعليق جدول البيانات بالإكمال التلقائي لدالتك المخصصة، تمامًا كما تُكمل جداول البيانات تلقائيًا الدوال المضمنة عند إدخال اسمها في خلية، لذلك يجب عليك استخدام هذا التعليق مع أي دالة مخصصة تنشئها.
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101925" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d900c7ba0_027-7.png.1fa16489798955350028f8888cc64636.png" rel=""><img alt="027 - إنشاء دالة مخصصة 7.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101925" data-unique="sbepx6h3s" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d900c7ba0_027-7.png.1fa16489798955350028f8888cc64636.png" style="width: 450px; height: auto;"></a>
</p>

<p>
	ستلاحظ بالصورة أعلاه أن النص الذي يظهر في نافذة الإكمال التلقائي المنبثقة يتطابق تمامًا مع نص الوصف الذي وضعته في كتلة التعليق، يمكنك جعل دوالك المخصصة أسهل في الاستخدام عن طريق التأكد من أن الأوصاف التي تنشئها مكتوبة جيدًا وكاملة.
</p>

<p>
	ثانيًا، تأخذ الدالة <code>()USDTOEGP</code> متغير رقمي وهي "قيمة العملة بالدولار"، ثم يضربها في سعر الصرف وهو رقم ثابت، ثم يعيد القيمة المحولة إلى الجنيه المصري في المتغير الرقمي <code>EGP</code>، ومُعَامل الإدخال <code>(dollars)</code> هي القيمة المضمنة في الخلية المحددة عند إضافة دالة مخصصة إلى خلية، ففي مثالنا تأتي مبالغ الإدخال بالدولار من العمود "G"، وتوضع قيمة الإخراج <code>EGP</code> في الخلية التي كُتبت بها الدالة بالعمود "H".
</p>

<p>
	ويمكن أن تُرجع الدوال المخصصة قيم رقمية أو سلسلة نصية، كما سترى في القسم التالي.
</p>

<h3>
	إرجاع سلسلة نصية
</h3>

<p>
	لنفترض أنك أردت أن يشتمل الناتج الرقمي للدالة <code>()USDTOEGP</code> على بادئة تشير إلى أن العُملة المستخدم هي الجنيه المصري، يمكنك عمل ذلك في Apps Script باستخدام عامل التشغيل (+) كما هو موضح في الإرشادات التالية:
</p>

<ul>
<li>
		أولًا، في محرر السكربت حَدِّث التعليق التوضيحي <code>return@</code> لإرجاع سلسلة نصية بدلًا من رقم.
	</li>
</ul>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="101926" href="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d901944ac_028-8.png.95bb9a2a0d29bd4eb20c222321fc7da7.png" rel=""><img alt="028 - إنشاء دالة مخصصة 8.png" class="ipsImage ipsImage_thumbnailed" data-fileid="101926" data-unique="9cq39u1t8" src="https://academy.hsoub.com/uploads/monthly_2022_06/62b6d901944ac_028-8.png.95bb9a2a0d29bd4eb20c222321fc7da7.png" style="width: 550px; height: auto;"></a>
</p>

<ul>
<li>
		ثانيًا، تعديل شيفرة الإرجاع <code>return</code> بالشكل التالي:
	</li>
</ul>
<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_4998_68" style="">
<span class="kwd">return</span><span class="pln"> </span><span class="str">'جنيه مصري'</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> EGP</span><span class="pun">;</span></pre>

<p style="margin-right: 40px;">
	يضيف عامل التشغيل (+) السلسلة النصية 'جنيه مصري' إلى مقدمة القيمة الرقمية الموجودة في <code>EGP</code>.
</p>

<ul>
<li>
		ثالثًا، احفظ الشيفرة البرمجية الخاصة بك بالنقر على أيقونة "حفظ".
	</li>
</ul>
<p>
	أصبحت الآن دالتك المخصصة لا تحول الدولار الأمريكي إلى الجنيه المصري فحسب، بل تضيف أيضًا سلسلة نصية تفيد بنوع العملة المعروضة.
</p>

<h2>
	خاتمة
</h2>

<p>
	وإلى هنا نكون قد وصلنا إلى نهاية هذا الدرس من دليل أساسيات برمجة التطبيقات باستخدام جداول بيانات جوجل الذي تعلمنا فيه إنشاء وتعديل وحدات ماكرو والدوال المخصصة، وفي الدرس القادم سوف نتعرف على "الأصناف Classes" والمصطلحات الأساسية لخدمة جداول بيانات Apps Script التي تمكنك من التحكم بدقة في قيم البيانات وعرضها في جداول بيانات جوجل باستخدام Apps Script.
</p>

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

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<p>
			<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%88%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r521/" rel="">إنشاء وتصميم جداول بيانات جوجل Google Sheets</a>
		</p>
	</li>
</ul>
]]></description><guid isPermaLink="false">746</guid><pubDate>Sat, 02 Jul 2022 15:00:00 +0000</pubDate></item><item><title>&#x625;&#x646;&#x634;&#x627;&#x621; &#x648;&#x62A;&#x635;&#x645;&#x64A;&#x645; &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644; Google Sheets</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%88%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r521/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_10/6157613f8cc68_-----Google-Sheets--Google-Sheets----Google-Sheets-.png.b4d1ca9b52458455b084731c63bbf784.png" /></p>

<p>
	تساعد جداول بيانات جوجل المستخدم على إنشاء جداول بيانات على الإنترنت وتعديلها وتنسيقها ومشاركتها مع الآخرين مجانًا ضمن معايير عالية من الأمن والحماية، كما تتيح لك جداول بيانات جوجل إمكانية عرض بياناتك من خلال مخططات ورسوم بيانية ملونة. إلى جانب توفيرها لك خيارات الصيغ والجداول المحورية والتنسيق الشرطي، وتسهيل الكثير من المهام الشائعة لجداول البيانات.
</p>

<p>
	يمكنك الدخول إلى جداول بياناتك وإنشائها وتعديلها سواء من <a href="https://academy.hsoub.com/freelance/finance/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-%D9%87%D8%A7%D8%AA%D9%81%D9%83-%D9%84%D8%AC%D9%86%D9%8A-%D8%A7%D9%84%D9%85%D8%A7%D9%84-r315/" rel="">هاتفك المحمول</a> أو <a href="https://academy.hsoub.com/certificates/comptia/%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8-%D8%A7%D9%84%D9%85%D8%AD%D9%85%D9%88%D9%84-r67/" rel="">حاسوبك الشخصي</a>، حيث تتميز جداول بيانات جوجل بأنها لا تجعلك مضطرًا للنقر على حفظ في كل مرة تجري فيها تعديلات على بياناتك، بل تُحفظ جميع التغييرات تلقائيًا أثناء الكتابة والتعديل، كما يمكنك العودة إلى سجلات النسخ السابقة بعرض الإصدارات القديمة من جدول البيانات ذاته، ومعرفة تاريخ التعديل والمستخدم الذي عدّل على البيانات.
</p>

<p>
	يمنحك جوجل إمكانية فتح ملفات مايكروسوفت إكسل باستخدام <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%88%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r521/" rel="">جداول بيانات جوجل</a>، كما يمنحك إمكانية تحويل ملفات مايكروسوفت إكسل إلى جداول بيانات جوجل والعكس.
</p>

<h2>
	إنشاء ملف جداول بيانات جوجل
</h2>

<p>
	لإنشاء جدول بيانات جوجل، عليك اتباع الخطوات التالية: أدخل إلى تطبيق <a href="https://www.google.com/intl/ar/drive/" rel="external nofollow">جوجل درايف</a>، وسجّل الدخول باستخدام بريدك الإلكتروني وكلمة المرور.
</p>

<p>
	اضغط على زر "جديد" لإنشاء ملف جديد.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78438" href="https://academy.hsoub.com/uploads/monthly_2021_10/6157615494823_1_.PNG.c7a5ddec87c1a40de3320711651e2ad1.PNG" rel=""><img alt="1_ملف جديد.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78438" data-unique="vqon9s184" src="https://academy.hsoub.com/uploads/monthly_2021_10/61576156ca042_1_.thumb.PNG.56590e01890a472f56d53d51b941d50c.PNG" style="width: 600px; height: auto;"></a>
</p>

<p>
	ستظهر لك مجموعة من الخيارات لإنشاء الملفات والمجلدات. يتيح لك جوجل درايف خيارات إنشاء مجلد جديد أو ملف جديد، كما يتيح لك إمكانية تحميل ملفات أو مجلدات موجودة على جهازك. يمكنك أيضًا ترتيب ملفاتك في مجلدات، بحيث يمكنك إنشاء مجلدًا ثم إضافة الملف بداخله. ولإنشاء ملف <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%88%D8%AA%D8%B5%D9%85%D9%8A%D9%85-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r521/" rel="">جدول بيانات</a>، اضغط على خيار "جداول بيانات Google".
</p>

<p style="text-align: center;">
	<img alt="2_إنشاء جدول بيانات.png" class="ipsImage ipsImage_thumbnailed" data-fileid="78449" data-unique="jbnybf8ui" src="https://academy.hsoub.com/uploads/monthly_2021_10/615761871b67c_2_.png.decbbc0a8c21166bc05b4e8e4fe9fb2b.png"></p>

<p>
	ستظهر لك الواجهة التالية لجداول بيانات جوجل، وهي شبيهة بملفات مايكروسوفت إكسل التي تتكون من مجموعة من الصفوف والأعمدة مع رقم لكل صف بدءًا من الرقم 1، وحرفًا لكل عمود بدءًا من الحرف A.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78450" href="https://academy.hsoub.com/uploads/monthly_2021_10/6157618adf0e0_3_.PNG.183127ca8d4383f0780b42af818aa2b1.PNG" rel=""><img alt="3_واجهة جوجل شييت.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78450" data-unique="ffmkbllip" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157618b721e0_3_.thumb.PNG.a311808de5e3934736c6d836fb36507f.PNG" style="width: 600px; height: auto;"></a>
</p>

<p>
	يظهر الملف المتواجد في أعلى يمين الصفحة بعنوان "جدول بيانات بدون عنوان". اضغط على العنوان لتحريره، وأضف عنوانًا للملف وليكن "بيانات الموظفين 2021".
</p>

<p style="text-align: center;">
	<img alt="4_تسمية جدول البيانات.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78451" data-unique="wo7ozwuno" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157618cd4ed7_4_.PNG.5f5516e758e8dfc288451c6f165a36b6.PNG"></p>

<h2>
	تنسيق الخلايا والبيانات
</h2>

<p>
	قبل بدء إضافة البيانات في الجدول، سنحوّل اتجاه ورقة العمل من اليمين إلى اليسار، وذلك باستخدام أيقونة تغيير اتجاه ورقة العمل والموجودة في الشريط الرئيسي العلوي للتطبيق.
</p>

<p style="text-align: center;">
	<img alt="5_ورقة من اليمين لليسار.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78453" data-unique="eq2vx8e55" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157618eb0397_5_.PNG.3bcfd049ad8662f1b8621d1555021076.PNG" style="width: 600px; height: auto;"></p>

<p>
	لاحظ أن اتجاه ورقة العمل أصبح من اليمين إلى اليسار وأصبح عمود A في الجهة اليمنى من الصفحة.
</p>

<p style="text-align: center;">
	<img alt="6_تطبيق الورقة من اليمين.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78454" data-unique="l7s7v113s" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157618fec982_6_.PNG.c05710bfd488939030f047c66008b663.PNG" style="width: 600px; height: auto;"></p>

<p>
	أضف البيانات التالية للموظفين والتي تشمل الرقم المتسلسل والاسم الأول واسم العائلة والراتب الشهري والراتب السنوي.
</p>

<p style="text-align: center;">
	<img alt="7_البيانات.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78455" data-unique="pevdco7bv" src="https://academy.hsoub.com/uploads/monthly_2021_10/61576191c0c7a_7_.PNG.0966036929993978c7303938234547ea.PNG" style="width: 600px; height: auto;"></p>

<p>
	حدّد البيانات واختر خيار "توسيط" ضمن خيارات المحاذاة، وذلك لتوسيط كافة البيانات في منتصف الخلايا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78456" href="https://academy.hsoub.com/uploads/monthly_2021_10/615761936ee12_8_.png.526caa6ef3438b5bee4e0aa7506fee49.png" rel=""><img alt="8_توسيط البيانات.png" class="ipsImage ipsImage_thumbnailed" data-fileid="78456" data-unique="he1xl9erk" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157619469a61_8_.thumb.png.9b264b2b2b4584eeacd813bce1446825.png" style="width: 600px; height: auto;"></a>
</p>

<p>
	حدد عناوين الأعمدة واختر خيار تنسيق "غامق".
</p>

<p style="text-align: center;">
	<img alt="9_خط غامق.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78457" data-unique="hi92zx7qi" src="https://academy.hsoub.com/uploads/monthly_2021_10/61576195ba73e_9_.PNG.4a082e786b4e4033f029087e2ea9bc85.PNG" style="width: 600px; height: auto;"></p>

<p>
	حدد عناوين الأعمدة، واختر محاذاة رأسية للوسط لعناوين الأعمدة لضمان محاذاتها في منتصف الخلية رأسيًا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78428" href="https://academy.hsoub.com/uploads/monthly_2021_10/6157613909b71_10_.png.6ad501a5886370e5865e19f75cc1f31b.png" rel=""><img alt="10_محاذاة رأسية.png" class="ipsImage ipsImage_thumbnailed" data-fileid="78428" data-unique="hbapi61gf" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157613909b71_10_.png.6ad501a5886370e5865e19f75cc1f31b.png"></a>
</p>

<p>
	أضف تنسيق عملة الدولار الأمريكي لقيمة الراتب الشهري والسنوي للموظف، وذلك بتحديد أعمدة الراتب الشهري والسنوي، ومن ثم اضغط على خيار "رقم" من قائمة تنسيق واختيار عملة "دولار أمريكي"، عندها ستلاحظ إضافة رمز عملة الدولار ($) للخلايا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78429" href="https://academy.hsoub.com/uploads/monthly_2021_10/6157613ad5fc0_11_.png.edb2c9f8f62acf00dade07a98367ada9.png" rel=""><img alt="11_تنسيق عملة دولار.png" class="ipsImage ipsImage_thumbnailed" data-fileid="78429" data-unique="2ca6gebsj" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157613d0038a_11_.thumb.png.6cb8b6b22f7a1836b14c51ee7074c391.png"></a>
</p>

<p style="text-align: center;">
	<img alt="14_ناتج تنسيق الدولار.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78432" data-unique="n66evw2be" src="https://academy.hsoub.com/uploads/monthly_2021_10/615761456a132_14_.PNG.7591903d44a7434580921e6cad67d6ca.PNG"></p>

<p>
	من قائمة تنسيق، اختر "تبديل الألوان"، وعندها ستظهر قائمة جديدة تحتوي عدة خيارات ل<a href="https://academy.hsoub.com/design/graphic/%D9%83%D9%84-%D9%85%D8%A7-%D9%8A%D8%AC%D8%A8-%D8%B9%D9%84%D9%8A%D9%83-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D8%B9%D9%86-%D9%86%D8%B8%D8%B1%D9%8A%D8%A9-%D8%A7%D9%84%D8%A3%D9%84%D9%88%D8%A7%D9%86-%D9%84%D8%BA%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D8%B5%D9%85%D9%85%D9%8A%D9%86-r565/" rel="">تنسيق ألوان</a> الجدول.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78430" href="https://academy.hsoub.com/uploads/monthly_2021_10/6157613feeb50_13_.png.cc8b7bda5c944ee88a97483dd39e6b70.png" rel=""><img alt="13_تنسيق تبديل الألوان.png" class="ipsImage ipsImage_thumbnailed" data-fileid="78430" data-unique="i518cbtzg" src="https://academy.hsoub.com/uploads/monthly_2021_10/61576140f315d_13_.thumb.png.055ceea6d6479293c25e033b9d1dd7dd.png"></a>
</p>

<p>
	بإمكانك اختيار نمط جاهز من الأنماط التلقائية، كما يمكنك أيضًا تحديد خيارات رأس أو تذييل في حال احتوى جدول البيانات في ملفك على رأس وتذييل، وذلك لتخصيصهم بتنسيق خاص.
</p>

<p>
	وبإمكانك تخصيص نمط باختيار ألوان مخصصة لرأس الجدول والخلايا وذلك بتحديد ثلاثة خيارات. الخيار الأول هو لون الرأس، والخيارين الثاني والثالث هما خيارات ألوان تعبئة خلايا الجدول. بعد تحديد الألوان اضغط على زر "تم"، ويمكنك إلغاء التنسيق وذلك بالضغط على خيار "إزالة الألوان البديلة".
</p>

<p>
	اختر الألوان التي تناسبك إما من الأنماط التلقائية أو المخصصة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78431" href="https://academy.hsoub.com/uploads/monthly_2021_10/6157614354256_14_.PNG.bf60961d5ca94f7fdd532cf920a80919.PNG" rel=""><img alt="14_خيارات تبديل الألوان.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78431" data-unique="dahujv457" src="https://academy.hsoub.com/uploads/monthly_2021_10/615761448b55e_14_.thumb.PNG.fb14068a46db43c669303fbf747ab4c0.PNG"></a>
</p>

<p>
	الآن أصبح لدينا تنسيق متكامل للخلايا والبيانات مثل الشكل التالي:
</p>

<p style="text-align: center;">
	<img alt="15_ناتج تبديل الألوان.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78433" data-unique="93z8ymycz" src="https://academy.hsoub.com/uploads/monthly_2021_10/61576147672db_15_.PNG.daa26885716c0fe4b696bd82b864d598.PNG" style="width: 600px; height: auto;"></p>

<h2>
	التنسيق الشرطي
</h2>

<p>
	نفترض أننا نريد تنسيق قيم الراتب السنوي بناءً على التصنيفات التالية:
</p>

<ul>
<li>
		الراتب الذي قيمته تساوي أو تزيد عن 14000$، تنسيق تعبئة الخلايا بلون أحمر فاتح.
	</li>
	<li>
		الراتب الذي تقل قيمته عن 10000$، تنسيق تعبئة الخلايا بلون أخضر فاتح.
	</li>
	<li>
		الراتب الذي تقل قيمته عن 8000$، تنسيق تعبئة الخلايا بلون أصفر فاتح.
	</li>
</ul>
<p>
	ولتنفيذ ذلك اذهب إلى قائمة التنسيق، واختر "تنسيق شرطي".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78434" href="https://academy.hsoub.com/uploads/monthly_2021_10/6157614849c62_16_.png.080a901738b5059c90564725a51de80b.png" rel=""><img alt="16_تنسيق شرطي.png" class="ipsImage ipsImage_thumbnailed" data-fileid="78434" data-unique="pxww23ovs" src="https://academy.hsoub.com/uploads/monthly_2021_10/615761493e16d_16_.thumb.png.2cbdb45d9ec92764efe321fb6e221780.png"></a>
</p>

<p>
	ستظهر لك قائمة بعنوان "قواعد التنسيق الشرطي"، والتي ستضيف فيها القواعد التي على أساسها ستُنسَق الخلايا. أضف قاعدة التنسيق ونمط التنسيق للحالات الثلاثة واضغط على زر "تم".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78435" href="https://academy.hsoub.com/uploads/monthly_2021_10/6157614bd2f82_17_.PNG.1aa8b015c88d4c47f4623e4e59de6b85.PNG" rel=""><img alt="17_إضافة التنسيق الشرطي.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78435" data-unique="zfyuc74aq" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157614cd53f2_17_.thumb.PNG.8d01d0c80faab27bf8e452089d29722d.PNG"></a>
</p>

<p>
	ستلاحظ أن قيم خلايا الراتب السنوي نُسِقَت تبعًا لقيمتها وحسب الشروط التي أضفناها.
</p>

<p style="text-align: center;">
	<img alt="18_ناتج التنسيق الشرطي.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78436" data-unique="x0l4xes11" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157614e22076_18_.PNG.5eb5b487825d1e7fc64d4deb127ac472.PNG"></p>

<p>
	يمكن تطبيق العديد من الشروط للتنسيق، ويمكنك الإطلاع على القائمة التالية التي تحتوي على كافة شروط التنسيق، والتي يمكن تطبيقها على أنواع مختلفة من البيانات، مثل النصوص والتاريخ وليس فقط القيم الرقمية.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78437" href="https://academy.hsoub.com/uploads/monthly_2021_10/61576150c0d93_19_.png.619716bfba57d387653769de09af129d.png" rel=""><img alt="19_خيارات التنسيق الشرطي.png" class="ipsImage ipsImage_thumbnailed" data-fileid="78437" data-unique="k8xk7y1zn" src="https://academy.hsoub.com/uploads/monthly_2021_10/615761515832d_19_.thumb.png.3f4045d32194080a81961c22e856da84.png"></a>
</p>

<h2>
	تنسيق رقم مخصص
</h2>

<p>
	عدّل عنوان العمود E ليكون الراتب السنوي (2021)، ثم أضِف عمودين جديدين مثل الشكل التالي. العمود الأول هو الراتب السنوي في عام 2020 والعمود الثاني يحتوي على الفارق بين الراتبين أي الفارق بين راتب الموظف في عام 2020 وعام 2021، لملاحظة التغيّر في الراتب بين العامين.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78439" href="https://academy.hsoub.com/uploads/monthly_2021_10/6157615a7d1a7_20_.PNG.abe25d82d429fa8ec716f0b40a6fa953.PNG" rel=""><img alt="20_الفارق بين الراتبين.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78439" data-unique="hled9y6ij" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157615ca457d_20_.thumb.PNG.0a549ef649d03f45eb05ff51bd900c72.PNG" style="width: 600px; height: auto;"></a>
</p>

<p>
	أضف القيم الثلاثة التالية في أحد الخلايا في الملف، والتي يمثّل كل منها رقم ترميز لأحد الحروف أو الرموز في جهاز الحاسوب.
</p>

<p style="text-align: center;">
	<img alt="21_كود الأيقونات.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78440" data-unique="6d0ax888p" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157615dcdf8a_21_.PNG.87e138acde818e8fdc0584accec98547.PNG"></p>

<p>
	سنحصل باستخدام دالة char على رمز كل رقم من الأرقام الثلاثة، حيث تقبل دالة char رقمًا وتُرجِع الحرف أو الرمز المقابل له. طبّق صيغة المعادلة مثل الشكل التالي وستلاحظ ظهور رمز السهم العلوي ▲ في الخلية.
</p>

<p style="text-align: center;">
	<img alt="22_دالة تشار.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78441" data-unique="2dgikg9az" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157616131fbb_22_.PNG.fb62347f17e7325c5ee7517d33399209.PNG"></p>

<p>
	كرّر الدالة على الرقمين الثاني والثالث، وستلاحظ ظهور الرموز مشابهةً للشكل التالي.
</p>

<p style="text-align: center;">
	<img alt="23_الأيقونات الثلاثة الأسهم.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78442" data-unique="ofwm3ghkn" src="https://academy.hsoub.com/uploads/monthly_2021_10/61576161b2162_23_.PNG.78006fff33b1e210da288e0d11bb72cf.PNG"></p>

<p>
	نريد الآن إضافة تنسيق خاص لعمود "الفارق بين الراتبين" يمثّل الحالات التالية:
</p>

<ul>
<li>
		في حال كان الفارق موجبًا (أي أن الموظف حصل على زيادة في عام 2021، فأصبح راتب 2021 أكبر من راتب 2020)، فسيظهر رمز ▲ في الخلية بجانب الرقم بلون أخضر.
	</li>
	<li>
		في حال كان الفارق سالبًا (أي أن الموظف حصل على خصم في عام 2021 فأصبح راتب 2021 أقل من راتب 2020)، فسيظهر رمز ▼ في الخلية بجانب الرقم بلون أحمر.
	</li>
	<li>
		في حال كان الفارق صفر (أي أن الموظف لم يحصل على أي زيادة أو نقصان في عام 2021 فبقي راتبه كما هو)، فسيظهر رمز ▬ في الخلية بجانب الرقم بلون أزرق.
	</li>
</ul>
<p>
	حدد عمود "الفارق بين الراتبين ثم من قائمة "التنسيق"، اضغط على خيار "رقم"، ومن ثم "مزيد من التنسيقات"، ومن ثم "تنسيق رقم مخصص".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78443" href="https://academy.hsoub.com/uploads/monthly_2021_10/6157616a5d15c_24_.png.c641021a0c0f0e5a58ca95427ca87aa0.png" rel=""><img alt="24_تنسيق رقم مخصص.png" class="ipsImage ipsImage_thumbnailed" data-fileid="78443" data-unique="l4h3ub102" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157616d28597_24_.thumb.png.25be14b7321e071fff1a62712f3feb19.png" style="width: 700px; height: auto;"></a>
</p>

<p>
	أدخل التنسيق المخصص التالي للرقم، وهو عبارة عن ثلاثة قيم تفصلها فاصلة منقوطة (;)، حيث تمثّل كل قيمة من القيم الثلاثة لون النص في في الخلية وقيمة الخلية ورمز الخلية حسب قيمتها. والقيم الثلاثة هي كالتالي:
</p>

<ul>
<li>
		القيمة الأولى من اليسار هي تنسيق النص باللون الأخضر <code>[color50]</code> والذي يمكنك استبداله باسم <code>[green]</code>. لاحظ أن اسم اللون أو رقمه يُضاف بين قوسين مربعين <code>[ ]</code>، وهنا ستُنسَّق الخلية باللون الأخضر وذلك في حال كان الرقم موجبًا (0). تعني الصفر هنا رقمًا موجبًا، وسيُضاف بجانب الرقم رمز السهم العلوي. لإضافة السهم، انسخه من ورقة العمل من الخلية L3. تعني المسافة بين الرقم 0 والرمز أنه في ورقة العمل سيظهر الرقم والرمز بينهما مسافة واحدة.
	</li>
	<li>
		القيمة الثانية من اليسار هي تنسيق النص باللون الأحمر <code>[color3]</code> ويمكنك استبداله باسم <code>[red]</code>. ستُنسّق الخلية باللون الأحمر وذلك في حال كان الرقم سالبًا (0-). الصفر هنا تعني رقمًا سالبًا، وسيضاف بجانب الرقم رمز السهم السفلي. لإضافة السهم، انسخه من ورقة العمل من الخلية L4.
	</li>
	<li>
		القيمة الثالثة هي قيمة (0) ولون تنسيقها أزرق. في هذه الحالة إذا لم يكن الرقم موجبًا أو سالبًا فستظهر إشارة – بجانب الرقم، مع إضافة تنسيق النص باللون الأزرق.
	</li>
</ul>
<p>
	أدخل القيمة المخصصة واضغط على زر "تطبيق".
</p>

<p style="text-align: center;">
	<img alt="25_صيغة تنسيق أرقام مخصصة.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78444" data-unique="fyqdczxke" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157616ee765d_25_.PNG.4795f77ad398bb88a677189231fd5d9a.PNG"></p>

<p>
	ستلاحظ ظهور إشارة السهم العلوي بجانب القيم الموجبة مع تنسيق لون الخط بلون أخضر، كما ستلاحظ ظهور إشارة السهم السفلي بجانب القيم السالبة مع تنسيق لون الخط بلون أحمر، كما ستلاحظ تنسيق لون القيمة صفر بلون أزرق مع ظهور إشارة – بجانب الرقم.
</p>

<p style="text-align: center;">
	<img alt="26_ناتج تنسيق أرقام مخصصة.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78445" data-unique="audkk3qvf" src="https://academy.hsoub.com/uploads/monthly_2021_10/61576173bb3b0_26_.PNG.694dbb9d97508c41661ed27141666279.PNG"></p>

<h2>
	مشاركة جدول البيانات
</h2>

<p>
	يمكنك مشاركة الملف مع مستخدمين آخرين للاطلاع عليه أو للتعديل عليه وذلك من خلال زر "مشاركة".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78446" href="https://academy.hsoub.com/uploads/monthly_2021_10/6157617586bd7_27_.PNG.a4f04f1a28aa831f954d132c5c8ae158.PNG" rel=""><img alt="27_مشاركة.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78446" data-unique="l8ogorgp4" src="https://academy.hsoub.com/uploads/monthly_2021_10/615761761cac4_27_.thumb.PNG.df93db877752e2fbfaace981f06e2756.PNG" style="width: 600px; height: auto;"></a>
</p>

<p>
	يتيح لك جوجل إمكانية مشاركة الرابط مباشرةً مع المستخدمين، أو مشاركة الملف عن طريق البريد الإلكتروني.
</p>

<p style="text-align: center;">
	<img alt="28_خيارات المشاركة.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="78447" data-unique="mkvrmgmxd" src="https://academy.hsoub.com/uploads/monthly_2021_10/6157617a66330_28_.PNG.5d2694043133e763cf23ddbd8d38e5b1.PNG" style="width: 600px; height: auto;"></p>

<h2>
	تنزيل الملف
</h2>

<p>
	يتيح لك جوجل إمكانية تنزيل الملف على جهازك بعدة صيغ، وهي صيغة مايكروسوفت إكسل وصيغة مستند ods ومستند PDF وصفحة ويب وملف قيم مفصولة بفواصل csv، وملف قيم مفصولة بعلامات جدولة tsv. لتنزيل الملف اضغط على خيار "تنزيل" من قائمة ملف، ومن ثم اختر الصيغة التي ترغب بتحميلها.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="78448" href="https://academy.hsoub.com/uploads/monthly_2021_10/615761812102f_29_.png.f11c685ae1b48e8834863b89be19e253.png" rel=""><img alt="29_تنزيل الملف.png" class="ipsImage ipsImage_thumbnailed" data-fileid="78448" data-unique="56hkg54ct" src="https://academy.hsoub.com/uploads/monthly_2021_10/615761838fcf7_29_.thumb.png.d0cfaf0c3088022aea9332bffa74e829.png" style="width: 600px; height: auto;"></a>
</p>

<h2>
	خاتمة
</h2>

<p>
	تحدثنا في هذا الدرس عن تطبيق <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-%D8%A7%D9%84%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r321/" rel="">جداول بيانات جوجل</a>، والتي تتيح للمستخدمين إمكانية إنشاء جداول بيانات على الإنترنت وتعديلها ومشاركتها مع مستخدمين آخرين عن طريق مشاركة الرابط الإلكتروني، أو إرسالها عبر البريد الإلكتروني. لقد أنشأنا جدولًا للبيانات ونسّقنا الخلايا والبيانات باستخدام أدوات تنسيق ورقة العمل والخلايا والخطوط والنصوص والأرقام، كما أضفنا تنسيقًا لتبديل الألوان للخلايا، وطبّقنا التنسيق الشرطي لقيم الخلايا والتنسيق الرقمي المخصص.
</p>

<p>
	أنشئ الآن ملفًا جديدًا لجداول بياناتك وأضف بياناتك ونسّقها وشارك الملف مع زملائك لتحريره أو الاطلاع عليه.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/apps/productivity/office/microsoft-excel/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D9%88%D8%A7%D9%84%D9%85%D8%AE%D8%B7%D8%B7%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%AD%D9%88%D8%B1%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A5%D9%83%D8%B3%D9%84-%D8%A7%D9%88%D9%86%D9%84%D8%A7%D9%8A%D9%86-365-r520/" rel="">إنشاء الجداول والمخططات المحورية باستخدام إكسل اونلاين 365</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/office/microsoft-excel/%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%81%D9%8A-%D8%A5%D9%83%D8%B3%D9%84-%D8%A3%D9%88%D9%86%D9%84%D8%A7%D9%8A%D9%86-365-r502/" rel="">أدوات البيانات في إكسل أونلاين 365</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/office/microsoft-excel/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AE%D8%B7%D8%A9-%D8%B9%D9%85%D9%84-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A5%D9%83%D8%B3%D9%84-365-%D8%A3%D9%88%D9%86%D9%84%D8%A7%D9%8A%D9%86-r501/" rel="">إنشاء خطة عمل باستخدام إكسل 365 أونلاين</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/office/microsoft-excel/%D8%AA%D8%A8%D9%88%D9%8A%D8%A8-%D8%A5%D8%AF%D8%B1%D8%A7%D8%AC-%D9%88%D9%85%D8%B2%D8%A7%D9%8A%D8%A7-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B1%D9%83%D8%A9-%D9%88%D8%A7%D9%84%D8%AA%D8%B9%D9%84%D9%8A%D9%82%D8%A7%D8%AA-%D9%81%D9%8A-%D9%85%D8%A7%D9%8A%D9%83%D8%B1%D9%88%D8%B3%D9%88%D9%81%D8%AA-%D8%A5%D9%83%D8%B3%D9%84-%D8%A3%D9%88%D9%86%D9%84%D8%A7%D9%8A%D9%86-365-r486/" rel="">تبويب إدراج ومزايا المشاركة والتعليقات في مايكروسوفت إكسل أونلاين 365</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/office/microsoft-excel/%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D8%A7%D8%B1%D9%8A%D8%AE-%D9%88%D8%A7%D9%84%D9%88%D9%82%D8%AA-%D8%A7%D9%84%D8%A3%D9%83%D8%AB%D8%B1-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85%D8%A7-%D9%81%D9%8A-%D9%85%D8%A7%D9%8A%D9%83%D8%B1%D9%88%D8%B3%D9%88%D9%81%D8%AA-%D8%A5%D9%83%D8%B3%D9%84-%D8%A3%D9%88%D9%86%D9%84%D8%A7%D9%8A%D9%86-365-r484/" rel="">دوال التاريخ والوقت الأكثر استخداما في مايكروسوفت إكسل أونلاين 365</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/productivity/office/microsoft-excel/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D9%85%D8%A7%D9%8A%D9%83%D8%B1%D9%88%D8%B3%D9%88%D9%81%D8%AA-%D8%A3%D9%88%D9%81%D9%8A%D8%B3-%D8%A5%D9%83%D8%B3%D9%84-365-%D8%A3%D9%88%D9%86%D9%84%D8%A7%D9%8A%D9%86-r485/" rel="">مدخل إلى تطبيق مايكروسوفت أوفيس إكسل 365 أونلاين</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">521</guid><pubDate>Thu, 07 Oct 2021 14:09:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x62D;&#x636;&#x64A;&#x631; &#x644;&#x644;&#x637;&#x628;&#x627;&#x639;&#x629; &#x641;&#x64A; &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644;</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D9%84%D8%AA%D8%AD%D8%B6%D9%8A%D8%B1-%D9%84%D9%84%D8%B7%D8%A8%D8%A7%D8%B9%D8%A9-%D9%81%D9%8A-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r330/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_01/06-2.png.991cdc8fe9779c042947f6b6dfdeb4b2.png" /></p>

<p>
	نلجأ غالبًا بعد الانتهاء من إعداد الجداول وإضافة البيانات إلى طباعتها واستعمالها ورقيًّا. يوفر تطبيق جداول بيانات جوجل مرحلتين لإعداد الجداول وطباعتها؛ المرحلة الأولى هي إعداد الجداول مثل حجوم الجداول وحجم الصفحة وملاءمة الجدول ضمن الصفحة، والمرحلة الثانيَّة هي الإعدادات العامَّة للطباعة مثل اختيار الطابعة وتحديد الصفحات المراد طباعتها وعدد النُسخ اللازمة. سنتعرَّف في هذا المقال على كيفيَّة تهيئة الجداول لطباعتها في تطبيق جداول بيانات جوجل.
</p>

<h2 id="المرحلة-الأولى-إعداد-الجداول">
	المرحلة الأولى: إعداد الجداول
</h2>

<p>
	ننتقل إلى هذه الإعدادات الأوليَّة والمخصَّصة لجداول البيانات عبر قائمة <strong>ملف ← طباعة</strong> أو استعمال الاختصار <code>Ctrl ‏+ P</code> وذلك لتحضير الجداول للطباعة قبل الانتقال إلى الإعدادات العامة للطباعة؛ تَظهر نافذة تشبه النافذة الموضحة بالصورة التالية، وسنشرح جميع الخيارات الموجودة فيها.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26398" href="https://academy.hsoub.com/uploads/monthly_2018_01/print-setting.png.8040653718856ee6e9b2aeaccf3e4b7e.png" rel=""><img alt="print-setting.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26398" data-unique="7s65zaxjg" src="https://academy.hsoub.com/uploads/monthly_2018_01/print-setting.thumb.png.24b422d1f88534b9ca034aeb608ba30f.png"></a>
</p>

<p>
	نسأل أنفسنا هل نريد طباعة كامل المستند أي جميع الأوراق الموجودة فيه أم نريد طباعة جداول محدَّدة؟ نتحكم في هذا الخيار عبر قائمة “<strong>طباعة</strong>” إذ يوجد ثلاثة خيارات؛ الخيار الأول هو “<strong>الورقة الحالية</strong>” نختاره لطباعة جميع محتوى الورقة الحاليَّة التي كنَّا فيها، والخيار الثاني هو “<strong>المصنف</strong>” نحدِّده لطباعة كامل محتوى الأوراق الموجودة في الملف، والثالث هو “<strong>الخلايا المحدَّدة</strong>” نستعمله لطباعة جدول ضمن نطاق محدَّد وعدم الرغبة في طباعة كامل الملف أو الورقة إذ نحدِّد الجدول ثمَّ ننتقل إلى هذه الإعدادات.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26397" href="https://academy.hsoub.com/uploads/monthly_2018_01/print-selected-cells.png.5c09d385bbd952cad50299992a9b57d6.png" rel=""><img alt="print-selected-cells.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26397" data-unique="m7czmjjqk" src="https://academy.hsoub.com/uploads/monthly_2018_01/print-selected-cells.thumb.png.9e3ee34ca55ffa5c25870a5c1cf736d1.png"></a>
</p>

<p>
	الخيارات الثلاث التالية تتعلَّق بالورق الذي سنستخدمه للطباعة؛ نحدِّد حجم الورق المستعمل من خيار “<strong>حجم الورق</strong>” إذ الحجم المستخدم بكثرة هو حجم A4، وتُكتب أبعاد الورقة بالسنتيمتر في حال استعمال حجوم أخرى غير مشهورة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26396" href="https://academy.hsoub.com/uploads/monthly_2018_01/paper-size.png.25971e5ae2180992c4ca4b881a786b98.png" rel=""><img alt="paper-size.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26396" data-unique="u2qibr898" src="https://academy.hsoub.com/uploads/monthly_2018_01/paper-size.thumb.png.006c94e5e7f0cd7d44a3927898780900.png"></a>
</p>

<p>
	نحدِّد اتجاه الورق إن كان أفقيًّا أم عموديًّا من خيار “<strong>اتجاه الورقة</strong>” ويتعلَّق ذلك بحجم الجدول المراد طباعته إذ من الضروري مراعاة حجم الأعمدة أثناء إنشاء الجدول ليتسع في الورقة. نحدِّد في حالتنا الاتجاه الأفقي إذ إن عرض الجدول كبير وفي حال تحديد الاتجاه العمودي فلن يتَّسع الجدول إلا إذا غيَّرنا حجمه.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26395" href="https://academy.hsoub.com/uploads/monthly_2018_01/page-orientation.png.4876ca919a081a4a79271cb87d113aff.png" rel=""><img alt="page-orientation.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26395" data-unique="8zbxzr78u" src="https://academy.hsoub.com/uploads/monthly_2018_01/page-orientation.thumb.png.b74d4f167691a5740f1b27c887ca1e9e.png"></a>
</p>

<p>
	إن أصررت على الاتجاه العمودي فسيساعدك خيار “<strong>تغيير الحجم</strong>” في تحديد الحجم المناسب للجدول بحيث يلاءم حجم الورق المستعمل مع حجم الجدول، وهذا الخيار مفيد جدًا وقد لا يتواجد في التطبيقات المشابهة لهذا التطبيق وسنضطر آنذاك لتعديل حجم الجدول يدويًّا. الخيارات المتاحة هي:
</p>

<ul>
<li>
		“<strong>عادي 100%</strong>” وهو الحجم الأصلي للجدول.
	</li>
	<li>
		“<strong>ملاءمة مع العرض</strong>” أي عرض الصفحة.
	</li>
	<li>
		“<strong>ملاءمة مع الارتفاع</strong>” أي ارتفاع الصفحة.
	</li>
	<li>
		“<strong>احتواء ضمن الصفحة</strong>” أي اختيار الحجم المناسب لجميع الجداول في المستند ليتسع ضمن صفحة واحدة.
	</li>
	<li>
		“<strong>مخصص</strong>” وهو تغيير حجم الجدول يدويًّا بكتابة النسبة المئوية المناسبة.
	</li>
</ul>
<p>
	نحدِّد خيار “<strong>ملاءمة مع العرض</strong>” بعد اختيار الاتجاه العمودي ليتسع الجدول في الصفحة لكنَّه سيصبح صغيرًا وقد لا تُقرأ الأرقام ضمنه لصغرها لذا يجب الانتباه إلى هذا الأمر.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26400" href="https://academy.hsoub.com/uploads/monthly_2018_01/scale.png.8fb75415c5e74de49b314b1f21fb3fe9.png" rel=""><img alt="scale.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26400" data-unique="1p68akiun" src="https://academy.hsoub.com/uploads/monthly_2018_01/scale.thumb.png.95b9843986cedb7b6d7082f770240d85.png"></a>
</p>

<p>
	الخيار التالي هو “<strong>الهوامش</strong>” إذ نتحكم بعرض الهوامش في الورقة بوساطته، ويفضل اختيار الهوامش العريضة أو العاديَّة في حال الرغبة بإضافة بعض المعلومات فيها.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26394" href="https://academy.hsoub.com/uploads/monthly_2018_01/margins.png.13af6dec3d8a9f9826b42f6d04770bac.png" rel=""><img alt="margins.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26394" data-unique="a1jlrgowt" src="https://academy.hsoub.com/uploads/monthly_2018_01/margins.thumb.png.c7e9a873ee059663af7a660649a188ce.png"></a>
</p>

<p>
	يُستعمل خيار “<strong>التنسيق</strong>” التالي لإظهار خطوط الشبكة والملاحظات عند الطباعة، وتحديد طريقة ترتيب الصفحات في الورقة، ومحاذاة الجدول أفقيًّا وعموديًّا في الورقة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26390" href="https://academy.hsoub.com/uploads/monthly_2018_01/formatting.png.e69e07b39f063763aaee9240718d7c01.png" rel=""><img alt="formatting.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26390" data-unique="hnzev7jbo" src="https://academy.hsoub.com/uploads/monthly_2018_01/formatting.thumb.png.608b033839250c8cc5f35cc21e3f95ab.png"></a>
</p>

<p>
	بقي خيار “<strong>الرؤوس والتذييلات</strong>” إذ نستطيع عبره إضافة بعض المعلومات إلى الجدول في الهوامش مثل أرقام الصفحات وعنوان المصنف والورقة والتاريخ والوقت.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26393" href="https://academy.hsoub.com/uploads/monthly_2018_01/5a4cb79e2225d_headers-and-footers.png.be274d26340728e51a6732946e961360.png" rel=""><img alt="headers-and[-footers.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26393" data-unique="w8db03f9n" src="https://academy.hsoub.com/uploads/monthly_2018_01/5a4cb79fe09b2_headers-and-footers.thumb.png.1f3a906e55ee754f81b0c6b436a19a34.png"></a>
</p>

<p>
	يمكن تخصيص تلك المعلومات ووضعها في أماكن معيَّنة عبر خيار “<strong>تعديل الحقول المخصصة</strong>“.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26389" href="https://academy.hsoub.com/uploads/monthly_2018_01/edit-custom-filed-in-headers-and-footers.png.3e761f231306e3173642ab97b0fcd9c2.png" rel=""><img alt="edit-custom-filed-in-headers-and-footers.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26389" data-unique="umywrl56n" src="https://academy.hsoub.com/uploads/monthly_2018_01/edit-custom-filed-in-headers-and-footers.thumb.png.a68b5ec87242e5b95da8f2354d47afdd.png"></a>
</p>

<p>
	نلاحظ أنَّ خياري تكرار الصفوف أو الأعمدة المجمَّدة غير مفعلان وذلك لأنَّنا لم نجمد أي صف أو عمود. يُستعمل التجميد لتثبيت رأس الجدول الذي يقع في الصف الأول غالبًا والعمود الأول لإظهارهما دومًا في جميع الصفحات المطبوعة أو في أعلى الشاشة أثناء التنقل في الجدول.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26391" href="https://academy.hsoub.com/uploads/monthly_2018_01/freezing-rows-and-columns.png.24d4df741dff2a8697092883859e7152.png" rel=""><img alt="freezing-rows-and-columns.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26391" data-unique="drqixi2mc" src="https://academy.hsoub.com/uploads/monthly_2018_01/freezing-rows-and-columns.thumb.png.015cbf3ee9762e2a1cd5d61b6df89d9f.png"></a>
</p>

<p>
	نجمِّد الصف أو العمود عبر قائمة <strong>عرض ← تجميد ← 2 صف</strong> أي تجميد السطريين الأوليين وبذلك يتكرر هذين السطرين في رأس كل ورقة عند طباعتها بتفعيل خيار تكرار الصفوف أو الأعمدة المجمَّدة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26399" href="https://academy.hsoub.com/uploads/monthly_2018_01/repeating-frozen-rows.png.5985e895f784caa04791c914094eacc4.png" rel=""><img alt="repeating-frozen-rows.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26399" data-unique="htmvp7kn0" src="https://academy.hsoub.com/uploads/monthly_2018_01/repeating-frozen-rows.thumb.png.a1c8cdd59775fb4cbc7551291f55e0eb.png"></a>
</p>

<h2 id="المرحلة-الثانية-الإعدادات-العامة-للطباعة">
	المرحلة الثانية: الإعدادات العامَّة للطباعة
</h2>

<p>
	ننتقل إلى هذه المرحلة بعد الانتهاء من تهيئة الإعدادات السابقة بالضغط على زر “<strong>التالي</strong>” الموجود في الزاوية العلوية اليسرى وهي الإعدادات الاعتياديَّة من Google لطباعة المستند فتظهر نافذة تشبه النافذة الموضحة بالصورة التالية.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26392" href="https://academy.hsoub.com/uploads/monthly_2018_01/general-print-settings.png.1d670b4866be742542ddec7e840e5291.png" rel=""><img alt="general-print-settings.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26392" data-unique="qmzzo7lvj" src="https://academy.hsoub.com/uploads/monthly_2018_01/general-print-settings.thumb.png.d8cfa7c3be6709533ffaf9a76cdf5951.png"></a>
</p>

<p>
	نحدِّد الطابعة المستخدمة لطباعة المستند عبر الضغط على “<strong>Change</strong>” فتظهر نافذة لاختيار الطابعة.
</p>

<p style="text-align: center;">
	<img alt="selecting-printer.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26401" data-unique="s4rxp2mio" src="https://academy.hsoub.com/uploads/monthly_2018_01/selecting-printer.png.a9ec8871e211acd758e1e25c9276f1ca.png"></p>

<p>
	إن لم تظهر طابعتك الموصولة مع حاسوبك فعليك إعدادها لاستخدامها في خدمة الطباعة من السحابة من Google؛ اقرأ مقال “<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-docs/%D8%AA%D8%AD%D8%B6%D9%8A%D8%B1-%D8%A7%D9%84%D9%85%D8%AE%D8%B1%D8%AC%D8%A7%D8%AA-%D8%A7%D9%84%D8%B7%D8%A8%D8%A7%D8%B9%D8%A9-%D9%88%D8%A7%D9%84%D9%86%D8%B4%D8%B1-%D9%81%D9%8A-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D9%85%D8%B3%D8%AA%D9%86%D8%AF%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r315/" rel="">تحضير المخرجات: الطباعة والنشر” في مستندات جوجل</a> لمعرفة خطوات إعداد الطابعة للاستفادة من خدمة الطباعة من السحابة.<br>
	الطابعة الافتراضيَّة هي حفظ الملف بصيغة PDF لتنزيله إلى الحاسوب وطباعته لاحقًا. يمكن تنزيل الملف أيضًا بصيغ عدَّة عبر قائمة <strong>ملف ← تنزيل بتنسيق</strong> واختيار الصيغة المناسبة لتنزيل الملف إلى الحاسوب.<br>
	نحدِّد بعد ذلك الصفحات التي نريد طباعتها ثمَّ نضغط على “<strong>Save</strong>” ليرسل التطبيق الملف إلى الطابعة المحدَّدة سواءً إلى طابعة حقيقيَّة ليُطبع الملف مباشرةً أو إلى طابعة افتراضيَّة ليُحفظ الملف بصيغة معيَّنة على الحاسوب ويُطبع لاحقًا.
</p>
]]></description><guid isPermaLink="false">330</guid><pubDate>Sat, 06 Jan 2018 15:08:01 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x639;&#x645;&#x627;&#x644; &#x627;&#x644;&#x625;&#x636;&#x627;&#x641;&#x627;&#x62A; &#x641;&#x64A; &#x62A;&#x637;&#x628;&#x64A;&#x642; &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644;</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-%D8%A7%D9%84%D8%A5%D8%B6%D8%A7%D9%81%D8%A7%D8%AA-%D9%81%D9%8A-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r321/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_12/31.png.dbd95bb78ad96f2b6c2dc003a9fcb523.png" /></p>

<p>
	إنَّ مزية الإضافات التي يدعمها تطبيق جداول بيانات جوجل هو ما يميز هذا التطبيق عن سائر التطبيقات المشابهة له مثل مايكروسوفت إكسل (Microsoft excel) إذ توسِّع هذه الإضافات عمل التطبيق وتضيف له مزايا جديدة ومفيدة لا يدعمها وقد يحتاجها المستخدم. سنستعرض في هذا المقال خمسة إضافات رائعة يمكن استعمالها مع تطبيق جداول بيانات جوجل.
</p>

<h2 id="الإضافة-الأولى-template-gallery">
	الإضافة الأولى: Template Gallery
</h2>

<p>
	أول ما يُعرض عند فتح تطبيق جداول بيانات جوجل النسخة الإنجليزية هو بعض القوالب الجاهزة، ويمكنك أيضًا البحث عن قوالب واستعمالها مباشرةً مع التطبيق، ولكنَّ ذلك غير متوافر للنسخة العربيَّة حاليًا، لذا نضطر إلى إنشاء الجدول وتنسيقه يدويًّا. توفر القوالب حقيقةً علينا الوقت والجهد إذ كل ما علينا فعله هو البحث عن قالب مناسب يخدمنا وإضافته إلى حسابنا ثمَّ البدء باستعماله بسرعة.<br>
	سنضيف في الخطوات التالية إضافة Template Gallery التي تحوي الكثير من القوالب الجاهزة. نختار من قائمة <strong>الإضافات ← الحصول على إضافات</strong> ونكتب في مربع البحث اسم الإضافة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26124" href="https://academy.hsoub.com/uploads/monthly_2017_12/browse-add-ons.png.a3095340c12699526ad52932d61cc945.png" rel=""><img alt="browse-add-ons.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26124" data-unique="pf6teqfqa" src="https://academy.hsoub.com/uploads/monthly_2017_12/browse-add-ons.thumb.png.65f9b0357b1d80e9b53c4cfd239ae363.png"></a>
</p>

<p>
	نضغط على الإضافة لفتحها ثمَّ نقرأ بعض التفاصيل عنها أهمُّها تقييم تلك الإضافة وآراء المستخدمين عنها وأهم المزايا والخدمات التي تقدمها، ولا تتوافر هذه المعلومات باللغة العربيَّة في الوقت الحالي.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26123" href="https://academy.hsoub.com/uploads/monthly_2017_12/add-template-gallery.png.9b936030713333d8fdabd328602f0c2a.png" rel=""><img alt="add-template-gallery.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26123" data-unique="7ox17pke5" src="https://academy.hsoub.com/uploads/monthly_2017_12/add-template-gallery.thumb.png.70f16f82743b54b134fe9596cebd1db9.png"></a>
</p>

<p>
	إن كان تقييم الإضافة جيِّدًا وكانت خدماتها مناسبة نضغط على “<strong>مجانًا</strong>” أعلى يسار النافذة لإضافتها فتظهر صفحة تطلب منك اختيار حسابك على Drive. تظهر صفحة أخرى تعرض سياسة الخصوصيَّة والأذونات اللازمة لاستعمال الإضافة ثمَّ يُطلب منك الموافقة عليها.
</p>

<p style="text-align: center;">
	<img alt="template-gallery-permissions.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26134" data-unique="cqywz18ai" src="https://academy.hsoub.com/uploads/monthly_2017_12/template-gallery-permissions.png.b2475c28b66a859d726392597a28a70b.png"></p>

<p>
	اقرأ الصلاحيات بعناية تامَّة قبل الضغط على “<strong>السماح</strong>” وتأكَّد أنَّ حسابك لا يحوي ملفاتٍ مهمَّة إذ تصبح الإضافة عند الضغط على “<strong>السماح</strong>” قادرة على الوصول إلى ملفاتك بحسب صلاحياتها وبذلك قد تكون ملفاتك عرضة للخطر أو سرقة المعلومات والبيانات من حسابك لذا كن حذرًا في هذا الأمر واقرأ تقييمات المستخدمين عن الإضافة وتقييمها الكلي وهل يمكن الوثوق بها.<br>
	اضغط على إشارة التعجب بجانب كل إذن لإطلاع على تفاصيل أوسع عنه، وتوضِّح الصورة التالية تفاصيل إذن “عرض الملفات وإدارتها في Google Drive” التي تتطلبها الإضافة لذا انتبه لجميع التفاصيل ولا تهمل قراءتها.
</p>

<p style="text-align: center;">
	<img alt="read-template-gallery-permissions.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26131" data-unique="n2pnrx8g3" src="https://academy.hsoub.com/uploads/monthly_2017_12/read-template-gallery-permissions.png.544dfa70bcbe6377f064001bcb5f2234.png"></p>

<p>
	تُثبَّت الإضافة بعد الضغط على “السماح” وتظهر بعد ذلك في قائمة الإضافات.
</p>

<p style="text-align: center;">
	<img alt="run-template-gallery-add-ons.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26133" data-unique="arvo6cxxk" src="https://academy.hsoub.com/uploads/monthly_2017_12/run-template-gallery-add-ons.png.8406ac14c3d363b9ca69b1d61ed43944.png"></p>

<p>
	نتصفح القوالب المتوافرة عبر <strong>الإضافات ← Template Gallery ← ‏Browse templates</strong> فتظهر نافذة بجميع التصنيفات الموجودة.
</p>

<p style="text-align: center;">
	<img alt="browse-and-search-templates.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26125" data-unique="hptmnwmka" src="https://academy.hsoub.com/uploads/monthly_2017_12/browse-and-search-templates.png.9c311bbf17e8aba3cda4849a86a92e8c.png"></p>

<p>
	سنضيف قالبًا لا على التعيين إلى حسابنا لتجريبه؛ نختار من تصنيف القوائم وقوائم التحقق (lists and checklists) قالب “wedding checklist” وهو قالب للتحقق من متطلبات حفل الزفاف إذ نفتحه ونقرأ بعض المعلومات عنه ونضيفه إلى حسابنا في drive بالضغط على “copy to google drive”.
</p>

<p style="text-align: center;">
	<img alt="copy-template-to-google-drive.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26126" data-unique="z0iuhvmpm" src="https://academy.hsoub.com/uploads/monthly_2017_12/copy-template-to-google-drive.png.c078bf31f9d42aa1ed78fb41b7769f78.png"></p>

<p>
	و يمكننا بعدئذٍ فتحه بالضغط على “open” من النافذة نفسها أو الانتقال إلى Drive وفتحه.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26128" href="https://academy.hsoub.com/uploads/monthly_2017_12/open-the-template-use-it.png.c4441844844eff0b4b99d4c760223a65.png" rel=""><img alt="open-the-template-use-it.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26128" data-unique="bur8db9ct" src="https://academy.hsoub.com/uploads/monthly_2017_12/open-the-template-use-it.thumb.png.3d6fad3b0de70ee3ee5e22484be38e56.png"></a>
</p>

<p>
	توجد الكثير من القوالب المفيدة يمكنك تصفحها وإضافتها ثمَّ استعمالها بالطريقة نفسها.<br>
	لا تقتصر القوالب على هذه الإضافة إذ توجد الكثير من القوالب العربيَّة توفرها مواقع عدَّة منها <a href="https://templates.office.com/ar-sa/templates-for-Excel" rel="external nofollow">قوالب Excel المجانيَّة</a> من مايكروسوفت.
</p>

<h2 id="الإضافة-الثانية-google-analytics">
	الإضافة الثانية: Google Analytics
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26127" href="https://academy.hsoub.com/uploads/monthly_2017_12/google-analytics-add-ons.png.979576685d75e5f66ab56cebe4e53d1b.png" rel=""><img alt="google-analytics-add-ons.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26127" data-unique="1kpbdd1on" src="https://academy.hsoub.com/uploads/monthly_2017_12/google-analytics-add-ons.thumb.png.7146df99bc3397a6eab9a8b3c2dfa012.png"></a>
</p>

<p>
	تساعدك هذه الإضافة الجيِّدة من google على تحليل البيانات ومعالجتها بكفاءة عالية. تستطيع باستعمال هذه الإضافة:
</p>

<ul>
<li>
		الاستعلام عن البيانات عبر معاينات متعدِّدة.
	</li>
	<li>
		إجراء حسابات مخصَّصة من تقرير بياناتك.
	</li>
	<li>
		جدولة التقارير لتشغيلها تلقائيًّا.
	</li>
	<li>
		التحكم بمن يستطيع رؤية بياناتك بالاستفادة من مزايا المشاركة والخصوصيَّة في جداول بيانات جوجل.
	</li>
</ul>
<p>
	تُثبَّت الإضافة بالطريقة نفسها، ويجب أن تملك حساب على <a href="https://analytics.google.com/analytics/web/" rel="external nofollow">Google Analytics</a> لتستطيع استعمالها.
</p>

<h2 id="الإضافة-الثالثة-qr-code-generator">
	الإضافة الثالثة: QR Code Generator
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26130" href="https://academy.hsoub.com/uploads/monthly_2017_12/QR-code-generator-add-ons.png.095baf70a1411f70ca6fff79b28912fa.png" rel=""><img alt="QR-code-generator-add-ons.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26130" data-unique="eisgzeos7" src="https://academy.hsoub.com/uploads/monthly_2017_12/QR-code-generator-add-ons.thumb.png.d2ea9b7513159b460831c11516768ff3.png"></a>
</p>

<p>
	تتيح لك هذه الإضافة إنشاء رمز استجابة سريع (QR code) من بيانات موجودة في جدولك. تستطيع توليد رموز متعدِّدة باستعمالها بتحديد مجال من البيانات، وتُحفظ الرموز في مستندات google أو في حسابك فيgoogle drive.<br>
	تستطيع باستعمال هذه الإضافة إنشاء بطاقات تعريف الهوية (ID cards) للموظفين مثلًا تحتوي على رمز استجابة سريع.
</p>

<h2 id="الإضافة-الرابعة-mapping-sheets">
	الإضافة الرابعة: Mapping Sheets
</h2>

<p style="text-align: center;">
	<img alt="plotting-locations-and-data-to-map.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26129" data-unique="h38dejbwx" src="https://academy.hsoub.com/uploads/monthly_2017_12/plotting-locations-and-data-to-map.png.baa4b6c9a3b9204fe0012895f3eec489.png"></p>

<p>
	إظهار البيانات الموجودة في الجدول على الخريطة شيء جميل جدًا خصوصًا إن كانت البيانات هي جهات اتصال لشركة أو عناوين المواعيد والمقابلات الأسبوعيَّة أو الشهريَّة أو عناوين وبيانات الأصدقاء والأقرباء في أبسط الأحوال. توفر هذه الإضافة إمكانيَّة ربط البيانات الموجودة في أحد جداول بيانات جوجل مع خرائط google ‏(google maps).<br>
	تَقرأ الإضافة Mapping sheets البيانات من الجدول الموجود في تطبيق جداول بيانات جوجل أولًا ثمَّ تنشئ ملف ‎.json في حسابك في drive؛ يعاِلج بعدئذٍ تطبيق خرائط الويب الملف السابق ثمَّ يُظهر بياناتك على الخريطة مباشرةً.<br>
	بعض مزايا الإضافة هي:
</p>

<ul>
<li>
		ترشيح آني لكامل البيانات أثناء الكتابة في مربع البحث عند فتح الخريطة.
	</li>
	<li>
		توفير مربعات اختيار (checkboxes) لتجميع المواقع والبيانات في مجموعات وترشيحها بسهولة وهو يمثل المرشح الرئيسي.
	</li>
	<li>
		وجود خيارات ترشيح أخرى تتكامل مع المرشح الرئيسي السابق لاختيار نطاق معين من المواقع.
	</li>
	<li>
		إمكانيَّة ملائمة حجم الخريطة وتكبيرها أو تصغيرها وإظهار كل المواقع المحدَّدة عليها.
	</li>
	<li>
		وجود أيقونة مميزة على الموقع مع قابليَّة الضغط عليها لإظهار جميع البيانات والتفاصيل لذاك الموقع.
	</li>
	<li>
		إمكانيَّة إضافة ما يقارب50 موقع باستعمال الإصدار المجاني وعدد غير محدود للإصدار المدفوع.
	</li>
</ul>
<p>
	<strong>ملاحظة:</strong> يُقبل إدخال موقع باللغة العربيَّة شرط أن يكون العنوان صحيحًا ومفصولًا بفواصل مثل “شارع عمر الخيام، حلب، سوريا” وموجودًا على الخريطة وقد جرَّبت ذلك وقَبِله التطبيق وظهر الموقع على الخريطة.<br>
	خطوات إنشاء الخريطة ومعالجة البيانات باستعمال هذه الإضافة هي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26132" href="https://academy.hsoub.com/uploads/monthly_2017_12/run-mapping-sheets.png.8b9f08e2a058b473a1aaea41a85471f5.png" rel=""><img alt="run-mapping-sheets.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26132" data-unique="9u9h86f97" src="https://academy.hsoub.com/uploads/monthly_2017_12/run-mapping-sheets.thumb.png.2a972fbc219d4349468bcd65034a5df1.png"></a>
</p>

<ul>
<li>
		إدخال جميع البيانات المتعلقة بالخريطة على الجدول، أو إدراج جدول تجريبي يعرض كيفيَّة استعمال الإضافة.
	</li>
	<li>
		اختيار ثلاثة أعمدة الأول هو للعنوان (title) والثاني للترشح (filter) أو تجميع البيانات ضمن مجموعات والثالث للموقع.
	</li>
	<li>
		الضغط على بناء (build) لمعالجة البيانات.
	</li>
	<li>
		الضغط على إظهار (view) لفتح الخريطة ورؤية جميع المواقع عليها.
	</li>
</ul>
<h2 id="الإضافة-الخامسة-lucidchart-diagrams">
	الإضافة الخامسة: Lucidchart Diagrams
</h2>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26135" href="https://academy.hsoub.com/uploads/monthly_2017_12/lucidchart-diagram-add-ons.png.6f91196b94193f9e87f1b78a01db8379.png" rel=""><img alt="lucidchart-diagram-add-ons.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26135" data-unique="mg6jtcnrg" src="https://academy.hsoub.com/uploads/monthly_2017_12/lucidchart-diagram-add-ons.thumb.png.d152be893105d14f3dfb0c632238fa91.png"></a>
</p>

<p>
	هل تريد إضافة بعض الخرائط الذاكرية والمخططات المميزة بسهولة وسرعة؟ إليك هذه الإضافة التي تساعدك في ذلك إذ تحتوي على أنواع كثير من المخططات منها المخططات الذاكرية، و<a href="https://academy.hsoub.com/programming/workflow/%D9%85%D8%AE%D8%B7%D8%B7%D8%A7%D8%AA-%D8%A7%D9%84%D9%81%D8%A6%D8%A7%D8%AA-class-diagram-%D9%81%D9%8A-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D9%86%D9%85%D8%B0%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D9%88%D8%AD%D8%AF%D8%A9-uml-r307/" rel="">مخططات UML</a> (لغة النمذجة الموحدة)، و<a href="https://academy.hsoub.com/design/general/%D8%A7%D9%84%D9%85%D8%AE%D8%B7%D8%B7%D8%A7%D8%AA-%D8%A7%D9%84%D9%87%D9%8A%D9%83%D9%84%D9%8A%D8%A9-wireframes-%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r72/" rel="">المخططات الهيكلية</a> (wireframes) وغيرها الكثير.<br>
	بعض مزايا هذه الإضافة هي:
</p>

<ul>
<li>
		احتوائها على مئات القوالب والأمثلة عن مختلف أنواع المخططات.
	</li>
	<li>
		تحديث المخططات المدرجة.
	</li>
	<li>
		سهولة الاستعمال، وإمكانيَّة التعديل على المخطط.
	</li>
	<li>
		التصدير بصيغ PDF و PNG و JPG.
	</li>
	<li>
		استيراد البيانات من Microsoft Visio ‏(‎.vsd و ‎.vsdx و ‎.vdx) والتصدير بصيغة ‎.vdx
	</li>
</ul>
]]></description><guid isPermaLink="false">321</guid><pubDate>Sun, 31 Dec 2017 07:03:01 +0000</pubDate></item><item><title>&#x625;&#x62F;&#x631;&#x627;&#x62C; &#x627;&#x644;&#x645;&#x62E;&#x637;&#x637;&#x627;&#x62A; &#x627;&#x644;&#x628;&#x64A;&#x627;&#x646;&#x64A;&#x629; &#x628;&#x627;&#x633;&#x62A;&#x639;&#x645;&#x627;&#x644; &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644;</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D8%AF%D8%B1%D8%A7%D8%AC-%D8%A7%D9%84%D9%85%D8%AE%D8%B7%D8%B7%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r319/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_12/26.png.6be51c0ada661f6a068c992099495188.png" /></p>

<p>
	تُستعمل المخطَّطات البيانيَّة بكثرة مع تطبيق جداول بيانات جوجل أو التطبيقات المشابهة له إذ تحتوي هذه الجداول عادةً على أرقام وإحصائيَّات كبيرة يَصعب على المستخدم تحليلها من النظرة الأولى للجدول لذا تُظهر المخطَّطات البيانيَّة تلك الأرقام بطريقة رسوميَّة تسِّهل قراءتها وتعطيها معنًى واضحًا بحيث توصل الفكرة أو الهدف من هذه الأرقام أو البيانات للقارئ بأسرع وأبسط شكل. سنتعرَّف في هذا المقال على كيفيَّة إدراج المخطَّطات وتنسيقها والتعديل عليها.
</p>

<h2 id="إدراج-مخطط-بياني-خطي">
	إدراج مخطَّط بياني خطي
</h2>

<p>
	لدينا جدول هطول مطري لبعض مدن العراق خلال الأعوام من 1995 وحتى 1999. يصعب على القارئ غير المتخصِّص تحليل هذه الهطولات وموازنتها من خلال الأرقام لذا ندرج مخطَّطا بيانيًّا يساعد القارئ على فهمها. نحدِّد كل الجدول عدا حقل المعدل الموسمي ثمَّ نختار من قائمة <strong>إدراج &gt; مخطَّط</strong>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26062" href="https://academy.hsoub.com/uploads/monthly_2017_12/insert-chart.png.54e62116a95f41d42f51b75b55a941c3.png" rel=""><img alt="insert-chart.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26062" data-unique="d3mm8749w" src="https://academy.hsoub.com/uploads/monthly_2017_12/insert-chart.thumb.png.1cf2e19ff97f8b5f093cbaa5e79101cc.png"></a>
</p>

<p>
	يُدرج مخطَّطٌ عشوائيٌ يقترحه التطبيق وهو ذو نوع “<strong>مخطَّط عمودي مكدس</strong>” يعتبره أنَّه الأنسب لقيم الجدول مع العلم أنَّ التطبيق رائع جدًا في تحليل البيانات واختيار المخطَّط والمحاور والمقياس المناسب. تظهر قائمة خصائص المخطَّط في القسم الأيسر من الواجهة بعد الضغط عليه وتحتوي على قائمتين فرعيتين هما: البيانات وتخصيص؛ نجد كل ما يتعلَّق باختيار المحاور وتمثيل البيانات على المخطَّط في قائمة “<strong>البيانات</strong>” الفرعيَّة بينما تحتوي القائمة الفرعيَّة “<strong>تخصيص</strong>” على كل ما يتعلق بالمظهر والشكل مثل تنسيق الخطوط والألوان وأسماء المحاور …إلخ.<br>
	إن أردنا تغيير نوع المخطَّط، نختار من قائمة “<strong>نوع المخطَّط</strong>” في قائمة البيانات النوع المطلوب؛ تظهر أربعة مخطَّطات مقترحة عند فتح القائمة وقد تكون مناسبة جدًا لنا، وتوضح الصورة نوع المخطَّط العمودي المقترح وكيفيَّة تنسيقه للبيانات بطريقة رائعة وواضحة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26055" href="https://academy.hsoub.com/uploads/monthly_2017_12/choose-chart-type-from-suggestions.png.4329bef2ab1670211683fde38a4af312.png" rel=""><img alt="choose-chart-type-from-suggestions.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26055" data-unique="qvghdqctp" src="https://academy.hsoub.com/uploads/monthly_2017_12/choose-chart-type-from-suggestions.thumb.png.56f5e9debee1cabd71941611b7538029.png"></a>
</p>

<p>
	سنغيِّر نوع المخطَّط إلى “<strong>مخطَّط خطي</strong>“؛ نطاق البيانات الموجود أسفل الخيار هو لتحديد كامل الجدول أو البيانات التي نريد تمثيلها على المخطَّط وإن لم يكن المجال محدَّدًا نضغط على مربع صغير يشبه الجدول فتظهر نافذة نحدِّد فيها نطاق البيانات، ويمكن إضافة أكثر من نطاق بالضغط على “<strong>إضافة نطاق آخر</strong>“.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26058" href="https://academy.hsoub.com/uploads/monthly_2017_12/data-range.png.6dd1cabcdf9e3f570a97cf5ddfb51177.png" rel=""><img alt="data-range.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26058" data-unique="0eww9d6bt" src="https://academy.hsoub.com/uploads/monthly_2017_12/data-range.thumb.png.3a8a8f0ceddda463f24f0ed29a0fb60c.png"></a>
</p>

<p>
	تُرسم البيانات بين المحور الأفقي (المحور س) والسلاسل ونحدِّد أي الأعمدة هي المحور الأفقي وأيها تمثل السلاسل (المحور الشاقولي) ونعدِّل عليها بالضغط على النُقط الثلاث واختيار “<strong>تعديل</strong>“.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26056" href="https://academy.hsoub.com/uploads/monthly_2017_12/choose-data-range-for-axis.png.27d6df46c6859b95548bc266598b5945.png" rel=""><img alt="choose-data-range-for-axis.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26056" data-unique="l4hmt3jn6" src="https://academy.hsoub.com/uploads/monthly_2017_12/choose-data-range-for-axis.thumb.png.b46e79e23af63ea2a29c8c5eb99c68bd.png"></a>
</p>

<p>
	يمكن إزالة أي سلسلة لا نريدها باختيار “<strong>إزالة</strong>“؛ الخيار الأخير “<strong>إضافة تصنيفات</strong>” هو لاختيار خليَّة اسم الصف أو الحقل إذ يَعتبر التطبيق أنَّ الصف الأول والعمود الأول من الجدول المحدَّد يحمل أسماء المحاور ويكون الخيار “<strong>استخدام الصف 4 كرؤوس</strong>” والخيار “<strong>استخدام العمود A كتصنيفات</strong>” في الأسفل مفعَّلان مسبقًا؛ يفهم التطبيق عند إزالة الخيارين السابقين أنَّ كلَّ النطاق المحدَّد هو بيانات أي هطولات يجب تمثيلها على المخطَّط وغالبًا لا نستعمل هذه الطريقة في تمثيل البيانات.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26067" href="https://academy.hsoub.com/uploads/monthly_2017_12/switch-rows-columns.png.44b85ee9c3d9eceadb687e39fc6fb38a.png" rel=""><img alt="switch-rows-columns.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26067" data-unique="jj3mqhirc" src="https://academy.hsoub.com/uploads/monthly_2017_12/switch-rows-columns.thumb.png.1a478a69c537e0c895fe3e352b1d2c71.png"></a>
</p>

<p>
	نفعِّل الخيار “<strong>تبديل الصفوف والأعمدة</strong>” للتبديل بين المحور س والسلاسل وهذا منطقي إذ أصبح المخطَّط الموضح في الصورة السابقة أكثر وضوحًا، ويمكن بذلك تحليل الهطولات المطرية خلال فترة من السنوات بين مختلف المدن.
</p>

<h2 id="تنسيق-المخططات-البيانية">
	تنسيق المخطَّطات البيانيَّة
</h2>

<p>
	ننتقل إلى قائمة “<strong>تخصيص</strong>” للتعديل على اسم المخطَّط وأسماء المحاور وتنسيقها. نستطيع تغيير لون خلفيَّة المخطَّط ونوع الخط من قائمة “<strong>نمط المخطَّط</strong>“؛ نلاحظ عند تفعيل خيار “<strong>متجانسة</strong>” تصبح السلاسل منحنيات أي ليست خطوط مستقيمة، ويجب تفعيل هذا الخيار إن كانت العلاقة بين المحورين غير خطيَّة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26054" href="https://academy.hsoub.com/uploads/monthly_2017_12/chart-style-smooth.png.7a7035e81f99a9dfbb99c5c5966b6013.png" rel=""><img alt="chart-style-smooth.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26054" data-unique="dwokjp2yj" src="https://academy.hsoub.com/uploads/monthly_2017_12/chart-style-smooth.thumb.png.e8a09c19d6368c4500821caab5570dff.png"></a>
</p>

<p>
	يمكنك تكبير المخطَّط إن كانت خطوط المحاور غير مهمَّة بتفعيل خيار “<strong>تكبير</strong>“.<br>
	ننتقل إلى قائمة “<strong>عناوين المخطَّطات</strong>” التي تحوي كلَّ الخيارات المتعلِّقة بعنوان المخطَّط الرئيسي والفرعي وعناوين المحاور وتنسيقاتها. نلاحظ أنَّ عنوان المخطَّط الرئيسي وعنوان المحور س غير مناسبين لذا نغيرهما. نحدِّد عنوان المخطَّط من قائمة “<strong>النوع</strong>” ونغيره أو نضغط عليه مباشرةً مرتين من المخطَّط ونغيره ونوسِّط موقعه ونغيِّر لونه وحجمه؛ نضيف عنوان فرعي ونغير اسم عنوان المحور الأفقي إلى “<strong>الأعوام</strong>“؛ نضيف اسمًا للمحور الشاقولي بالطريقة نفسها.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26052" href="https://academy.hsoub.com/uploads/monthly_2017_12/chart-and-axis-title.png.11c57657f45834b097415231d73acad9.png" rel=""><img alt="chart-and-axis-title.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26052" data-unique="gfmrmlksc" src="https://academy.hsoub.com/uploads/monthly_2017_12/chart-and-axis-title.thumb.png.4d1ad0858be0712eefff8bf0a1b93cb7.png"></a>
</p>

<p>
	تحوي قائمة “<strong>السلاسل</strong>” كلَّ الخيارات المتعلِّقة بشكل وتنسيق الخطوط المرسومة في المخطَّط؛ يمكن التحكم بشكل النقطة عند كل قيمة مُقاسة (نقطة تقاطع المحورين) وحجمها ومكان توضع المحور الشاقولي على اليمين أو اليسار إذ يمكن تطبيق ذلك لكل السلاسل أو سلسلة معيَّنة. يمكن إظهار القيم على السلاسل بتفعيل خيار “<strong>تصنيفات البيانات</strong>“، وإضافة خطوط اتجاه لكل سلسلة بتفعيل خيار “<strong>خط الاتجاه</strong>” وظيفته توضيح الاتجاه العام للسلسة هل هي صاعدة أم هابطة .
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26066" href="https://academy.hsoub.com/uploads/monthly_2017_12/series.png.0939ec277f61513c31dff0e7251e5c64.png" rel=""><img alt="series.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26066" data-unique="ubjn6we53" src="https://academy.hsoub.com/uploads/monthly_2017_12/series.thumb.png.11f38de11d8da537a043918879eacd4c.png"></a>
</p>

<p>
	ننتقل إلى قائمة التسمية التوضيحيَّة التي تحتوي على خيارات أسماء السلاسل المتوضِّعة على اليمين. ما رأيك أن نغير مكان أسماء هذه السلاسل؟ حسنًا، سنضعهم أسفل اسم المحور الأفقي حيث نختار “<strong>أسفل</strong>” من قائمة “<strong>الموضع</strong>“.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26063" href="https://academy.hsoub.com/uploads/monthly_2017_12/legend.png.7d489034df0fce8d60a1cea129320552.png" rel=""><img alt="legend.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26063" data-unique="8up7mf9c5" src="https://academy.hsoub.com/uploads/monthly_2017_12/legend.thumb.png.df1a5f1503c5aadade0ecc70b6cdb284.png"></a>
</p>

<p>
	القائمة التالية هي قائمة “<strong>المحور الأفقي</strong>” إذ تحوي كلَّ ما يتعلق بهذا المحور من مقياس ومكان توضع أسماء البيانات وتنسيقها. ما يهم في هذه القائمة هو قيمة بداية ونهاية المحور إذ يمكن اختيار هاتين القيمتين عوضًا عن القيم الموجودة في الجدول وهذا مهم لتحديد قيمة بداية المحور ونهايته. يمكن تفعيل خيار “<strong>مقياس لوغاريتمي</strong>” لاستعماله، ويمكن التحكم بعامل التدريج أيضًا كما نستطيع تدوير أسماء بيانات المحور عبر خيار “<strong>علامات الانحدار</strong>“.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26061" href="https://academy.hsoub.com/uploads/monthly_2017_12/horizontal-axis.png.2a8e2c45f9d10e79b07e5d89ed17ef85.png" rel=""><img alt="horizontal-axis.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26061" data-unique="th4pru02p" src="https://academy.hsoub.com/uploads/monthly_2017_12/horizontal-axis.thumb.png.8cb28daabfc288060bb6c5d5d45b5f14.png"></a>
</p>

<p>
	خيارات قائمة المحور العمودي مشابهة لخيارات القائمة السابقة.<br>
	نتحكم من قائمة “<strong>خطوط الشبكة</strong>” بعدد الخطوط الأفقيَّة والشاقوليَّة المرسومة في المخطَّط إذ يمكن زيادة عدد الخطوط الأفقيَّة (المحور العمودي) وإضافة خطوط ثانوية لتسهيل قراءة القيم إن كان المخطَّط سيُطبع على الورق.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26060" href="https://academy.hsoub.com/uploads/monthly_2017_12/grid-lines.png.51110c25f05bbdfead8136c272794daa.png" rel=""><img alt="grid-lines.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26060" data-unique="wus6kegjo" src="https://academy.hsoub.com/uploads/monthly_2017_12/grid-lines.thumb.png.375b5ddc2a33fd5d440c011b6f4c36cf.png"></a>
</p>

<p>
	لاحظ أنَّ جميع القوائم السابقة تحتوي على خيارات لتنسيق النصوص من حيث اللون والحجم والنوع …إلخ. وقد تختلف الخيارات السابقة بعض الشيء بحسب نوع المخطَّط.
</p>

<h2 id="أنواع-أخرى-من-المخططات">
	أنواع أخرى من المخطَّطات
</h2>

<p>
	يوجد الكثير من المخطَّطات التي يدعهما التطبيق يمكنك التعرف عليها ورؤية مثال عنها والحصول على بعض النصائح بزيارة <a href="https://support.google.com/docs/answer/190718" rel="external nofollow">هذه الصفحة</a>.
</p>

<h3 id="المخطط-الدائري-ثلاثي-الأبعاد">
	المخطَّط الدائري ثلاثي الأبعاد
</h3>

<p>
	يُستعمل المخطَّط الدائري بكثرة خصوصًا لموازنة البيانات مع بعضها بعضًا وتحويل البيانات إلى نسب مئوية. توضح الصورة التالية مخطَّطًا دائريًّا ثلاثي الأبعاد يَعرض مساحة بعض الدول.
</p>

<p style="text-align: center;">
	<img alt="3d-pie-chart.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26051" data-unique="mzo5qdvr9" src="https://academy.hsoub.com/uploads/monthly_2017_12/3d-pie-chart.png.11debaa2d258563270b4099d4d7d4c83.png"></p>

<h3 id="المخطط-الجغرافي">
	المخطَّط الجغرافي
</h3>

<p>
	يتيح تطبيق جداول بيانات جوجل إضافة خريطة ثمَّ ربط بيانات بها مثل ربط عدد السكان أو مساحة الدول أو أي معلومة بموقع ما على الخريطة ثمَّ إظهار البيانات عليها مباشرةً. يجب كتابة اسم البلد باللغة الإنجليزية أو كتابة رمز منطقتها ليتعرَّف التطبيق على الدولة ويربط البيانات بها. يمكن اختيار خريطة العالم كلها أو خريطة قارَّة معيَّنة إذ يتوافر خرائط عدَّة ضمن التطبيق.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26059" href="https://academy.hsoub.com/uploads/monthly_2017_12/geo-chart.png.d9d90f93955f933ad38dcd18e559adb2.png" rel=""><img alt="geo-chart.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26059" data-unique="j4gua9n6d" src="https://academy.hsoub.com/uploads/monthly_2017_12/geo-chart.thumb.png.5e5a190e62e0768d07dbc44fad9d2877.png"></a>
</p>

<h3 id="نسخ-المخططات-ونشرها-على-الويب">
	نسخ المخطَّطات ونشرها على الويب
</h3>

<p>
	قد نحتاج إلى إدراج المخطَّط في مستند ما أو حفظ صورة عنه لنشرها على موقع أو استعمالها في أماكن أخرى وكل ذلك متوافر في تطبيق جداول بيانات جوجل. نحدِّد الجدول ونضغط على النقط الثلاث في الزاوية اليسرى العلوية فتظهر قائمة بعدِّة خيارات.
</p>

<p style="text-align: center;">
	<img alt="chart-properties.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26053" data-unique="y6dygwa93" src="https://academy.hsoub.com/uploads/monthly_2017_12/chart-properties.png.139a8fe92f4f3639f3a7db91fdecf745.png"></p>

<p>
	إذا أردنا نسخ المخطَّط إلى تطبيق مستندات جوجل، نضغط على “<strong>نسخ المخطَّط</strong>” ثمَّ ننتقل إلى ذلك التطبيق ونضغط على لصق فيظهر خيارين.
</p>

<p style="text-align: center;">
	<img alt="copy-paste-charts.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26057" data-unique="pi00ib44s" src="https://academy.hsoub.com/uploads/monthly_2017_12/copy-paste-charts.png.a355fc24eb06d8b335598a9decfeb86e.png"></p>

<p>
	الخيار الأول هو لصق المخطَّط وربطه بالجدول في تطبيق جداول بيانات جوجل وتحديثه كلما حُدِّثت البيانات، والخيار الثاني هو إلغاء الربط فيُدرج المخطَّط باعتباره صورة.
</p>

<p style="text-align: center;">
	<img alt="linked-chart-in-google-documents.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26064" data-unique="kdbzlgubq" src="https://academy.hsoub.com/uploads/monthly_2017_12/linked-chart-in-google-documents.png.c2c18371b16c97c881afef8f448adfaa.png"></p>

<p>
	يمكن الضغط على “<strong>مصدر</strong>” للانتقال إلى المخطَّط في جداول البيانات أو إلغاء الارتباط به.<br>
	نستطيع حفظ المخطَّط بصيغة PNG وتنزيله إلى حاسوبنا أو يمكننا نشر المخطَّط على الويب عبر خيار “<strong>نشر المخطَّط</strong>” إذ نستطيع نشر المخطَّط فقط أو الصفحة الحالية أو المستند بأكمله.
</p>

<p style="text-align: center;">
	<img alt="publish-on-web.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26065" data-unique="qphkgiqjg" src="https://academy.hsoub.com/uploads/monthly_2017_12/publish-on-web.png.8dc19338b4684d6f3b326c0219c6d0d3.png"></p>

<h2 id="الخاتمة">
	الخاتمة
</h2>

<p>
	تعرَّفنا في هذا المقال على جميع الخيارات المتعلقة بإدراج المخطَّطات البيانيَّة في تطبيق جداول بيانات جوجل، وعليك الآن التوجه إلى التطبيق لإدراج مخطَّطك وتنسيقه بالشكل الذي تريده.
</p>
]]></description><guid isPermaLink="false">319</guid><pubDate>Tue, 26 Dec 2017 16:06:00 +0000</pubDate></item><item><title>&#x625;&#x646;&#x634;&#x627;&#x621; &#x62A;&#x642;&#x631;&#x64A;&#x631; &#x645;&#x628;&#x64A;&#x639;&#x627;&#x62A; &#x2013; &#x62F;&#x645;&#x62C; &#x627;&#x644;&#x62A;&#x648;&#x627;&#x628;&#x639;&#x60C; &#x627;&#x644;&#x62D;&#x645;&#x627;&#x64A;&#x629; &#x648;&#x627;&#x644;&#x62A;&#x646;&#x633;&#x64A;&#x642; &#x627;&#x644;&#x634;&#x631;&#x637;&#x64A;</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D9%82%D8%B1%D9%8A%D8%B1-%D9%85%D8%A8%D9%8A%D8%B9%D8%A7%D8%AA-%E2%80%93-%D8%AF%D9%85%D8%AC-%D8%A7%D9%84%D8%AA%D9%88%D8%A7%D8%A8%D8%B9%D8%8C-%D8%A7%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D8%A7%D9%84%D8%B4%D8%B1%D8%B7%D9%8A-r317/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_12/23.png.a9e6c5451dbe55e4e737d1bf82de4d97.png" /></p>

<p>
	أنهينا الجزء الأكبر من العمل على تقرير المبيعات في<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D9%82%D8%B1%D9%8A%D8%B1-%D9%85%D8%A8%D9%8A%D8%B9%D8%A7%D8%AA-%E2%80%93-%D8%A7%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7%D8%8C-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%88%D8%A7%D9%84%D9%82%D8%A7%D8%A6%D9%85%D8%A9-%D8%A7%D9%84%D9%85%D9%86%D8%B3%D8%AF%D9%84%D8%A9-r314/" rel=""> الدرس السابق</a> وستكون مهمتنا في هذا الدرس إضافة بعض اللمسات السحرية والتشطيبات النهائيَّة لبدء استعمال التقرير. سنتعلم في هذا الدرس بعض التوابع الجديدة التي سنضيفها إلى تقرير المبيعات وسنعرِّج على موضوع حماية أوراق العمل والنطاقات أثناء مشاركة الملف مع الآخرين ثمَّ سنتعرَّف على كيفيَّة استعمال التنسيق الشرطي.
</p>

<h2 id="دمج-مجموعة-من-التوابع">
	دمج مجموعة من التوابع
</h2>

<p>
	استعملنا في <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D9%82%D8%B1%D9%8A%D8%B1-%D9%85%D8%A8%D9%8A%D8%B9%D8%A7%D8%AA-%E2%80%93-%D8%A7%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7%D8%8C-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%88%D8%A7%D9%84%D9%82%D8%A7%D8%A6%D9%85%D8%A9-%D8%A7%D9%84%D9%85%D9%86%D8%B3%D8%AF%D9%84%D8%A9-r314/" rel="">الدرس السابق</a> القائمة المنسدلة لإدراج المنتج المُباع (حقل رقم المنتج والوصف) ولكن توجد حقيقةً طريقة أخرى متقدمة نستعمل فيها التوابع لاختيار وصف المنتج بالبحث عنه في جدول المخزون.<br>
	التوابع التي سنستخدمها هي:
</p>

<center>
	<table border="1"><tbody>
<tr>
<td style="background-color: rgb(30,180,80); color: rgb(255,255,255); padding: 5px 10px; text-align: center;">
					التابع
				</td>
				<td style="background-color: rgb(30,180,80); color: rgb(255,255,255); padding: 5px 10px; text-align: center;">
					طريقة الاستعمال
				</td>
				<td style="background-color: rgb(30,180,80); color: rgb(255,255,255); padding: 5px 10px; text-align: center;">
					الوصف
				</td>
			</tr>
<tr>
<td style="padding: 5px 10px; text-align: left;">
					IFERROR
				</td>
				<td style="padding: 5px 10px; text-align: left;">
					IFERROR(value, [value_if_error])
				</td>
				<td style="padding: 5px 10px; text-align: right;">
					يُرجع هذا التابع القيمة الأولى إن لم تكن خطأً، وإن كانت خطأ فيرجع القيمة الثانية إن كانت موجودة أو يرجع قيمة فارغة. يُستعمل للتحكم في ظهور الأخطاء في الخلايا.
				</td>
			</tr>
<tr>
<td style="padding: 5px 10px; text-align: left;">
					IF
				</td>
				<td style="padding: 5px 10px; text-align: left;">
					IF(logical_expression, value_if_true, value_if_false)
				</td>
				<td style="padding: 5px 10px; text-align: right;">
					يُرجع القيمة الأولى (value if true) إن تحقَّق التعبير المنطقي (logical expression) ويرجع القيمة الثانية إن لم يتحقق.
				</td>
			</tr>
<tr>
<td style="padding: 5px 10px; text-align: left;">
					ISNA
				</td>
				<td style="padding: 5px 10px; text-align: left;">
					ISNA(value)
				</td>
				<td style="padding: 5px 10px; text-align: right;">
					يُستعمل للتحقُّق إن كانت القيمة (value) هي خطأ ذو الرمز "#N/A" أي غير متاح أو متوافر (not available) أو لا يتوافر جواب للعمليَّة، ويُرجع العبارة "true" إن كانت القيمة هي خطأ من النوع السابق أو يُرجع العبارة "false" إن لم تكن خطأ.
				</td>
			</tr>
<tr>
<td style="padding: 5px 10px; text-align: left;">
					VLOOKUP
				</td>
				<td style="padding: 5px 10px; text-align: left;">
					VLOOKUP(search_key, range, index, [is_sorted])
				</td>
				<td style="padding: 5px 10px; text-align: right;">
					<p>
						يُستخدم للبحث العمودي، ومُدخلات هذا التابع هي:
					</p>

					<ul>
<li>
							search_key: القيمة التي نبحث عنها.
						</li>
						<li>
							Range: المجال الذي نبحث فيه.
						</li>
						<li>
							Index: رقم الحقل الذي نريد جلب القيمة المقابلة للقيمة التي نبحث عنها في العمود الأول من المجال المحدَّد.
						</li>
						<li>
							is_sorted: إن كانت القيم في المجال المحدَّد مرتَّبة نضع "true" وإن لم تكن مرتَّبة نضع "false".
						</li>
					</ul>
</td>
			</tr>
</tbody></table>
</center>

<p>
	قبل استعمال التابع دعنا نفعل شيئًا يسِّهل عملنا؛ سننتقل إلى ورق المخزون ونحدِّد جدول المخزون أي عمود رقم المنتج والوصف ثمَّ نضغط بزر الفأرة الأيمن ونختار “تعريف النطاق المحدَّد” ونعطي للنطاق المحدَّد عنوان “المنتجات” ثمَّ نضغط على “<strong>تم</strong>“؛ إن أردنا استعمال النطاق السابق في التوابع أو أي مكان فما علينا سوى كتابة اسمه. مزيَّة عنونة النطاق هي بقاء النطاق ثابت مهما تحركت الخليَّة أو نُسخت إلى مكان آخر في الجدول إذ إن لم يُثبَّت النطاق فسيتغير نسبة إلى تغير عنوان الخليَّة.
</p>

<p style="text-align: center;">
	<img alt="define-named-range.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26014" data-unique="a0kueut4t" src="https://academy.hsoub.com/uploads/monthly_2017_12/define-named-range.png.d66f1eeb3c0d57bbdc724b4a9814aefc.png"></p>

<p>
	نُدرج التوابع السابقة في الخليَّة E8 للبحث عن الوصف المقابل لرقم المنتج المُدخل في الخليَّة D8 في جدول المخزون وذلك كما موضح في الصورة.
</p>

<p style="text-align: center;">
	<img alt="insert-functions.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26015" data-unique="sijgt282p" src="https://academy.hsoub.com/uploads/monthly_2017_12/insert-functions.png.d20d1b4b341effaae797986c77afab50.png"></p>

<p>
	استعملنا أولًا التابع <strong>IFERROR</strong> لإظهار الرسالة التي نريدها إن وُجد خطأٌ ما لتجنب ظهور رموز لا نرغب بها؛ وضعنا في الدخل الأول التابع <strong>IF</strong> والدخل الثاني الرسالة “<strong>لم يُعثر على المنتج</strong>” لإظهارها في حال وجود أي خطأ. القيمة المنطقية للتابع <strong>IF</strong> هي التابع <strong>ISNA</strong> مع التابع <strong>VLOOKUP</strong> للتأكد من وجود القيمة التي نبحث عنا؛ إذا لم يجد التابع <strong>VLOOKUP</strong> ما يبحث عنه فسيُرجع الخطأ <strong>‎#N/A</strong> وحينئذٍ سيُرجع التابع <strong>ISNA</strong> العبارة <strong>true</strong> أي يوجد خطأ وبالتالي يأخذ التابع <strong>IF</strong> القيمة الأولى وهي “لم يُعثر على المنتج”. أمَّا إن وجد التابع <strong>VLOOKUP</strong> القيمة التي يبحث عنها فسيرجع التابع <strong>ISNA</strong> القيمة <strong>false</strong> أي لا يوجد خطأ وبالتالي سيختار التابع <strong>IF</strong> القيمة الثانية وهي التابع <strong>VLOOKUP</strong> أي القيمة التي يرجعها هذا التابع وهي التي نبحث عنها في جدول المخزون.<br>
	لاحظ أنَّنا استعملنا عبارة “المنتجات” للدلالة على عنوان جدول المخزون الذي نودُّ البحث فيه ويمكن استعمال النطاق مباشرةً مع الضغط على F4 لتثبيت عنوان النطاق.<br>
	نسحب الخليَّة E8 إلى الخلايا السفليَّة لنسخ العلاقة وستكون النتيجة كما موضح بالصورة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26011" href="https://academy.hsoub.com/uploads/monthly_2017_12/check-functions-working.png.9925f9aca9ed39265c0a7e290f98ce12.png" rel=""><img alt="check-functions-working.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26011" data-unique="nduc0rq4q" src="https://academy.hsoub.com/uploads/monthly_2017_12/check-functions-working.thumb.png.b92a34085d8b6ae00eb72244b481ec6e.png"></a>
</p>

<p>
	إن وَجدت للوهلة الأولى أنَّ الأمر معقدٌ فجرِّب كتابة العلاقة السابقة بنفسك وأعد قراءة الشرح مرةً أخرى وستفهمها بالتأكيد.
</p>

<h2 id="حماية-الأوراق-والخلايا">
	حماية الأوراق والخلايا
</h2>

<p>
	انتهينا من إنشاء تقرير المبيعات وأصبح جاهزًا للاستخدام. سنشارك هذا الجدول مع العامل ليُدخل بيانات المنتجات التي يبيعها ولكن ماذا لو غيَّر قيم خلايا لا يحق له تغييرها مثل تغيير قيم جدول المخزون أو تغيير محتوى خليَّة الوصف التي تعذبنا كثيرًا حتى أنشأناها أو في محتوى الخلايا الأخرى بقصد أو بغير قصد؟! سنضطر هنا إلى حماية الأوراق أو الخلايا من عبث الأشخاص الذين نشاركهم ملفاتنا وسنعطي كلَّ شخص الصلاحيات المناسبة للتعديل على الخلايا والأوراق.<br>
	نضغط على السهم الموجود بجانب ورقة المخزون ونختار “حماية الورقة” أو نختار من قائمة <strong>البيانات ← الأوراق والنطاقات المحميَّة</strong> وستظهر قائمة في الطرف الأيسر.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26016" href="https://academy.hsoub.com/uploads/monthly_2017_12/protected-sheets-and-ranges.png.bfe92691173f8c105ca0194af7413f2b.png" rel=""><img alt="protected-sheets-and-ranges.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26016" data-unique="u4fcxjn90" src="https://academy.hsoub.com/uploads/monthly_2017_12/protected-sheets-and-ranges.thumb.png.2b63685a977fcbb3e50abbbe40155896.png"></a>
</p>

<p>
	نضع وصفًا لحماية الورقة ثمَّ نحدِّد إن كنا نريد حماية الورقة بأكملها أو نطاق محدَّد ضمن الورقة ثمَّ نحدِّد اسم الورقة وإن كنا نريد أن نستثني بعض الخلايا ليتاح تعديلها ثمَّ نضغط على “<strong>تعيين الأذونات</strong>“.<br>
	يظهر لدينا خيارين؛ الخيار الأول هو إظهار تحذير عند تعديل النطاق أو الورقة المحميَّة إذ تظهر رسالة تنبهك إلى أنَّه لا يفترض تعديل هذا النطاق وإن كنت واثقًا من التعديل فاضغط موافق سواءً لك أو لمن تشاركهم الملف.
</p>

<p style="text-align: center;">
	<img alt="warning-message-when-editing-protected-range.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26019" data-unique="i8b2okl0r" src="https://academy.hsoub.com/uploads/monthly_2017_12/warning-message-when-editing-protected-range.png.2468cfea667be9a11a0ade159f43f4ce.png"></p>

<p>
	الخيار الثاني هو تقييد من يمكنه تعديل النطاق أو الورقة ومنع جميع الأشخاص من التعديل باختيار “<strong>أنت فقط</strong>” أو اختيار “<strong>مخصص</strong>” للسماح لبعض الأشخاص من التعديل على الورقة أو النطاق بوضع إشارة بجانب أسمائهم.
</p>

<p style="text-align: center;">
	<img alt="range-editing-permissions.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26017" data-unique="cew23h1m3" src="https://academy.hsoub.com/uploads/monthly_2017_12/range-editing-permissions.png.05c2612e08e12c172e5b8ebea925b637.png"></p>

<p>
	عند حماية الورقة أو الخلايا لن يتمكن الآخرون من التعديل عليها ولكن يستطيعون رؤيتها بحسب الإذن المعطى لهم.<br>
	يمكن حماية حقول الوصف ونسبة ومقدار الضريبة والإجمالي في جدول بيانات المبيعات حتى لا يعبث أحدٌ بها فنحصل على معلومات خاطئة بالطريقة نفسها ولكن نختار “<strong>حماية نطاق</strong>” بدلًا من ورقة.<br><strong>فكرة إضافية:</strong> يمكن في جدول المخزون وضع سعر لكل قطعة وعندما نختار رقم المنتج يوضع سعرها في حقل بيانات المبيعات مباشرةً مثل حقل الوصف وهنا نحتاج إلى حقل يصف عدد المنتجات المُباعة وبذلك نحمي سعر المنتج ويتبقى إدخال التاريخ والوقت ورقم المنتج وعدد القطع المُباعة فقط.
</p>

<h2 id="التنسيق-الشرطي">
	التنسيق الشرطي
</h2>

<p>
	يُستعمل التنسيق الشرطي لتنسيق الخلايا اعتمادًا على مجموعة من القواعد يحدِّدها المستخدم والتي توازن محتوى الخليَّة مع تلك القواعد وتنسِّقها بناءً على ذلك. نستعمله في جعل لون الخليَّة أحمر مثلًا إن كانت تحوي عبارة “راسب” ليسهل علينا تحديد الطلاب الراسبين أو إن كانت قيمة الخليَّة أقل أو أكبر من قيمة معيَّنة؛ توجد الكثير من القواعد لتنسيق النصوص والتواريخ والأرقام ويمكن تخصيص قاعدة جديدة غير موجودة.
</p>

<p style="text-align: center;">
	<img alt="conditional-formatting.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26013" data-unique="94ms21x8p" src="https://academy.hsoub.com/uploads/monthly_2017_12/conditional-formatting.png.cd638d757944340db649f389591545d9.png"></p>

<p>
	يوفر تطبيق جداول بيانات google نوعين من التنسيق هما: لون فردي وتدرج ألوان؛ سنُنسق حقل مقدار الضريبة باللون الفردي لتحديد قيمة الضريبة الأقل من 200 ليرة. نحدِّد حقل مقدار الضريبة ونضغط بزر الفأرة الأيمن ونختار “تنسيق شرطي” أو من قائمة <strong>التنسيق ← تنسيق شرطي</strong> ثمَّ نختار قاعدة “<strong>أصغر من أو يساوي</strong>” ثمَّ نضع القيمة 200 ونحدِّد تنسيق الخليَّة ونضغط “<strong>تم</strong>“.
</p>

<p style="text-align: center;">
	<img alt="single-color-conditional-formatting.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26018" data-unique="q27gcgwif" src="https://academy.hsoub.com/uploads/monthly_2017_12/single-color-conditional-formatting.png.a5fbec8ffd711fbf9ca2e6ae05097c04.png"></p>

<p>
	سنُنسق حقل الإجمالي وفق تنسيق التدرج اللوني لمعرفة القيمة العظمى والقيمة الصغرى المباعة في اليوم. نضغط على إضافة قاعدة جديدة ونختار “<strong>تدرج اللون</strong>” ثمَّ نحدِّد خلايا الحقل في مربع “ينطبق على نطاق”؛ نختار التدرج اللوني المناسب ثمَّ نختار “<strong>الحد الأدنى</strong>” من خيارات القيمة الدنيا وخيار “<strong>الحد الأقصى</strong>” من خيارات القيمة العظمى. يظهر تنسيق الحقل كما موضح في الصورة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="26012" href="https://academy.hsoub.com/uploads/monthly_2017_12/color-scale-conditional-formatting.png.51681a63695013328d1a6aca9620bdb8.png" rel=""><img alt="color-scale-conditional-formatting.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26012" data-unique="pl7h7f2cw" src="https://academy.hsoub.com/uploads/monthly_2017_12/color-scale-conditional-formatting.thumb.png.08fd8988a1d421a965b3ac5b0b2d904c.png"></a>
</p>

<p>
	توجد قواعد كثيرة في التنسيق الشرطي تنتظرك لاستكشافها والتي تسهِّل عليك تنسيق جدولك وتحليل البيانات وقراءتها بسرعة.
</p>

<h2 id="الخاتمة">
	الخاتمة
</h2>

<p>
	انتهينا من إنشاء تقرير المبيعات وأصبح جاهزًا لملء البيانات فيه وآمنًا لمشاركته مع الآخرين. إنَّ ما تعلمته إلى الآن يمكِّنك من إنشاء أغلب الجداول التي ستلزمك في جميع أمور حياتك اليوميَّة وبأفضل تصميم؛ كل ما عليك هو فتح تطبيق جداول بيانات جوجل والبدء بتصميم جدولك.
</p>
]]></description><guid isPermaLink="false">317</guid><pubDate>Sat, 23 Dec 2017 07:01:17 +0000</pubDate></item><item><title>&#x625;&#x646;&#x634;&#x627;&#x621; &#x62A;&#x642;&#x631;&#x64A;&#x631; &#x645;&#x628;&#x64A;&#x639;&#x627;&#x62A; &#x2013; &#x627;&#x644;&#x631;&#x648;&#x627;&#x628;&#x637;&#x60C; &#x627;&#x644;&#x62A;&#x646;&#x633;&#x64A;&#x642; &#x648;&#x627;&#x644;&#x642;&#x627;&#x626;&#x645;&#x629; &#x627;&#x644;&#x645;&#x646;&#x633;&#x62F;&#x644;&#x629;</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D9%82%D8%B1%D9%8A%D8%B1-%D9%85%D8%A8%D9%8A%D8%B9%D8%A7%D8%AA-%E2%80%93-%D8%A7%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7%D8%8C-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-%D9%88%D8%A7%D9%84%D9%82%D8%A7%D8%A6%D9%85%D8%A9-%D8%A7%D9%84%D9%85%D9%86%D8%B3%D8%AF%D9%84%D8%A9-r314/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_12/12.png.924fdbd48830141e29b7bb6c3dbb5947.png" /></p>

<p>
	تعلمنا في الدرس السابق (<a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AC%D8%AF%D9%88%D9%84-%D9%84%D8%B9%D9%84%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%B7%D9%84%D8%A7%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r311/" rel="">إنشاء جدول لعلامات الطلاب</a>) كيفيَّة إنشاء جدول وتنسيقه كاملًا بدءًا من رأس الجدول وجسمه وحتى تذييله، وإدراج الحدود وتنسيقها، وتطرَّقنا إلى موضوع التوابع حيث أدرجنا وشرحنا بعضًا منها. سنكمل في هذا الدرس موضوع تنسيق الخلايا ولكن من حيث المحتوى وسنتطرَّق إلى إدراج الروابط وكيفيَّة الاستفادة منها بالتنقل بين أوراق العمل ثمَّ سننشئ قائمة منسدلة بتحديد عدد معين من البيانات لإدخالها في الخليَّة وذلك بالتطبيق العملي عبر إنشاء تقرير مبيعات يومي.
</p>

<h2>
	إنشاء جدول المبيعات
</h2>

<p>
	ننشئ جدولًا جديدًا ونسميه "تقرير المبيعات اليومية" وننشئ ورقتي عمل الأولى هي بيانات المبيعات لإدخال بيانات المواد التي تُباع والثانية هي المخزون لإدخال بيانات المواد المتوافرة؛ نضيف أسماء الحقول اللازمة وهي البيانات التي نحتاج إدخالها أو استنتاجها عند كل عملية بيع نقدية، ونُنسِّق للخلايا ونخفي خطوط الشبكة من <strong>عرض ← خطوط الشبكة</strong> لإعطاء مظهر جمالي للورقة. يظهر جدول بيانات المبيعات كما موضح في الصورة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25821" href="https://academy.hsoub.com/uploads/monthly_2017_12/sells-report-sheet.png.db02f918f1c454c03f00a6f66378ba78.png" rel=""><img alt="sells-report-sheet.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25821" data-unique="p2ejktyac" src="https://academy.hsoub.com/uploads/monthly_2017_12/sells-report-sheet.thumb.png.f7c7f4a77e336f472d9b2377002e9fd9.png"></a>
</p>

<p>
	بعد تنسيق جدول بيانات المبيعات نضغط على خصائص ورقة بيانات المبيعات ثمَّ نختار "<strong>تكرار</strong>" لتكرار الورقة وذلك لتوفير عناء إعادة تنسيق الخلايا من جديد ويبقى لدينا تعديل حقول الجدول فقط ليوافق جدول المخزون. سيظهر جدول المخزون النهائي كما هو موضح في الصورة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25822" href="https://academy.hsoub.com/uploads/monthly_2017_12/store-sheet.png.6285d7903bcea5c2ad3bff82500fb9be.png" rel=""><img alt="store-sheet.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25822" data-unique="0co5f2mve" src="https://academy.hsoub.com/uploads/monthly_2017_12/store-sheet.thumb.png.404a225d16fd067abb6159cb91c5c9c8.png"></a>
</p>

<p>
	يمكن إضافة حقول أخرى في هذا الجدول متعلِّقة بالمُنتج مثل السعر الإفرادي والكميَّة المتوافرة وغيرها من المعلومات.
</p>

<h2>
	إدراج رابط
</h2>

<p>
	قد تتساءل عن الهدف من كتابة عبارة "بيانات المبيعات" وعبارة "المخزون" أعلى الجدولين السابقين إذ سنجعلها زرين ننتقَّل بالضغط على أحدهما إلى ورقة العمل المقابلة وذلك لتسهيل التنقُّل بين أوراق العمل. نحدِّد خليَّة "بيانات المبيعات" ثمَّ نختار من قائمة <strong>إدراج ← رابط</strong> أو من شريط الأدوات نختار "<strong>رابط</strong>" أو باستعمال الاختصار <strong>Ctrl +K</strong> ونختار من قائمة "<strong>الأوراق</strong>" ورقة بيانات المبيعات؛ نفعل الأمر ذاته مع خليَّة "المخزون".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25818" href="https://academy.hsoub.com/uploads/monthly_2017_12/insert-link.png.f88192368be324d922f9a7197cf219bd.png" rel=""><img alt="insert-link.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25818" data-unique="crwi1o6nl" src="https://academy.hsoub.com/uploads/monthly_2017_12/insert-link.thumb.png.210f5ed76996f4d6b0e3a0c40c4f2254.png"></a>
</p>

<p>
	نستطيع بالضغط على الخليَّة أو الرابط الأزرق الذي يظهر فوقها التنقُّل بسهولة بين أوراق العمل في الجدول.
</p>

<p>
	يمكن باستعمال إدراج رابط الإشارة إلى خلايا ذات نطاق محدَّد أيضًا أو إدراج رابط خارجي.
</p>

<h2>
	تنسيق محتوى الخلايا
</h2>

<p>
	يتألف الجدول من صفوف (أسطر) وحقول (أعمدة) وتكون الحقول ذات نوع واحد من البيانات أي يحتوي الحقل على تواريخ ميلاد أو أسماء طلاب أو منتجات أي نصوص أو نسب مئوية ...إلخ. بينما يضم السطر حقولًا عدَّة وبذلك يجمع بيانات ذات أنواع مختلفة وتعطي بمجملها معلومة مفيدة عن شخص أو مُنتج ...إلخ.
</p>

<p>
	قد نحتاج إلى تنسيق محتوى الحقول بما أنَّها تضم نوع واحد من البيانات بطريقة تناسب الجدول مثل تحديد عدد الفواصل العشرية إن كانت بيانات الحقل هي أرقام أو تحديد صيغة معيَّنة لإدخال التاريخ ضمن الحقل الذي يحتوي على تواريخ ميلاد أو يمكن اختيار تنسيق النسبة المئوية أو تنسيق العملة للحقل الذي يحتوي على نسبة مئوية أو عملة معيَّنة إلى ما هنالك من تنسيقات سنستعرضها كاملًا.
</p>

<p>
	نبدأ بتنسيق محتوى العمود الأول من جدول المبيعات وهو حقل "التاريخ" حيث نحدِّد العمود بأكمله بالضغط على الخليَّة A أو نحدِّد نطاق الخلايا بدءًا من الخليَّة أسفل التاريخ وحتى آخر الجدول ثمَّ نختار من قائمة <strong>التنسيق ← رقم ← التاريخ</strong> أو نضغط على "<strong>مزيد من التنسيقات</strong>" من شريط الأدوات في قسم التنسيقات ونختار "<strong>التاريخ</strong>" وبذلك تصبح الخلايا مخصَّصة لإدخال التاريخ مع عدم الاعتراض على إدخال بيانات مخالفة في الخليَّة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25813" href="https://academy.hsoub.com/uploads/monthly_2017_12/date-formatting.png.3c8739687d266341badcbadc8612ca74.png" rel=""><img alt="date-formatting.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25813" data-unique="yritpn9l1" src="https://academy.hsoub.com/uploads/monthly_2017_12/date-formatting.thumb.png.04e41b61ef94fc802b2d70f1b635660f.png"></a>
</p>

<p>
	نغيِّر تنسيق محتوى حقل الوقت بالطريقة ذاتها إلى نوع "الوقت"؛ يوجد الكثير من تنسيقات التاريخ والوقت بالإضافة إلى إمكانيَّة تصميم التنسيق الذي نريده؛ نجد ذلك في قائمة <strong>تنسيق ← رقم ← المزيد من التنسيقات ← المزيد من تنسيقات التاريخ والوقت</strong>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25811" href="https://academy.hsoub.com/uploads/monthly_2017_12/custom-date-formatting.png.f289cd1196625d256cf70787bafed8ea.png" rel=""><img alt="custom-date-formatting.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25811" data-unique="af75hxn0r" src="https://academy.hsoub.com/uploads/monthly_2017_12/custom-date-formatting.thumb.png.864156ea7ba6650f992664a1595a5229.png"></a>
</p>

<p>
	يمكن اختيار أحد التنسيقات الموجودة والتعديل عليها بالضغط على "<strong>اليوم</strong>" واختيار "<strong>إضافة صفر</strong>" مثلًا أو وضع اختصار للشهر بدلًا من الاسم الكامل أو وضع رقمين للدلالة على العام، ويمكن تصميم التنسيق الذي ترغب به بالضغط على السهم الصغير الموجود على يسار مربع الصيغة واختيار الصيغة المناسبة والتعديل عليها أيضًا.
</p>

<p>
	بعد اختيار التنسيق المناسب جرِّب إدخال تاريخ أو وقت ما وسوف يتغير تنسيقه مباشرةً إلى التنسيق الذي اخترناه للخليَّة وسيظهر بالضغط على الخليَّة مرتين رزنامة تسهِّل علينا تحديد التاريخ.
</p>

<p style="text-align: center;">
	<img alt="date-and-time-formatting.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25812" data-unique="9u7l596bv" src="https://academy.hsoub.com/uploads/monthly_2017_12/date-and-time-formatting.png.e702c536ca6d564723a47abd56159ffb.png"></p>

<p>
	ماذا لو أردنا من البرنامج الاعتراض وعدم قبول تاريخ غير صحيح أو عدم قبول أي قيمة سوى التاريخ؟ يوفِّر تطبيق جداول بيانات جوجل ذلك حيث نحدِّد خلايا حقل التاريخ ونضغط زر الفأرة الأيمن ونختار من أسفل القائمة خيار "<strong>التحقق من صحة البيانات</strong>" فتظهر نافذة شبيهة بالنافذة الموضحة بالصورة التالية.
</p>

<p style="text-align: center;">
	<img alt="check-content-validity.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25810" data-unique="9l8t36sta" src="https://academy.hsoub.com/uploads/monthly_2017_12/check-content-validity.png.74380bfef86f99bebaaabf9360d88b19.png"></p>

<p>
	حدَّدنا مسبقًا نطاق البيانات؛ نختار من المعايير "<strong>التاريخ</strong>" ونحدِّد الخيار المناسب من القائمة اللاحقة. اخترنا في حالتنا "يعد تاريخًا صالحًا" كما توجد خيارات كثيرة يمكنك استكشافها لاحقًا. يوجد خياران يلجأ إليهما التطبيق إن كانت البيانات المدخلة غير صالحة أولهما هو عرض تحذير للمستخدم ينبهه أنَّ البيانات المدخلة غير صالحة مع إمكانيَّة إدخال تلك البيانات في الخليَّة، وثانيهما هو رفض إدخال القيمة غير الصالحة في الخليَّة إذ لا يمكن للمستخدم الانتقال إلى الخليَّة التالية حتى يُدخل قيمة صالحة في الخليَّة الحالية. يمكن إظهار رسالة مساعدة للمستخدم ترشده حول كيفيَّة إدخال قيمة صالحة في الخليَّة.
</p>

<p style="text-align: center;">
	<img alt="date-validity-notification.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25814" data-unique="d3wat9p75" src="https://academy.hsoub.com/uploads/monthly_2017_12/date-validity-notification.png.816903ee1c5f3864d4e0b7aa6ad16ac9.png"></p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>ملاحظة</strong>: لا يمكن هنا تحديد كامل العمود لوجود رأس الجدول ضمن النطاق والذي لا يعتبر من القيم الصالحة.
		</p>
	</div>
</blockquote>

<p>
	نعرِّف بقيَّة حقول الجدول بالطريقة ذاتها بحث يكون نوع محتوى الخلايا "رقم" لحقل رقم العمليَّة وحقل "رقم المنتج" مع إزالة الفاصلة من التنسيق بالضغط على زر "تقليل المنازل العشرية" في قسم تنسيق محتوى الخليَّة في شريط الأدوات، ونوع "نسبة مئوية" لحقل نسبة الضريبة، ونوع "عملة" لحقول مقدار المبيعات ومقدار الضريبة والإجمالي؛ يظهر تنسيق الحقول كما هو موضح بالصورة التالية.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25809" href="https://academy.hsoub.com/uploads/monthly_2017_12/cells-format.png.02e037e72598cfdcc47731083ca76040.png" rel=""><img alt="cells-format.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25809" data-unique="6i835na05" src="https://academy.hsoub.com/uploads/monthly_2017_12/cells-format.thumb.png.4c3c485d1816a82c12400967507cb530.png"></a>
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			<strong>ملاحظة</strong>: مقدار الضريبة هو جداء نسبة الضريبة بمقدار المبيعات، وحقل الإجمالي هو جمع مقدار الضريبة مع مقدار المبيعات.
		</p>
	</div>
</blockquote>

<h2>
	إنشاء قائمة منسدلة
</h2>

<p>
	سننشئ قائمة منسدلة لحقل الوصف ورقم المنتج لنتمكن من إضافة المواد بسهولة وسرعة؛ ننتقل أولًا إلى ورقة المخزون ونملأ جدول المخزون بالمواد المتوافرة للبيع أي نضيف رقم المادة واسمها أو وصف عنها لنتمكن من معرفة المواد المتوافرة لدينا عند البيع.
</p>

<p>
	نعود إلى ورقة بيانات المبيعات ونحدِّد حقل الوصف ثمَّ نضغط بزر الفأرة الأيمن ونختار "<strong>التحقق من صحة البيانات</strong>"؛ نختار من قائمة المعايير خيار "<strong>قائمة من النطاق</strong>" لتحديد البيانات من خلايا موجودة مسبقًا؛ نضغط على مربع صغير يشبه الجدول الموجود في مربع الإدخال لتحديد نطاق البيانات ثمَّ نذهب إلى ورقة المخزون ونحدِّد نطاق البيانات الموجودة في حقل الوصف ونضغط "<strong>موافق</strong>". نحدِّد بعد ذلك على خيار "<strong>إظهار القائمة المنسدلة في الخليَّة</strong>" ونحدِّد على خيار "<strong>رفض الإدخال</strong>" لمنع إدخال المواد غير المتوافرة في الخليَّة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25817" href="https://academy.hsoub.com/uploads/monthly_2017_12/insert-dropdown-list.png.8ffe3ed4a9cdbfda5caf50ec331fd5f7.png" rel=""><img alt="insert-dropdown-list.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25817" data-unique="slcstu7pm" src="https://academy.hsoub.com/uploads/monthly_2017_12/insert-dropdown-list.thumb.png.c5cc97fd8cdb8ccfbda2a015941d6a99.png"></a>
</p>

<p>
	نضغط على "<strong>حفظ</strong>" فيظهر سهمٌ صغيرٌ بجانب الخلايا؛ نضغط على السهم فتظهر قائمة بالمواد المتوافرة وتُحدَّث تلقائيًّا كلما حُدِّثت البيانات في ورقة المخزون.
</p>

<p style="text-align: center;">
	<img alt="dropdown-list.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25816" data-unique="souixkils" src="https://academy.hsoub.com/uploads/monthly_2017_12/dropdown-list.png.cbebd07dcfbbb01d50198afa57343253.png"></p>

<p>
	يمكن إنشاء قائمة منسدلة عبر خيار "<strong>قائمة العناصر</strong>" في معايير التحقق من صحة البيانات ولكن هذه العناصر ستكون دائمة ويمكن تعديلها يدويًا بينما ترتبط القائمة السابقة بنطاق من البيانات وتُحدَّث تلقائيًّا. بقيَّة المعايير هي مهمتك للتعرُّف عليها وتجريبها واحدة تلو الأخرى.
</p>

<h2>
	الخاتمة
</h2>

<p>
	أنشأنا جدولا مميزًا خاصًّا بنا لإدارة عملية البيع وتعلمنا بوساطته كيفيَّة تنسيق محتوى الخلايا وإدراج الروابط وكيفيَّة التحقق من صحة إدخال البيانات وإنشاء قائمة منسدلة. لم ننتهِ بعد من إنشاء هذا الجدول إذ سنتعلم في الدرس القادم الكثير من الأمور المفيدة والجديدة حول هذا التطبيق منها كيفيَّة حماية أوراق العمل والنطاقات عند مشاركة الملف وإضافة توابع جديدة.
</p>
]]></description><guid isPermaLink="false">314</guid><pubDate>Tue, 12 Dec 2017 17:13:00 +0000</pubDate></item><item><title>&#x625;&#x646;&#x634;&#x627;&#x621; &#x62C;&#x62F;&#x648;&#x644; &#x644;&#x639;&#x644;&#x627;&#x645;&#x627;&#x62A; &#x627;&#x644;&#x637;&#x644;&#x627;&#x628; &#x628;&#x627;&#x633;&#x62A;&#x639;&#x645;&#x627;&#x644; &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644;</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AC%D8%AF%D9%88%D9%84-%D9%84%D8%B9%D9%84%D8%A7%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%B7%D9%84%D8%A7%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r311/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_12/02.png.ade6383b20395789d3e2e89e114ca150.png" /></p>

<p>
	بعد أن تعرَّفنا في المقالين السابقين على تطبيق جداول بيانات جوجل وألقينا نظرةً سريعةً عليه، سنكمل في هذا الدرس والدروس القادمة رحلتنا في استكشاف هذا التطبيق ومعرفة بعض مزاياه وكيفيَّة استعماله.
</p>

<p>
	سنتعلم في هذا الدرس كيفية إنشاء جدول وتنسيقه واستعمال الصيغ الحسابيَّة وبعض <strong>التوابع</strong> (<strong>functions</strong>). سننشئ جدولًا يحوي علاماتِ طلابٍ في مدرسة ما يحسب معدَّلاتهم الفصليَّة ويحدِّد إن كان الطالب ناجحًا أو راسبًا ثمَّ يحسب التقدير الذي يستحقه اعتمادًا على علاماته.
</p>

<h2>
	إنشاء الجدول وتنسيقه
</h2>

<p>
	نفتح تطبيق <a href="https://drive.google.com/drive/" rel="external nofollow">Google Drive</a> ونضغط على "<strong>جديد</strong>" ثمَّ "<strong>جداول بيانات Google</strong>" أو نفتح تطبيق جداول بيانات Google مباشرةً وننشئ جدولًا جديدًا ونسميه "علامات الطلاب"؛ نغيِّر اتجاه الصفحة ليكون من اليمين إلى اليسار عبر قائمة <strong>تنسيق ← الاتجاه ← ورقة من اليمين إلى اليسار</strong> أو من شريط الأدوات مباشرةً.
</p>

<p style="text-align: center;">
	<img alt="right-to-left-sheet.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25704" data-unique="xs92h60sh" src="https://academy.hsoub.com/uploads/monthly_2017_12/right-to-left-sheet.png.6e9989cabfe514be23070f7375d7ab4f.png"></p>

<p>
	قد يلزمنا عدَّة أوراق عمل بحسب عدد المراحل الموجودة في المدرسة لذا سنغير اسم الورقة الحالية إلى "الصف السادس" بالضغط على السهم الصغير بجانب اسم الورقة واختيار "<strong>إعادة تسمية</strong>" أو الضغط على اسم الورقة مرتين.
</p>

<p style="text-align: center;">
	<img alt="rename-sheet.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25703" data-unique="w46bxxmlx" src="https://academy.hsoub.com/uploads/monthly_2017_12/rename-sheet.png.5eb32a6f89777e460522eef1ca689b29.png"></p>

<p>
	سنكتب في السطر الأول وصف البيانات التي سندخلها في الجدول التي تمثِّل أعمدته وهي اسم ورقم الطالب وأسماء المواد التي درسها في مرحلة معيَّنة خلال الفصل الأول والثاني والمعدَّل والنتيجة والتقدير.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25702" href="https://academy.hsoub.com/uploads/monthly_2017_12/merge-cells-vertically.png.b827cf562b1f251467d97cd62869102e.png" rel=""><img alt="merge-cells-vertically.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25702" data-unique="k01otu4ki" src="https://academy.hsoub.com/uploads/monthly_2017_12/merge-cells-vertically.thumb.png.a0ff254da2f97134837bfee68f56bf1b.png"></a>
</p>

<p>
	نلاحظ أنَّ اسم الفصل وأسماء المواد متوضعة في سطرين بينما الرقم واسم الطالب في سطر لذا سندمج خليَّة الرقم واسم الطالب مع الخليَّة أسفلها وندمج خليَّة الفصل الأول مع الخلايا التي بجانبها وكذلك بالنسبة لخليَّة الفصل الثاني وذلك عبر قائمة <strong>التنسيق ← دمج الخلايا ← دمج رأسيًّا</strong> أو <strong>دمج أفقيًّا</strong> بعد تحديد الخلايا المراد دمجها أو من شريط الأدوات مباشرةً بالضغط على <strong>دمج الخلايا</strong>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25701" href="https://academy.hsoub.com/uploads/monthly_2017_12/merge-cells-horizontally.png.678a0b6ba6066d97674cee424915198b.png" rel=""><img alt="merge-cells-horizontally.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25701" data-unique="cybzb0g9i" src="https://academy.hsoub.com/uploads/monthly_2017_12/merge-cells-horizontally.thumb.png.aa22c8b76d4764893971f783a4f89d99.png"></a>
</p>

<p>
	نوسِّط النص داخل الخلايا بمحاذاته أفقيًّا ورأسيًّا عبر قائمة <strong>التنسيق ← توسيط</strong> ووسط أو من شريط الأدوات بالضغط على <strong>محاذاة أفقيَّة</strong> أو <strong>رأسيَّة</strong> واختيار <strong>توسيط</strong> بعد تحديد خلايا رأس الجدول؛ يفضَّل تحديد كل خلايا الصفحة بالضغط على الخليَّة في الزاوية العلويَّة اليمينيَّة فوق خليَّة رقم الصف وجانب خليَّة اسم العمود وتحديد المحاذاة الوسطيَّة أفقيًّا ورأسيًّا.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25695" href="https://academy.hsoub.com/uploads/monthly_2017_12/align-text-vertically-and-horizontally.png.dc786196e1c90f7c76a606316fb5bed8.png" rel=""><img alt="align-text-vertically-and-horizontally.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25695" data-unique="qvly1k3cl" src="https://academy.hsoub.com/uploads/monthly_2017_12/align-text-vertically-and-horizontally.thumb.png.6e5acc854e6f800dfb2f88723783e769.png"></a>
</p>

<p>
	ندوِّر أسماء المواد بزاوية قدرها 90 درجة لكي لا تأخذ حيزًا من حجم الجدول عبر <strong>التنسيق ← تدوير النص ← تدوير للأسفل</strong> أو من قائمة الأدوات بالضغط على أيقونة <strong>تدوير النص</strong> واختيار وضع التدوير المناسب بالزاوية المطلوبة.
</p>

<p>
	نصغِّر حجم العمود المرافق لاسم المواد لتصغير حجم الجدول؛ هذا الأمر مفيد جدًا خصوصًا إذا كانت حقول الجدول كثيرة ونريد طباعته على ورقٍ بحجم صغير.
</p>

<p style="text-align: center;">
	<img alt="text-rotation.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25709" data-unique="s7nnxperh" src="https://academy.hsoub.com/uploads/monthly_2017_12/text-rotation.png.e68ecbc9089c4873426de6d2ecb7dce9.png"></p>

<p>
	نعدِّل تنسيق الخلايا لتظهر على أنَّها رأس الجدول وتتميز عن الخلايا الأخرى؛ نحدِّد الخلايا الرأسيَّة كلها ونكبِّر حجم الخط إلى 11 مثلًا ونختار التنسيق الغامق وذلك من شريط الأدوات. نغيِّر لون الخليَّة من "<strong>لون التعبئة</strong>" في شريط الأدوات ونغيِّر لون الخط بشكل متناسق.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25696" href="https://academy.hsoub.com/uploads/monthly_2017_12/cells-color.png.1d134234ffac2cc536e528ba40bdf2a9.png" rel=""><img alt="cells-color.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25696" data-unique="0tartz9lc" src="https://academy.hsoub.com/uploads/monthly_2017_12/cells-color.thumb.png.09c4d055ddd763b9eab1e9bf67510a73.png"></a>
</p>

<p>
	نضع حدودًا للخلايا بحيث تنقسم إلى مجموعات بحسب نوع البيانات التي تحتويها ونتحكم بنمط الحد ولونه وسماكته؛ نختار أصغر سماكة للحد ونحدِّد كل مجموعة متشابهة من الخلايا ونضع لها حدودًا داخليَّة فقط ثمَّ نغير نوع الحد إلى نوع الخط المزدوج أو أي نوع تختاره بحيث يختلف عن نوع الحد الداخلي ونضع للخلايا نفسها حدودًا خارجيَّة ثمَّ نحدِّد أعمدة الجدول (من A إلى Q) ونضع له حدودًا خارجية بالطريقة ذاتها.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25707" href="https://academy.hsoub.com/uploads/monthly_2017_12/table-borders.png.d32a65ccd6dd80d36bcf6e70ac275b31.png" rel=""><img alt="table-borders.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25707" data-unique="0jqfawybj" src="https://academy.hsoub.com/uploads/monthly_2017_12/table-borders.thumb.png.ba16be7f805bd88f9fde4313fcfbe884.png"></a>
</p>

<p>
	بقي لدينا تنسيق أسطر الجدول التي ستُملأ بالبيانات وذلك لتسهيل قراءتها؛ لدينا خيارين أولهما هو استعمال الألوان والثاني هو استعمال الحدود.
</p>

<p>
	نحدِّد أسطر الجدول لتمييزها بالألوان ونضغط على لون التعبئة في شريط الأدوات ونختار "الألوان البديلة" فتُفتح نافذة في القسم الأيسر. نختار من نمط التنسيق الألوان المناسبة كما يمكننا تحديد ألواننا المفضلة من أسفل القائمة؛ نُزِيلُ الإشارة بجانب خيار "الرأس" لأنَّنا نسَّقنا خلايا الرأس مسبقًا ولو لم ننسق خلايا الرأس نتركه ليضيف لونًا مختلفًا لرأس الجدول ثمَّ نضغط على "تم". إن رغبت في وضع تذييل للجدول فضع إشارة على "تذييل" لتمييزه.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25706" href="https://academy.hsoub.com/uploads/monthly_2017_12/rows-format-by-color.png.0944062e795714931562047593165880.png" rel=""><img alt="rows-format-by-color.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25706" data-unique="2xl0xc3vg" src="https://academy.hsoub.com/uploads/monthly_2017_12/rows-format-by-color.thumb.png.3d748e33fc97ca7d0d6a4723230c8ab2.png"></a>
</p>

<p>
	الطريقة الثانية لتنسيق أسطر الجدول هي وضع حدود لها. نحدِّد أسطر الجدول ونختار نوع الحدود المنقَّطة ثمَّ نضغط على خيار حد السطر فقط.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25705" href="https://academy.hsoub.com/uploads/monthly_2017_12/rows-format-by-borders.png.113d4899221271d0267906488f82d5f3.png" rel=""><img alt="rows-format-by-borders.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25705" data-unique="8un8eq6t2" src="https://academy.hsoub.com/uploads/monthly_2017_12/rows-format-by-borders.thumb.png.68435bcd9c4ec6f293d16fe0d49f783d.png"></a>
</p>

<p>
	ننهي بذلك تنسيق الجدول ليصبح جاهزًا لاستقبال البيانات.
</p>

<h2>
	استعمال التوابع الرياضيَّة
</h2>

<p>
	نستطيع عبر تطبيق جداول بيانات Google والتطبيقات المشابهة له إجراء العمليات الحسابيَّة الأساسيَّة بين خليتين أو أكثر بكتابة الرمز يساوي (=) وتحديد خليَّة ما وكتابة إشارة العمليَّة مثل الجمع أو الطرح أو القسمة أو الضرب ثمَّ تحديد الخليَّة الثانية أو كتابة أرقام مباشرةً.
</p>

<p style="text-align: center;">
	<img alt="using-arithmetic-operations-by-numbers-and-cells.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25710" data-unique="rb94tvf01" src="https://academy.hsoub.com/uploads/monthly_2017_12/using-arithmetic-operations-by-numbers-and-cells.png.819e3c43b8b34efb7379614fc370e142.png"></p>

<p>
	ماذا لو تعقَّدت العمليَّة الحسابيَّة مثل إيجاد متوسط قيم أو حساب الانحراف المعياري لمجموعة قيم؟ هنا يأتي دور التوابع التي تسهِّل العمليات الحسابيَّة والمنطقيَّة وتوسِّع عمل التطبيق إذ كلما دعم التطبيق عددًا أكبر من التوابع زادت قوته واتسع نطاق استخدامه.
</p>

<p>
	يدعم تطبيق جداول بيانات Google الكثير من التوابع والتي سنتعرف على جزء صغير منها. سنستعمل أولًا تابع التوسُّط (<strong>average</strong>) لحساب متوسِّط علامات الطلاب في الفصل الأول والفصل الثاني وكلا الفصلين في حقل المعدَّل؛ ندرج التابع <strong>average</strong> بالضغط على الخليَّة المحدَّدة ونكتب الرمز يساوي (=) ثمَّ نكتب اسمه، وعند كتابة الحروف الأولى منه تظهر اقتراحات عن التوابع مع شرح بسيط عنها.
</p>

<p style="text-align: center;">
	<img alt="inset-average-function1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25700" data-unique="4d2b5o3ob" src="https://academy.hsoub.com/uploads/monthly_2017_12/inset-average-function1.png.aad5da7dc14f71a5202067362582d361.png"></p>

<p>
	نختار التابع <strong>average</strong> بالضغط عليه فيظهر شرح عن كيفيَّة استعماله وهذا الشرح رائع جدًا إذ يشرح طريقة استعمال التابع بشكل صحيح ومُفصَّل وتوجد أمثلة كثيرة إذا فتحت الرابط الموجود أسفل الشرح؛ نحدِّد خلايا مواد الفصل الدراسي الأول وهي الخلايا من C3 وحتى G3 ثمَّ نضغط enter. سيظهر الخطأ ‎#DIV/0!‎ وهو قسمة عدد على صفر وهذا طبيعي لعدم وجود قيم، ويزول الخطأ بإدخال أرقام في الخلايا. ندرج التابع نفسه لحساب معدَّل الفصل الثاني ومعدَّل الفصلين مع تحديد الخلايا المناسبة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25697" href="https://academy.hsoub.com/uploads/monthly_2017_12/insert-average-function2.png.3cbef4ba9e2e2aa26d5260b19845ab93.png" rel=""><img alt="insert-average-function2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25697" data-unique="naxeiymes" src="https://academy.hsoub.com/uploads/monthly_2017_12/insert-average-function2.thumb.png.fa4a63f9d5eb9110eff69724ff391142.png"></a>
</p>

<p>
	هنالك تابع مشابه للتابع <strong>average</strong> وهو التابع <strong>averagea</strong> والذي يُدخِل الخلايا التي تحوي نصًّا في حساب المتوسط مع اعتبار قيمتها صفرًا بينما يهملها التابع الأول بالكامل إن وُجدت بين القيم.
</p>

<p>
	حقل النتيجة هو تحديد إن كان الطالب ناجحًا أم راسبًا اعتمادًا على علاماته أو معدَّله. نستعمل التابع <strong>IF</strong> الذي يقارن صحة شرط منطقي ثمَّ يضع القيمة الأولى المُدخلة إن تحقق الشرط أو القيمة الثانية إن لم يتحقق، وتوضح الصورة التالية كيفيَّة استعماله.
</p>

<p style="text-align: center;">
	<img alt="insert-if-function.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25698" data-unique="eiwmiuknz" src="https://academy.hsoub.com/uploads/monthly_2017_12/insert-if-function.png.beb082b7d2215210f1d92d66c292049a.png"></p>

<p>
	حدَّدنا الخليَّة O3 وهي معدَّل الفصلين شرطًا لنجاح الطالب بحيث إن كانت قيمتها أكبر أو تساوي 50 يُكتب في الخليَّة "ناجح" وإن كانت أقل يُكتب "راسب".
</p>

<p>
	ماذا لو أردنا اعتبار الطالب راسبًا إن رسب في إحدى مواده؟ يمكن في هذه الحالة استعمال التابع <strong>IFS</strong> لتحقيق عدَّة شروط واحدًا تلو الآخر. يتحقَّق هذا التابع من الشرط المنطقي الأول فإن تحقق يضع في الخليَّة العبارة المكتوبة بعده أي بعد الفاصلة وإن لم يتحقق ينتقل إلى تحقيق الشرط التالي ويتحقق منه ويستمر بالطريقة نفسها.
</p>

<p>
	نكتب التابع <strong>IFS</strong> في الخلية P3 ثمَّ نحدِّد في مدخلاته الخليَّة C3 التي تمثِّل المادة الأولى ويكون الشرط هو أصغر من 50 –العلامة الدنيا للنجاح- ونضع بعد الشرط عبارة "راسب" ثمَّ نضيف الخليَّة التي بجانبها مع شرط النجاح؛ نستمر بذلك حتى نصل إلى الخليَّة الأخيرة والتي نكررها مرتين الأولى إن كانت أصغر من 50 مع العبارة "راسب" والثانية أكبر أو يساوي 50 مع العبارة "ناجح" أي إن لم يتحقق شرط الرسوب في إحدى المواد يكون الطالب ناجحًا، وتوضح الصورة ذلك. لاحظ العلامات التي كتبناها في حقول المواد للتأكد من عمل التابع بشكل صحيح.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25699" href="https://academy.hsoub.com/uploads/monthly_2017_12/insert-ifs-function.png.5a4bccc5c051d2bcff568b34c9eb3b44.png" rel=""><img alt="insert-ifs-function.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25699" data-unique="jbi9aqm7t" src="https://academy.hsoub.com/uploads/monthly_2017_12/insert-ifs-function.thumb.png.30a41219c0be6a638c56d8fa4fe3143e.png"></a>
</p>

<p>
	نحدِّد التقدير الذي يحصل عليه الطالب بناءً على معدَّل الفصلين؛ يكون التقدير ممتاز إن كان معدَّله أكبر أو يساوي 90 وجيد جدًا إن كان معدَّله أكبر أو يساوي 80 وهكذا؛ نستعمل في هذه الحالة التابع <strong>IFS</strong> أيضًا كما موضح في الصورة.
</p>

<p style="text-align: center;">
	<img alt="222.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25711" data-unique="vln677809" src="https://academy.hsoub.com/uploads/monthly_2017_12/222.png.6844837b27c1fec9c943a96ed9d39418.png"></p>

<p>
	نحدِّد الخلايا من M3 وحتى Q3 التي استعملنا فيها التوابع ثمَّ نسحبها من الزاوية السفليِّة اليسرى حتى أسفل الجدول لنسخها للخلايا السفليِّة وبذلك ننتهي من إعداد جدول علامات الطلاب وكل ما علينا فعله الآن هو ملء الجدول بالعلامات وسيُحسب المعدَّل والنتيجة والتقدير مباشرةً.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="25708" href="https://academy.hsoub.com/uploads/monthly_2017_12/table-of-students-grades.png.fa626eac0ad1498a5bd664174d1b8b6e.png" rel=""><img alt="table-of-students-grades.png" class="ipsImage ipsImage_thumbnailed" data-fileid="25708" data-unique="spje8di61" src="https://academy.hsoub.com/uploads/monthly_2017_12/table-of-students-grades.thumb.png.c037a48847d1f8e0575410e743ac550e.png"></a>
</p>

<p>
	<strong>توجد توابع أخرى منها:</strong>
</p>

<p>
	<strong>SUM</strong>: يجمع الأعداد ضمن نطاق الخلايا المحدَّدة.
</p>

<p>
	<strong>MAX</strong>: يعطي أكبر قيمة من بين القيم المحدَّدة في نطاق الخلايا.
</p>

<p>
	<strong>MIN</strong>: عكس التابع السابق أي يعطي أصغر قيمة في نطاق الخلايا المحدَّدة.
</p>

<p>
	<strong>COUNT</strong>: يَعُدُّ الخلايا التي تحوي أرقامًا فقط والموجودة ضمن النطاق المحدَّد.
</p>

<p>
	<strong>COUNTA</strong>: يَعُدُّ الخلايا التي تحوي أرقامًا أو نصوصًا والموجودة ضمن النطاق المحدَّد.
</p>

<p>
	<strong>SUMIF</strong>: يجمع القيم العدديَّة التي تحقِّق شرطًا معيَّنًا.
</p>

<p>
	<strong>SUMIFA</strong>: تشبه سابقتها إلا أنَّه يمكن إضافة شروط متعدِّدة لجمع القيم.
</p>

<p>
	لا تقتصر التوابع على الأنواع السابقة ويمكنك زيارة <a href="https://support.google.com/docs/table/25273?visit_id=1-636455041222009066-2487314134&amp;hl=ar&amp;rd=2" rel="external nofollow">هذه الصفحة</a> لتصفح جميع التوابع التي يدعمها التطبيق.
</p>
]]></description><guid isPermaLink="false">311</guid><pubDate>Sat, 02 Dec 2017 09:20:00 +0000</pubDate></item><item><title>&#x625;&#x646;&#x634;&#x627;&#x621; &#x62C;&#x62F;&#x648;&#x644; &#x648;&#x62A;&#x646;&#x633;&#x64A;&#x642;&#x647; &#x648;&#x62A;&#x639;&#x62F;&#x64A;&#x644;&#x647; &#x641;&#x64A; &#x62A;&#x637;&#x628;&#x64A;&#x642; &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644;</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AC%D8%AF%D9%88%D9%84-%D9%88%D8%AA%D9%86%D8%B3%D9%8A%D9%82%D9%87-%D9%88%D8%AA%D8%B9%D8%AF%D9%8A%D9%84%D9%87-%D9%81%D9%8A-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-r296/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_08/59a70312c38b6_main(8).png.cd356dd668572dfa0f4c25ca28e6212b.png" /></p>

<p>
	تعرفنا في <a href="https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r295/" rel="">الدرس السابق</a> على واجهة تطبيق جداول بيانات جوجل وسنتابع في هذا الدرس مبادئ العمل عىل التطبيق.
</p>

<p>
	يمكننا تحديد الخلية التي سندخل ضمنها البيانات باستخدام الفأرة أو مفاتيح الأسهم ثم أدخل البيانات بداخلها، سنقوم على سبيل المثال بإنشاء جدول عناوين وهواتف.
</p>

<p style="text-align: center;">
	<img alt="01.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24766" data-unique="jij266es5" src="https://academy.hsoub.com/uploads/monthly_2017_08/01.png.87be78e0319a69b0aced2d54d503dcfc.png"></p>

<p>
	بعد إدخال بيانات عناوين الأعمدة لما سيتم إدخاله ضمن الجدول سنقوم بإدخال الأرقام المتسلسلة تحت عمود (مسلسل). في حال أدخلنا الرقم 1 في الخلية الأولى ثم حدّدنا هذه الخلية بالفأرة ثم نقرنا على المربع الأزرق الصغير في الركن السفلي الأيسر من الخلية وسحبنا للأسفل عدة خلايا فإن النتيجة ستكون نسخ بيانات هذه الخلية ذاتها على جميع الخلايا المحددة كما في الصورة.
</p>

<p style="text-align: center;">
	<img alt="02.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="24767" data-unique="ub2uasqs7" src="https://academy.hsoub.com/uploads/monthly_2017_08/02.gif.de7afc342c81e0d086cc773d79550890.gif"></p>

<p>
	وفي حال إدخال القيمة 1 في الخلية الأولى و2 في الخلية التالية فسيكون من السهل الحصول على تعبئة تسلسلية حيث يقوم التطبيق بملء الخلايا التالية بتسلسل الأرقام المتتالي كما في الصورة.
</p>

<p style="text-align: center;">
	<img alt="03.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="24768" data-unique="wvx42czd4" src="https://academy.hsoub.com/uploads/monthly_2017_08/03.gif.ec91856ae15cf2ea94c632347468e6b4.gif"></p>

<p>
	ثم نقوم بإدخال الأسماء وأرقام الهواتف والعناوين
</p>

<p style="text-align: center;">
	<img alt="04.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24769" data-unique="86jjuxn8g" src="https://academy.hsoub.com/uploads/monthly_2017_08/04.png.25a3ef6d73a8a7f2426bb37293110781.png"></p>

<p>
	قدتكون أرقام الهواتف عادة تبدأ بالصفر كرمز نداء خارجي ولكن التنسيق التلقائي للتطبيق سيقوم بحذف الصفر الذي في بداية الرقم باعتبار أن لا قيمة له في العمليات الحسابية وستظهر الأرقام كما في الشكل السابق بدون أصفار في البداية.<br>
	لتغيير هذا التنسيق حدّد الخلايا التي سنقوم بتغيير تنسيقها ثم اذهب إلى القائمة
</p>

<p style="text-align: center;">
	<strong>التنسيق &gt; رقم &gt; نص عادي</strong>
</p>

<p style="text-align: center;">
	<img alt="05.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24770" data-unique="czz8wodvc" src="https://academy.hsoub.com/uploads/monthly_2017_08/05.png.4e88982d5558cd7e4f99c2d78db4c044.png"></p>

<p>
	ثم أعد كتابة الأرقام لتحصل على النتيجة المثالية.
</p>

<p style="text-align: center;">
	<img alt="06.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24771" data-unique="5de7w8if3" src="https://academy.hsoub.com/uploads/monthly_2017_08/06.png.0ad91d13521ff3c1010a0ee64bbe4018.png"></p>

<p>
	بما أن العنوان في الأعلى هو عنوان الجدول كله فسنقوم بجعل جميع الخلايا في الصف الأول خلية واحدة لنضع العنوان في الوسط بسهولة بعدها. حدد جميع خلايا الصف الأول من الجدول ثم انقر على الأداة <img alt="07.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24772" data-unique="tabk4t0k1" src="https://academy.hsoub.com/uploads/monthly_2017_08/07.png.c4c79574434af93daf9f27368996861b.png"> من لدمج الخلايا من شريط الأدوات ثم قم بتوسيط النص في الخلية الجديدة الكبيرة.
</p>

<p style="text-align: center;">
	<img alt="08.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24773" data-unique="sd23j912o" src="https://academy.hsoub.com/uploads/monthly_2017_08/08.png.461076c5443b0cc236f023a9cc45297d.png"></p>

<p>
	وسنجد هذه الأدوات <img alt="09.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24774" data-unique="8a7ukkbxs" src="https://academy.hsoub.com/uploads/monthly_2017_08/09.png.16f15eca3b511aba88340f86fe21ae0c.png"> في شريط الأدوات لنستخدمها في تنسيق الخلايا. حدد الخلية الكبيرة في الأعلى (العنوان) واجعل لون الخلفية أحمر داكن ولون الخط أبيض.
</p>

<p style="text-align: center;">
	<img alt="10.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24775" data-unique="7fktvl9nr" src="https://academy.hsoub.com/uploads/monthly_2017_08/10.png.fc13385f1f129bd5ba06fcd87d31ea88.png"></p>

<p>
	عدّل أيضًا لون خلفية الصف الثاني بالكامل ليكون باللون البرتقالي والنص باللون الأبيض.
</p>

<p style="text-align: center;">
	<img alt="11.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24776" data-unique="rgirav5vn" src="https://academy.hsoub.com/uploads/monthly_2017_08/11.png.39db010f5eef1daefbde3ae90f4bd2a9.png"></p>

<p>
	اجعل لون خلفية الصف الرابع باللون الرمادي الفاتح جدًّا وأبقِ على اللون الأسود للنص.
</p>

<p style="text-align: center;">
	<img alt="12.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24777" data-unique="u6uzxi6k3" src="https://academy.hsoub.com/uploads/monthly_2017_08/12.png.4f0d9ac9f8c2479d54908500580ba0bf.png"></p>

<p>
	الفكرة هنا هي جعل تمييز الصفوف أسهل عبر جعل الصفوف بلونين أبيض ورمادي فاتح بشكل متتالي وهناك طريقتين لفعل ذلك. الطريقة الأولى هي بتحديد الصفوف التي نريدها باللون الرمادي الفاتح صفًا صفًا ثم نقوم بتغيير لون الخلفية إلى اللون الرمادي الفاتح. ويتم تحديد الصفوف المختلفة والمتباعدة عبر تحديد الصف الأول ثم نستمر بالضغط على مفتاح <code>Ctrl</code> ثم نحدد الصف الثالث والخامس وهكذا مع الاستمرار بالضغط على مفتاح <code>Ctrl</code> أثناء التحديد حتى الانتهاء.
</p>

<p style="text-align: center;">
	<img alt="13.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="24778" data-unique="u3nmyjzy5" src="https://academy.hsoub.com/uploads/monthly_2017_08/13.gif.0daa481563034547a3f51462c32e65d3.gif"></p>

<p>
	والطريقة الثانية هي بتطبيق هذا التنسيق على صف واحد ومن ثم استخدام أداة نسق التنسيق <img alt="14.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24779" data-unique="syfojaoer" src="https://academy.hsoub.com/uploads/monthly_2017_08/14.png.60e7c5ffef5f9ce1dbc99534486c928a.png"> الموجودة في شريط الأدوات وتحديد الصف الذي سيتم لصق التنسيق ضمنه ولكن الطريقة الأولى أسرع وأفضل.<br>
	وسيظهر الجدول حتى هذه اللحظة بهذا الشكل.
</p>

<p style="text-align: center;">
	<img alt="15.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24780" data-unique="73t4kk7jf" src="https://academy.hsoub.com/uploads/monthly_2017_08/15.png.30a55bc2eb206e785af6f604f8b10285.png"></p>

<p>
	قم بتنسيق النصوص بجعل العناوين بالخط العريض (الغامق) وبحجم أكبر وفي الوسط ونسّق أيضًا نصوص البيانات المدخلة.
</p>

<p style="text-align: center;">
	<img alt="16.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24781" data-unique="qt87xmuvq" src="https://academy.hsoub.com/uploads/monthly_2017_08/16.png.cb4963310f05da7e7c51c108e21bc30f.png"></p>

<p>
	قد نحتاج إلى إدراج صف إضافي وسط صفوف الجدول. يمكن القيام بذلك عبر تحديد الصف بالكامل (انقر على رقم الصف) ثم انقر عليه بالزر الأيمن واختر من القائمة إمّا <strong>إدراج 1 صف من الصفوف أعلاه</strong> أو <strong>إدراج 1 صف من الصفوف أدناه</strong> لإدراج صف جديد أعلى الصف المحدد أو أسفله.
</p>

<p style="text-align: center;">
	<img alt="17.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24782" data-unique="lumjty668" src="https://academy.hsoub.com/uploads/monthly_2017_08/17.png.3a64ef27c40c9ebca6dfee61ade111cf.png"></p>

<p>
	وبذلك سيتم إدراج صف جديد كما في الشكل.
</p>

<p style="text-align: center;">
	<img alt="18.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24783" data-unique="6h5q3w7es" src="https://academy.hsoub.com/uploads/monthly_2017_08/18.png.d7bb699bf30290fab3fa1da27a5c830a.png"></p>

<p>
	الأمر ذاته ينطبق عند الرغبة بإضافة عمود إضافي حيث نحدد العمود عبر النقر على حرف العمود من شريط حروف الأعمدة وننقر عليه بالزر الأيمن ونختار من القائمة إمّا <strong>إدراج 1 من الأعمدة لليمين</strong> أو <strong>إدراج 1 من الأعمدة لليسار</strong> .
</p>

<p style="text-align: center;">
	<img alt="19.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24784" data-unique="7lrz9hx1b" src="https://academy.hsoub.com/uploads/monthly_2017_08/19.png.803ce8c55cddd02ba27317daa7b27eda.png"></p>

<p>
	يمكن القيام بإضافة صفوف أو أعمدة عبر تحديد الصف أو العمود والذهاب إلى قائمة <strong>إدراج</strong> ومن ثم نختار أحد خيارات الإضافة المتوفرة أعلى هذه القائمة<br>
	ولحذف صف كامل نقوم بتحديد هذا الصف عبر النقر على رقم الصف من شريط أرقام الصفوف والضغط بالزر الأيمن عليه ثم اختيار أحد الخيارات التالية:
</p>

<p style="text-align: center;">
	<img alt="20.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24785" data-unique="gfwnauyld" src="https://academy.hsoub.com/uploads/monthly_2017_08/20.png.07da287e8a3b3d552fb6bad38ac042d2.png"></p>

<ol>
<li>
		<strong>حذف الصف</strong>: وسيقوم هذا الخيار بحذف الصف بالكامل وسحب بقية الصفوف الموجودة أسفل ذلك الصف لتحل مكانه.
	</li>
	<li>
		<strong>محو الصف</strong>: وسيقوم هذا الخيار بمسح جميع البيانات بداخل الصف مع الإبقاء عليه وعدم حذفه.
	</li>
	<li>
		<strong>إخفاء الصف</strong>: وسيقوم هذا الخيار بإخفاء الصف ولكن بدون محوه أو حذفه وسيظهر مكانه أسهم صغيرة تدل على وجود صف مخفي يمكن إظهارها عبر النقر على تلك الأسهم الصغيرة.
	</li>
</ol>
<p style="text-align: center;">
	<img alt="21.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24786" data-unique="wbvvqbg7d" src="https://academy.hsoub.com/uploads/monthly_2017_08/21.png.963b712270e98b11af9dfff2b060b1eb.png"></p>

<p>
	والأمر ذاته ينطبق على حذف ومحو وإخفاء الأعمدة.
</p>

<p>
	تعلمنا كيفية إنشاء جدول هواتف وعناوين وتنسيقه وتعديله بشكل بسيط وسهل. يوجد العديد من المزايا والأدوات الإضافية التي يمكن تطبيقها على الجدول وتعديله وسنتطرق لها في الدروس المتقدمة من هذا التطبيق.
</p>
]]></description><guid isPermaLink="false">296</guid><pubDate>Fri, 08 Sep 2017 11:01:38 +0000</pubDate></item><item><title>&#x645;&#x642;&#x62F;&#x645;&#x629; &#x625;&#x644;&#x649; &#x62C;&#x62F;&#x627;&#x648;&#x644; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; &#x62C;&#x648;&#x62C;&#x644; Google Sheets</title><link>https://academy.hsoub.com/apps/productivity/google-drive/google-sheets/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AC%D8%AF%D8%A7%D9%88%D9%84-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%AC%D9%88%D8%AC%D9%84-google-sheets-r295/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_08/59a59239e9329_main(7).png.2465915992fa60baf79836e3e370b229.png" /></p>

<p>
	إن تطبيق جداول بيانات جوجل هو عبارة عن تطبيق ويب وأحد مجموعة تطبيقات جوجل درايف المكتبية التي تضم تطبيقت مستندات جوجل وتطبيق العروض التقديمية وغيرها، ويعتبر هذا التطبيق شبيه لبرنامج مايكروسوفت إكسل وبرنامج ليبر أوفيس كالك. وعلى الرغم من أنه لا يقدم جميع ميزات إكسل وكالك المتقدمة، إلا أنه من السهل إنشاء جداول بيانات وتعديلها سواء كانت بسيطة أم معقدّة. إن استخدام تطبيقات جداول بيانات جوجل ليس مقتصرًا على المحاسبين ومستخدمي جداول البيانات المعقدة والمطورين، بل يمكن استخدامها لإنشاء جداول بيانات بسيطة لأمور حياتية يومية كجدول مهام عمل يومية أو حسابات البقالة أو أي شيء آخر يمكنك التفكير فيه، تعد جداول البيانات طريقة رائعة لتنظيم المعلومات.
</p>

<p>
	ولإنشاء مستند جدول بيانات جوجل جديد توجه إلى <a href="drive.google.com" rel="">صفحة جوجل درايف</a> الخاصة بك ثم انقر على زر (<strong>جديد</strong>) أعلى يمين الصفحة ومن القائمة المنبثقة اختر (<strong>جدول بيانات Google</strong>).
</p>

<p style="text-align: center;">
	<img alt="01.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24755" data-unique="5eoljj211" src="https://academy.hsoub.com/uploads/monthly_2017_08/01.png.4fb163ca26430379c3e4dcab710faf90.png"></p>

<p>
	وسيتم الآن فتح التطبيق على كامل الصفحة حيث سيظهر بمظهر مشابه إلى حد كبير برامج الإكسل والكالك، حيث شريط القوائم في الأعلى يليه شريط الأدوات الرئيسي ثم حقل جدول بيانات فارغ مع شريط ورقات العمل أسفله.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24756" href="https://academy.hsoub.com/uploads/monthly_2017_08/02.png.a6f44d6ebf11440936b6b6378c394828.png" rel=""><img alt="02.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24756" data-unique="0y3y94leb" src="https://academy.hsoub.com/uploads/monthly_2017_08/02.thumb.png.49db4c5be17cc96fae421289fc7de4d7.png"></a>
</p>

<p>
	بداية سيكون اتجاه العمل في التطبيق من اليسار لليمين بشكل افتراضي، يمكنك تعديله ليصبح من اليمين إلى اليسار عبر زر <img alt="03.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24757" data-unique="9t208c5a2" src="https://academy.hsoub.com/uploads/monthly_2017_08/03.png.05ce08a5105c9329f09d97a0ab913288.png"> في شريط الأدوات أو من القائمة
</p>

<p style="text-align: center;">
	<strong>تنسيق &gt; الاتجاه &gt; ورقة من اليمين إلى اليسار</strong>
</p>

<p>
	ويمكن إعادة اتجاه العمل بذات الطريقة.
</p>

<p style="text-align: center;">
	<img alt="04.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24758" data-unique="molokmr7f" src="https://academy.hsoub.com/uploads/monthly_2017_08/04.png.4e187a36fd00c11dc297acc320f5a279.png"></p>

<p>
	تم ترميز الأعمدة بالأحرف اللاتينية A, B, C,…. الخ فيما تم ترميز الصفوف بالأرقام 1, 2, 3, …. الخ. ويسمى المستطيل الواحد ضمن هذا الجدول بالخلية، ولكل خلية عنوان وعنوانها هو تقاطع حرف العمود مع رقم الصف التي تتوضع فيه الخلية فعلى سبيل المثال (كما في الصورة التالية) عنوان الخلية التي في الصورة هو B5 وذلك لوجودها ضمن العمود B والصف 5.
</p>

<p style="text-align: center;">
	<img alt="05.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24759" data-unique="kb7n8kz28" src="https://academy.hsoub.com/uploads/monthly_2017_08/05.png.a3f50ae0d4f5642799862f54bdb1e56c.png"></p>

<p>
	وكما تعلمنا في درس مستندات جوجل فإن تسمية المستند في جداول بيانات جوجل يتم بنفس الطريقة حيث يكفي النقر على العنوان أعلى صفحة التطبيق ليسمح لنا بتعديل الإسم ومن ثم نكتب الاسم الذي نريده ونضغط <code>Enter</code> أو ننقر بالفأرة في أي مكان آخر ليتم تطبيق التسمية الجديدة على الملف.
</p>

<p style="text-align: center;">
	<img alt="06.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24760" data-unique="mv2jc0t4a" src="https://academy.hsoub.com/uploads/monthly_2017_08/06.png.3157bf21112152254c733876f18a7341.png"></p>

<p>
	وكبقية تطبيقات جوجل المكتبية فلا حاجة لحفظ المستند ولا يوجد في الأصل خيار لحفظ المستند إذ أن مستندات جوجل في مختلف التطبيقات تقوم بحفظ التغييرات مباشرة وبشكل تلقائي، ويتم حفظ المستندات المختلفة الناتجة عن تطبيقات جوجل هذه ضمن سحابة جوجل درايف الخاصة بك ولتغيير موضع حفظ المستند ضمن المجلدات التي أنشأتها سابقًا أو قد تود إنشاءها مباشرة في جوجل درايف عليك النقر على أيقونة المجلد الرمادي <img alt="07.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24761" data-unique="n9daw99ku" src="https://academy.hsoub.com/uploads/monthly_2017_08/07.png.fcf6b9161469899c1d76f636ac99cfbd.png"> بجانب عنوان المستند لتحدد الموقع الذي تريد نقل المستند إليه.
</p>

<p style="text-align: center;">
	<img alt="08.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24762" data-unique="f0dph1ewr" src="https://academy.hsoub.com/uploads/monthly_2017_08/08.png.785d9a3aaeb1dc58254ff56aec6534a9.png"></p>

<p>
	بالإمكان فتح ملفات برنامج مايكروسوفت إكسل وليبر أوفيس كالك عبر هذا التطبيق عبر القائمة
</p>

<p style="text-align: center;">
	<strong>ملف &gt; فتح</strong>
</p>

<p>
	ومن ثم ستفتح لنا نافذة تسمح لنا باختيار أحد الملفات الموجودة ضمن سحابة جوجل درايف الخاصة بنا وكذلك يمكننا تحميل الملف من حاسوبنا عبر سحبه إلى مساحة التحميل أو البحث عنه يدويًا ليتم حفظ الملف تلقائيًا في سحابة جوجل درايف الخاصة بنا ومن ثم فتحه ضمن التطبيق.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24763" href="https://academy.hsoub.com/uploads/monthly_2017_08/09.png.59ab0433727d3c190aea7475d4a92fff.png" rel=""><img alt="09.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24763" data-unique="1legcxeaf" src="https://academy.hsoub.com/uploads/monthly_2017_08/09.thumb.png.98d72fd788a63c1edb160ec24f9a86de.png"></a>
</p>

<p>
	وللتعرف أكثر على واجهة التطبيق سنقوم بتسمية عناصر هذه الواجهة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="24765" href="https://academy.hsoub.com/uploads/monthly_2017_08/10.png.3b3892cffb4a8ca8cbfaca29502ea63d.png" rel=""><img alt="10.png" class="ipsImage ipsImage_thumbnailed" data-fileid="24765" data-unique="ig5jnksdv" src="https://academy.hsoub.com/uploads/monthly_2017_08/10.thumb.png.8fd022b68a2f22b4aab151c8cbac9f17.png"></a>
</p>

<ol>
<li>
		اسم المستند
	</li>
	<li>
		أيقونة جداول بيانات جوجل وتذهب بك عند النقر عليها إلى صفحة البداية للتطبيق والتي تحوي جميع المستندات التي تم إنشاؤها باستخدام التطبيق
	</li>
	<li>
		شريط القوائم
	</li>
	<li>
		التنبيه إلى حفظ المستند بشكل تلقائي باستمرار (لن يتم حفظ المستند تلقائيًا في حال العمل بدون اتصال بالإنترنت)
	</li>
	<li>
		أزرار المشاركة والتعليقات
	</li>
	<li>
		شريط الأدوات والتنسيقات
	</li>
	<li>
		شريط الصيغ والدوال
	</li>
	<li>
		الأعمدة
	</li>
	<li>
		الصفوف
	</li>
	<li>
		الخلية
	</li>
	<li>
		شريط أوراق العمل
	</li>
</ol>
<p>
	هذه نظرة أولية على تطبيق جداول بيانات جوجل وسنتابع في الدروس القادمة تفاصيل أكثر حول كيفية استخدام المزايا المختلفة لهذا التطبيق.
</p>
]]></description><guid isPermaLink="false">295</guid><pubDate>Thu, 12 Oct 2017 14:08:48 +0000</pubDate></item></channel></rss>
