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

عبد الوهاب بومعراف

الأعضاء
  • المساهمات

    1296
  • تاريخ الانضمام

  • تاريخ آخر زيارة

كل منشورات العضو عبد الوهاب بومعراف

  1. هنالك العديد من الطرق التي يمكننا استخدامها لإنشاء البوت باستخدام Python. إليك بعض الخيارات الممكنة للبدء في إنشاء بوت واتساب: فمثلا من الطرق الأشهر نجد Whapi.Cloud API أنه يعتبر خيارا جيدا، حيث يمكن استخدام Flask لإنشاء تطبيق ويب يستجيب لرسائل WhatsApp الواردة، وهذه الطريقة تتطلب امتلاكك لحساب على Twilio ورقم هاتف نشط مع تطبيق WhatsApp. توجد مقالة مستفيضة في هذا الموضوع على الأكاديمية يمكنك تصفحها من خلال الرابط التالي:
  2. مجال تشفير البيانات أصبح يتزايد الطلب عليه بشكل كبير في الآونة الأخيرة، بالنسبة لمارشال فهي أداة تستخدم لفك تشفير البيانات المشفرة باستخدام خوارزمية "مارشال"، ويعتمد عملها على نقاط ضعف خوازرمية التشفير، فمنها الأدوات القائمة على التحليل الثابت، الهجمات المعروفة، الهجمات العنيفة. بالنسبة لمرحلة التعلم، كمبتدئين فمن الطبيعي أن نبدأ بتعلم المفاهيم الأساسية للتشفير وهذه لمحة عنها: التشفير المتماثل والمتناظر. وظائف التجزئة. التوقيعات الرقمية. تحليل الشيفرة. بروتوكولات الاتصال الآمنة. والسر في التعلم والوصول لمستوى كبير واكتساب الخبرة يعتمد على الشغف والإرادة والالتزام بالتعلم المستمر وتحديث معلوماتك بشطل دوري ومتزامن مع التطورات الحاصلة في هذا المجال. يمكنك أن تطلع أكثر على هاته المقالات التي تتحدث حول التشفير:
  3. لارافيل يوفر نظام مصادقة مدمجا مبنيا على كلاس Auth فهو يسهل عملية التحقق من صحة بيانات تسجيل الدخول للمستخدمين. توجد طريقتين يجب أن نقوم بتعريفهما في ملف routes/web.php، هما: GET /login: تعرض نموذج تسجيل الدخول. POST /login: تتحقق من بيانات تسجيل الدخول المرسلة وتعيد توجيه المستخدم بناء على صحتها. ثم نقوم باستخدام أمر artisan لإنشاء نموذج تسجيل الدخول من خلال: php artisan make:form Login أين سيقوم هذا الأمر بإنشاء ملف app/Http/Requests/LoginRequest.php، والذي يحتوي على قواعد التحقق من صحة بيانات تسجيل الدخول. في وحدة تحكم LoginController، نستخدم طريقة Auth::attempt للتحقق من صحة اسم المستخدم وكلمة المرور المدخلين ففي حال نجحت عملية التحقق، سيتم تسجيل دخول المستخدم تلقائيا. يمكنك قراءة هذه المقالات للتعمق أكثر: الاستيثاق في لارافل
  4. الخطأ واضح في السطر رقم 72 في هذا السطر: if(isset($_POST['login'])){ فقد نسيت إغلاق القوس المنحني `}` لإنهاء الشرط `if` وهذا يعني أن كتلة الكود الخاصة بك ستظل مفتوحة بالكامل، مما يؤدي إلى حدوث خطأ التحليل. يجب أن تعدله بهذا النحو: <?php if(isset($_POST['login'])){ // ... الكود الخاص بك } // أضف القوس هنا ?> وأنصحك باستخدام مسافة بادئة متسقة. فهي تعزز قراءة الكود بشكل كبير وتجعل من السهل اكتشاف هذه الأنواع من الأخطاء، وهذه نسخة معدلة: <?php if (isset($_POST['login'])) { $conn = mysqli_connect("localhost", "root", "", "hospital"); if (mysqli_connect_errno()) { echo "Error! " . mysqli_connect_error(); } else { $ID = $_POST['ID']; $Pass = $_POST['Pass']; $query = "select * from user where ID='$ID' and Pass='Pass'"; $result = mysqli_query($con, $query); $row = mysqli_fetch_row($result); if ($row) { session_start(); $_SESSION[' ID'] = $row[0]; $_SESSION[' Fname' ] = $row[1]; $_SESSION[' Lname'] = $row[2]; $_SESSION[' Pass'] = $Pass; $_SESSION[' Email'] = $Email; header("location:profile.php"); } else { echo "incorrect ID or password, please enter a valid ID and password"; } } } // القوس المنحني الإغلاقي ?> يمكنك مراجعة هذه المقالة لإضافة التنسيق التلقائي في VSCode لعمل المسافات البادئة بشكل تلقائي:
  5. المشكلة تبدو أنها تكمن في دالة `askStudentID` وبناء على الكود المقدم ووصف المشكلة فعندما يدخل المستخدم رقم تعريف الطالب، يتم استدعاء دالة `askStudentID` متكررا حتى يدخل رقم تعريف طالب صالح فبعد إدخال رقم تعريف طالب صالح، لا تستمر الدالة إلى الخطوة التالية من استرجاع معلومات الدرس وتسجيل الطالب. لحل هذه المشكلة، تحتاج إلى تعديل دالة `askStudentID` للتعامل مع حالة رقم تعريف الطالب الصالح والمتابعة مع الخطوات التالية وهذا هو الكود المعدل: function askStudentID(){ rl.question('ادخل رقم الطالب: ', student_id=>{ if(student_id.trim() == '' || isNaN(student_id)){ console.log('يرجى إدخال أرقام فقط'); askStudentID(); }else{ dataBase.get(`SELECT * FROM students WHERE student_id = ${student_id}`, (err, rowStudent)=>{ if(err){ rl.close(); dataBase.close(err=>{ if(err) return console.log(err.message); else return console.log('تم إغلاق قاعدة البيانات.'); }) return console.log(err.message); }else if(rowStudent){ // المتابعة إلى الخطوة التالية لاسترجاع معلومات الدرس وتسجيل الطالب console.log('تم العثور على رقم الطالب.'); // الجزء الباقي من الكود لاسترجاع معلومات الدرس وتسجيل الطالب }else{ console.log('رقم الطالب غير موجود.'); askStudentID(); } }) } }) } فهنا قد قم بإدخال رقم تعريف طالب صالح، سيحتوي متغير `rowStudent` على معلومات الطالب. يمكنك استخدام هذه المعلومات للمتابعة مع الخطوة التالية من استرجاع معلومات الدرس وتسجيل الطالب وهذا الإجراء يجب أن يمنع الكود من الخروج من دالة `askStudentID` مبكرا ويسمح له بالمتابعة مع بقية عملية التسجيل.
  6. مشكلة اختفاء العناصر قد تكون بسبب تموضع العناصر، لهذا تأكد من أن جميع العناصر موضوعة داخل حدود التخطيط الصحيحة، مثل ConstraintLayout أو LinearLayout، ومن خصائص العرض مثل ال visibility و layout_width و layout_height فيجب أن تكون مضبوطة بشكل صحيح. لا يمكن تحديد المشكلة بالتحديد، لهذا إن لم يعمل معك فيمنك القيام بتنظيف ملفات ذاكرة التخزين المؤقت يمكن ذلك من خلال الانتقال إلى: File > Invalidate Caches / Restart. وفي بعض الأحيان، يمكن أن يؤدي إعادة تشغيل أندرويد ستوديو إلى حل المشكلة أو تحديثه. أما بالنسبة لمشكلة عدم كتابة التعليمات البرمجية التي واجهتك، تأكد من أن لوحة المفاتيح مضبوطة على اللغة الصحيحة وأن جميع الاختصارات تعمل بشكل صحيح. قد يكون بسبب مشكلة في التحديثات، لذا تأكد من أنك تستخدم أحدث إصدار من أندرويد ستوديو. انتقل إلى: File > Settings > Appearance & Behavior > System Settings > Updates للتحقق من وجود تحديثات، إذا لم تنجح الحلول الأخرى، فحاول إعادة تثبيت أندرويد ستوديو لكن تأكد من حذف جميع المجلدات والملفات المتعلقة بأندرويد ستوديو قبل إعادة التثبيت.
  7. أولا في حالة ما كانت لديك شركة، فستحتاج إلى الرجوع إلى الميزانية العمومية للشركة، وتحديد حسابات الالتزامات قصيرة الأجل وطويلة الأجل، ثم جمع الأرصدة، والوصول في النهاية إلى القيمة الدفترية. فحينما تقوم بتحديد تلك الالتزامات في القائمة المالية سيتم استخدام القوائم المالية لحساب القيمة الدفترية، والتي تتطلب القيام بالخطوات التالية: تحليل القوائم المالية: من خلال فحص البيانات المالية الخاصة بالشركة، مثل البيانات الدورية (مثل بيان الدخل والميزانية العمومية) وبيان التدفقات النقدية. تحديد الالتزامات الطويلة والقصيرة الأجل: هنا نقوم بتحديد الالتزامات التي تعتبر طويلة الأجل (أي تلك التي تستحق فترة تزيد عن سنة واحدة) والالتزامات القصيرة الأجل (تستحق فترة أقل من سنة). حساب القيمة الدفترية: لحساب القيمة الدفترية للالتزامات، من خلال جمع قيمة الالتزامات الطويلة والقصيرة الأجل وهنا يجب أن تكون الأرقام المستخدمة في هذا الحساب مبينة في القوائم المالية الخاصة بالشركة. التأكد من الدقة: من أجل التأكد من أن البيانات التي تم استخدامها لحساب القيمة الدفترية دقيقة وموثوقة. يمكن أن يتم التحقق من القوائم المالية والتقارير الخاصة بالشركة نفسها. وبمجرد حساب القيمة الدفترية، يمكن استخدام هذه المعلومات لتقييم حالة التمويل الخاصة بالشركة وفهم كيفية توزيع الالتزامات على المدى الطويل والقصير، لكن يجب أن ننوّه بأنّ القيمة الدفترية للالتزامات ليست القيمة الفعلية التي يتم دفعها، وإنما تمثل القيمة المحاسبية لهذه الالتزامات في وقت معين.
  8. ال "methods chaining" أو "سلسلة الدوال" هو عبارة عن أسلوب يتيح لنا استدعاء سلسلة من الدوال على كائن واحد دون الحاجة إلى تخزين النتيجة بين كل استدعاء، وفي إطار العمل Laravel نجد أن العديد من الدوال ترجع `$this`، وهذا يعني أنها تعود بالكائن نفسه بعد الانتهاء من تنفيذ الدالة، مما يسمح بمواصلة استدعاء الدوال الأخرى على الكائن نفسه بسلاسة.أما بخصوص العلامة "::" في PHP، فهي تستخدم لاستدعاء الدوال الثابتة (static methods) والثوابت (constants) من داخل الصنف (class) بدون الحاجة لإنشاء كائن من الصنف، انظر لهذا المثال: class MyClass { public static function myStaticMethod() { return "Laravel"; } } echo MyClass::myStaticMethod(); // سيطبع "Laravel" وأما بالنسبة لعملية "->" فهي تستخدم للوصول إلى خصائص الكائنات (properties) والدوال ضمن الكائنات (methods)، أو للوصول إلى العناصر في مصفوفة، يمكن أن يتضح الأمر أكثر من خلال هذا المثال: class MyClass { public $name = "Hsoub"; public function greet() { return "Hi, " . $this->name; } } $obj = new MyClass(); echo $obj->greet(); // سيطبع "Hi, Hsoub" في حين "->" فهي تستخدم للإشارة إلى أن الدالة تعمل على كائن (Object) معين.
  9. نعم توجد العديد من المسابقات الوطنية والدولية التي تقام في مختلف أنحاء عالمنا العربي، فمثلا في الجزائر، توجد مسابقة وطنية برمجية للمبرمجين الطلاب بين الجامعات، تحت اسم ICPC Algerian Collegiate Programming Contest و المسابقة البرمجية للطلاب الجامعيين Alcpc. وهي عبارة عن مسابقة برمجة تقام على مستوى الجامعات الجزائرية. حيث يقوم الطلاب والطالبات بحل مجموعة من الخوارزميات باستعمال لغات برمجة من اختيارهم. والفرق المتأهلة تذهب للمنافسة النهائية الإقليمية التي تقام في دولة أخرى وتجمع فرقا من دول الشرق الأوسط وشمال إفريقيا أين تحتدم المنافسة أكثر فأكثر.
  10. بالطبع هو ليس كذلك، فمصطلح "تصميم البرمجيات" لا يقتصر فقط على العناصر التي ذكرتها بل يشمل أيضا جوانب أخرى مثل تصميم قواعد البيانات، وتحديد المتطلبات الوظيفية وغير الوظيفية، وتصميم الأنظمة والهندسة البرمجية. فهو عبارة عن عملية تخطيط وإنشاء برامج كمبيوتر تلبي احتياجات المستخدمين بشكل فعال، وهذا يشمل تحديد متطلبات البرنامج، وتصميم واجهة المستخدم، وتحديد هيكل البرنامج وتنظيم البيانات، وتطوير الخوارزميات والتنفيذ الفعلي للبرنامج. توجد عدة أنواع لتصميم البرمجيات وهي: تصميم واجهات المستخدم (UI):بحيث هنا يتم التركيز على كيفية تنظيم وتصميم العناصر التفاعلية التي يتفاعل معها المستخدم. تصميم تجربة المستخدم (UX): وهو النظر في كيفية تفاعل المستخدم مع البرنامج وتجربته الشاملة. تصميم البيانات والهندسة البرمجية: تصميم البيانات والهياكل التي تدعم البرنامج بشكل فعال. تصميم قواعد البيانات: من خلال تحديد كيفية تنظيم البيانات وتخزينها بشكل فعال وآمن. ومن المفترض أن يتعلم تصميم البرمجيات الأشخاص الذين يرغبون في تطوير برمجيات ذات جودة عالية وتجربة مستخدم مريحة وفعّالة. يمكن أن يتعلم التصميم المطورون البرمجيون، ومصممو واجهة المستخدم، ومهندسو البرمجيات، ومحللو النظم، وغيرهم. يمكنك الاستفادة أكثر من هنا عبر تصفح هذه المقالات:
  11. كما تفضل الزملاء في إجاباتهم فهذه المشكلة شائعة في PowerShell وأول خطوة يجب الانتباه لها، هي فتحه كمسؤول، وهذا الأمر: Set-ExecutionPolicy RemoteSigned عند تنفيذه في تلك الحالة سيعطي صلاحيات إضافية ويسمح له بالقيام بأعمال تتطلب صلاحيات مرتفعة، مثل تعديل الإعدادات النظامية أو تنفيذ أوامر تأثيرها يمتد إلى جميع المستخدمين على الجهاز. ففتح PowerShell كمسؤول يمنح الأمر "Set-ExecutionPolicy" الصلاحية الكافية لتعديل سياسة التنفيذ الافتراضية على النظام، مما يسمح للسكربتات بالتشغيل دون القيود التي كانت مفروضة بسبب السياسة السابقة. أين يقوم بتعيين سياسة التنفيذ لتسمح بتشغيل السكربتات الموقعة رقميا (مثل السكربتات المنشأة محليا على جهاز الكمبيوتر وغيرها). وأخيرا، تقوم بتنفيذ الأمر التالي: .\venv\Scripts\activate وهو يستخدم عادة في بيئات البيانات الافتراضية (virtual environments) في Python. فعند تنفيذ هذا الأمر، يتم تنشيط (أو تفعيل) البيئة الوهمية المسماة "venv" التي تم إنشاؤها في المجلد الحالي. عند تنشيط البيئة الوهمية، يتم تعيين المتغيرات البيئية بحيث يشير Python إلى المكتبات والأدوات المثبتة داخل هذه البيئة بدلا من البيئة الافتراضية للنظام. في حال واجهتك مشكلة مستقبلا في تثبيت البيئة الافتراضية يمكنك الرجوع لهذه المقالة التي تشرح الخطوات:
  12. يبدو أن الحرف الذي استخدمته للتحويل هو "/" وهو خاطئ، والصحيح والمستخدم للتحويل هو "\" لهذا يجب تصحيح أي استخدام غير صحيح لهذا الحرف. وعادة ما يكون ذلك بالتحقق من الترميز في الكود وإصلاح أي escaping characters بشكل صحيح. وأخيراً، لضمان حفظ التعديلات في ملف الكود، يجب استخدام اختصار الكيبورد "CTRL + S" للقيام بعملية الحفظ وهذا أمر مهم لأنه يضمن حفظ التغييرات وتطبيقها على الملف الذي تعمل عليه. وتختلف المشكلات التي قد تواجه مستخدمي VSCode لهذا يجب العودة بشكل دائم ومراجعة التوثيقات المطلوبة، يمكنك تصفح النقاش في هذه المقالة:
  13. في الأساس نعم، يمكن تحويل موقع ويب إلى تطبيق Android وحتى إلى تطبيق iOS وهذا الأمر يتم باستخدام تقنيات مختلفة. هناك العديد من الطرق الممكنة لتحقيق ذلك، منها استخدام الأطر البرمجية الهجينة مثل React Native أو Flutter، التي تسمح بكتابة كود واحد يمكن تشغيله على منصتي Android وiOS، وكذلك استخدام الأطر البرمجية المخصصة لكل منصة مثل Java/Kotlin لتطبيقات Android وSwift/Objective-C لتطبيقات iOS. الطريقة التي يتم فيها تحويل الموقع الويب إلى تطبيقات موبايل قد تكون سهلة أو صعبة اعتمادًا على عدة عوامل مثل تعقيد الموقع الويب، والميزات المطلوبة في التطبيقات المحمولة، والخبرة المتاحة لدى فريق التطوير. توجد أدوات مثل PhoneGap و Cordova، والتي تتيح تحويل مواقع الويب الحالية إلى تطبيقات هاتف ذكي، بالنسبة للشركات التي تقدم مميزات مختلفة في كل من تطبيق الجوال والموقع وتطبيق سطح المكتب، فهذا قد يكون بسبب احتياجات وتوقعات المستخدمين المختلفة على كل منصة. لأنه يمكن أن يكون لدى التطبيق المحمول ميزات تفاعلية مختلفة عن الموقع الويب لتحسين تجربة المستخدم على الهواتف الذكية، بينما قد يحتوي تطبيق سطح المكتب على ميزات مخصصة للأجهزة الكمبيوترية مثل استخدام الاختصارات للوحة المفاتيح والوصول إلى الملفات المحلية بسهولة. فمثلا في هذه المقالة يشرح الكيفية والطرق المستخدمة بشكل جيد: تحويل-موقع-الكترونى-الى-تطبيق-على-الهاتف
  14. الأسئلة ذات الطابع الاختباري لا نقوم بالإجابة عليها مباشرة، لكن سأحاول شرح الفكرة، يمكنك استخدام لغة برمجة مثل Python ومكتبة Flask لإنشاء واجهة ويب بسيطة فهنا ومن أجل قراءة ملف ذو امتداد PO يمكنك أن تستخدم مكتبة `polib تمكننا من استخراج النصوص والترجمة من الملف. ثم يمكن الشروع في إعداد تطبيق Flask لإنشاء صفحة ويب يمكن للمستخدمين تحميل ملف PO الخاص بهم وتحميله مرة أخرى بعد التعديل، لعرض المعلومات في الجدول يمكن أن نبسط الأمر من خلال استخدام HTML و CSS بحيث سيكون لكل كلمة اصلية وترجمتها حقل في الجدول، بعد ذلك تحاول تقسيم الجدول إلى صفحات وإضافة حقل إدخال للتعريبيمكن ذلك من خلال سكريبت JavaScript لتقسيم الجدول إلى صفحات وعرض 10 صفوف في كل صفحة كما أردت، كما يمكنك إضافة حقل إدخال لكل ترجمة لتسهيل التعديل وبعد التعديلات، تضيف زرا لتحميل الملف المعدل مباشرة من الصفحة. يمكنك تعلم كيفية البرمجة بلغة بايثون وبإطار العمل فلاسك أكثر من هنا كما توجد أداة للتعريب بالفعل تحمل اسم POEDIT يمكنك الاطلاع عليها من المقالة:
  15. نعم لكن سيعتمد عمل الأداة على نوع الفحص الذي تقومين به ويوجد نوعان من الفحص: فحص سطحي: مثل تحليل سرعة الموقع أو تحسين محركات البحث (SEO)، فسيتم تنفيذ الفحص على معالج وخادم الاستضافة الذي قمت بشرائه. وفحص عميق: مثل فحص ثغرات الأمان أو اختراق اختبارات النفاذية، فقد يتطلب ذلك معالجة أكثر قوة وقد لا يكون معالج وخادم الاستضافة كافيين. لهذا من الجيد اختيار خطة استضافة مناسبة تتضمن معالجا ذا قدرة كافية لاحتياجاتنا، مع توزيع عملية الفحص على فترات زمنية لتجنب إثقال كاهل خادم الاستضافة، كما توجد طريقة تستخدم شبكة توصيل المحتوى (CDN) لتوزيع الحمل على خوادم متعددة. بالنسبة لسؤالك الثاني، فيعتمد تشغيل الأداة على جهاز المستخدم من موقع ويب على نوع الفحص الذي تقومين به فإن كان سطحيا فيمكن تشغيله عادة من خلال موقع ويب دون الحاجة إلى تثبيت تطبيق وإن كان عميقا، فسيتطلب تثبيت تطبيق على جهاز المستخدم لمنح الأداة الصلاحيات اللازمة للوصول إلى المعلومات والقيام بالفحص.
  16. مشكلة النسيان معروفة جدا، خاصة عند المبتدئين في مجال البرمجة، وحتى في مرحلة تعلم أي مجال آخر، فمن الطبيعي جدا أن يكون لديك هذا الشعور، العبرة في التعلم ليست الحفظ أو التلقين والتكرار، إنما في الفهم والتطبيق المستمر مع المدرب الخاص بك، فمن أسرع الطرق المستخدمة للاستيعاب هو التطبيق مع المدرب مباشرة، وبعد إنهاء مسار دراسي معين من الدورة، التوجه لعمل مشاريع صغيرة تطبّق فيها ما تعلمته من معارف ومفاهيم خاصة الجوانب النظرية التي تكون مبهمة في البداية لكنها سرعان ما تتضح في المشاريع التطبيقية. تصفح هذه المصادر التي أرفقتها لك للاستفادة أكثر:
  17. إطار العمل Django هو إطار عمل Python متكامل ويوفر الكثير من الميزات المدمجة مثل ORM (Object-Relational Mapping)، وإدارة الجلسات، والأمان، والإدارة الإدارية، بينما Express.js هو إطار عمل خفيف ومرن يعمل على Node.js، مما يجعله مثاليا لتطوير تطبيقات الويب السريعة والمرنة. فإذا كنت تفضل استخدام Python وتحتاج إلى بنية متكاملة مع مجموعة واسعة من الميزات المدمجة، فإن Django يبقى خيارا لك، أما إذا كنت ترغب في المرونة والقدرة على بناء تطبيقات الويب بسرعة باستخدام JavaScript، فإن Express.js/Node.js مناسبان جدا. ويبقى الاختيار بينهما على حسب احتياجاتك واحتياجات مشروعك ومهاراتك. فإكسبريس ودجانغو هما إطاري عمل قويان ويقدم كل منهما قوة فريدة ويلبيان متطلبات مشاريع مختلفة على حسب تفضيلات المطورين.
  18. نعم، يمكننا استخدام JavaScript لقراءة ملف Excel أو ملفات ال CSV من صفحة الويب وعرض البيانات على الصفحة أو تحريرها ومن ثم حفظ التغييرات مرة أخرى في الملف، هذا مثال على ذلك: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSV Reader</title> </head> <body> <input type="file" id="csvFileInput"> <table id="csvTable"></table> <script> document.getElementById('csvFileInput').addEventListener('change', function() { var file = this.files[0]; var reader = new FileReader(); reader.onload = function(event) { var csvData = event.target.result; var table = document.getElementById('csvTable'); var rows = csvData.split('\n'); table.innerHTML = ''; // Clear existing table data rows.forEach(function(row) { var columns = row.split(','); var tr = document.createElement('tr'); columns.forEach(function(column) { var td = document.createElement('td'); td.textContent = column; tr.appendChild(td); }); table.appendChild(tr); }); }; reader.readAsText(file); }); </script> </body> </html> فهذه الشيفرة تتيح للمستخدم تحديد ملف CSV من خلال عنصر الإدخال <input type="file"> ثم يقوم بقراءة محتويات الملف وعرضها في جدول على الصفحة، لكن يمكنك تعديل هذا الكود ليتناسب مع ملف Excel بطريقة مشابهة، ولكن سيتطلب ذلك استخدام مكتبة JavaScript أخرى مثل SheetJS وهذا مكتبة sheetjs ومنها ستتمكن قراءة ملفات Excel بصيغة .xlsx.
×
×
  • أضف...