الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استعراض جداول ملفات الإكسل مع صفحات الدوت نت

بدأه AmeenSnw في 24 نوفمبر 2010 · 2 رد · 2,646 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم :)

الدرس التالي كان في الأصل رداً لتساؤل من أحد الأعضاء، ولكن عندما لم أجد منه الاستجابة؛ قررت تحويله إلى درس حتى تعم الفائدة، :lol:

الرابط الأصلي للرد

حسناً إذن، بسم الله نبدأ.. :)

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

حسنا..

تجهيز ملف الأكسل

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

وذلك بتحديد الأعمدة التي يتكون منها الجدول أو تحديد نطاق الخلايا التي يتكون منها الجدول ثم نقوم بتسمية النطاق المحدد بمثلا MyExcelTable.

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

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

تجهيز قناة الاتصال/ مصدر البيانات

نقوم بعد ذلك بفتح قناة اتصال من نوع ODBC Datasouce من الكنترول بانل حق الوندوز وفي الغالب تكون ضمن قائمة أدوات الإدارة Administration Tools

ومن نافذته نذهب إلى التبويب المسمى UserDNS أو SystenDNS (حسب نوع اتاحة البيانات الذي تري، هل عند المستخد فقط، أم في النظام بشكل عام) ونقوم بإضافة Add محرك الأكسل Microsoft Excel Driver *.xls طبعاً إذا كانت ملف الأكسل تبع 2007 أو 2010 فلازم تختار المحرك الذي أمامه *.xlsx

المهم ستنقر على إنهاء Finish وستفتح لك نافذة تثبيت الاتصال مع الملف ستقوم فيها بتسمية الاتصال وليكن MyExcelDB، دعك من كتابة الوصف الآن وانقر مباشرة على زرار تحديد المصنف Select Workbook ثم حدد مسار ملف الأكسل الذي تريد استخدامه ثم OK وOK مرة أخرى.

وبذلك ستجد اسم الاتصال موجود في قائمة ال UserDNS وهذا يعني أن عملية الاتصال كانت ناجحة.

بعد ذلك ستقوم بفتح الفجوال ويب دفلوبر أو الفجوال ستوديو أو الإكسبرشن ويب وستقوم بالتالي:

حالة استخدام برنامج Microsoft Expression WEB الإصدار الأول أو الثاني أو الثالث أو الرابع

1- إضافة صفحة ويب فورم جديدة للتجربة في مشروع موقع ويب جديد asp.net 2.0 أو أحدث.

2- ستقوم بإضافة مصدر بيانات من نوع SQLDatasource من قائمة الأدوات - قسم البيانات Data.

3- ستقوم بالنقر على سهم الوظائف المختصرة (في الغالب في أعلى يمين مصدر البيانات) وتختار إعدادات الاتصال Configuer Data Source

4- ستظهر لك نافذة الاتصال وستختار إضافة اتصال جديد New Connection

5- تظهر هنا نافذة اختيار نوع المصدر وستختار Microsoft ODBC Data Source ثم OK

6 - تظهر الآن نافذة إعدادات المصدر وستقوم بالنقر على أول قائمة منسدلة وستختار الاتصال الذي قمنا ببنائه MyExcelDB ولمعرفة ما إذا كانت جميع الخطوات السابقة صحيحة قم بالنقر على زرار اختبار الاتصال Test Connection فإذا قال أن كل شيء تمام فهذا جيد، وفي حالة وجود خطأ فراجع الخدوات السابقة!(لاحظ أنه سيقوم بإعطاء رسالة خطأ إذا كان ملف الأكسل مفتوحاً)

7- بعد OK سنقوم بمتابعة العملية Next ثم Next ثم سيقوم البرنامج بعرض محتوى الجداول المتوفرة في ملف الأكسل حيث ستجد الجدول MyExcelTable

وفي حالة عدم ظهوره وظهور مربع حوار جمل الاستعلام فارغ ستكتب الاستعلام التالي

SELECT * FROM MyExcelTable

ثم Next ثم اختبار جملة الاستعلام للتأكد من عملها عن طريق Test Query فإذا نجحت العملية ستنقر على إنهاء وإذا حصل عناك خطأ تأكد من أن ملف الأكسل غير مستخدم من قبل أي برنامج آخر.

8 - ستقوم بربط مصدر البيانات باحدى أدوات العرض مثل Datalist أو Gridview أو أي أداة أخرى تحب استخدامها للعرض وتقبل البيانات من مصدر بيانات .

9 - قم بمعاينة الصفحة للتأكد من أن كل شيء يجري بشكل جيد.

حالة استخدام Visual Studio 2008 أو 2010

1- بعد فتح مشروع جديد لموقع ويب asp.net 2.0 أو أحدث قم بإضافة ويب فورم فارغ.

2- ستقوم بإظهار قائمة مستعرض السرفر Server Explorer من قائمة العرض View.

3- منها ستنقر على أيقونة الاتصال بقاعدة بيانات Connect to Database .

4 - تظهر هنا نافذة اختيار نوع المصدر وستختار Microsoft ODBC Data Source ثم OK.

5 - تظهر الآن نافذة إعدادات المصدر وستقوم بالنقر على أول قائمة منسدلة وستختار الاتصال الذي قمنا ببنائه MyExcelDB ولمعرفة ما إذا كانت جميع الخطوات السابقة صحيحة قم بالنقر على زرار اختبار الاتصال Test Connection فإذا قال أن كل شيء تمام فهذا جيد، وفي حالة وجود خطأ فراجع الخدوات السابقة! (لاحظ أنه سيقوم بإعطاء رسالة خطأ إذا كان ملف الأكسل مفتوحاً)

6 - بعد الأوكي ستجد أن الاتصال قد تم إضافته إلى قائمة مستعرض السرفر، وبالنقر على السهم الموجود بجانبها ستجد مجلد الجداول وبداخله ستجد جدولنا MyExcelTable وبداخله أسماء الأعمدة الخاصة به.

7 - تستطيع اختصاراً أن تقوم بسحب اسم الجدول من مستعرض السرفر إلى الصفحة مباشرة، وبذلك سيقوم البرنامج بإنشاء مصدر بيانات من نوع SQL وإدراج Gridview يحتوي على بيانات للمعاينة بشكل فوري وسريع.

8 - قم بمعاينة الصفحة للتأكد من أن كل شيء يجري بشكل جيد.

رسالة الخطأ التي قد تواجهها أثناء العملية:

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

ERROR [HY000] [Microsoft][ODBC Excel Driver] لا يمكن لمشغّل قاعدة بيانات Microsoft Office Access فتح الملف '(unknown)' أو الكتابة إليه. تم فتح الملف مسبقاً بشكلٍ خاص من قِبَل مستخدم آخر، أو أنك بحاجة إلى إذن لعرض بياناته وكتابتها.
ERROR [IM006] [Microsoft][ODBC Driver Manager] Driver's SQLSetConnectAttr failed
ERROR [HY000] [Microsoft][ODBC Excel Driver] لا يمكن لمشغّل قاعدة بيانات Microsoft Office Access فتح الملف '(unknown)' أو الكتابة إليه. تم فتح الملف مسبقاً بشكلٍ خاص من قِبَل مستخدم آخر، أو أنك بحاجة إلى إذن لعرض بياناته وكتابتها

ففي حالة استخدام الإكسبرشن ويب نقوم بالتأكد من أن برنامج الأكسل لا يزال مغلاقاً (أحياناً يكون البرنامج في حالة تعليق حيث لا يوجد له نافذة ولكن عند فتح إدارة المهام TaskManager نجده موجوداً في قائمة العمليات Processes، الحل هنا هو أن نقوم بإنهاء العملية بالنقر على اسم البرنامج بالزرار الأيمن للموس ونحتار انهاء العملية End Task)

أما في حالة استخدام الفجوال ستوديو 2008 أو 2010 فقد تظهر نفس الرسالة السابقة حتى لو كان برنامج الأكسل مغلقاً، وذلك بسبب مستعرض السرفر Server Explorer الموجود بداخل البرنامج نفسه، حيث عندما نقوم بتصفح الجداول سيقوم بفتح الملف للمعاينة بداخل بيئة الفجوال ستوديو وعند المعاينة ستظهر الرسالة، والحل هنا هو أن تقوم بالنقر على اسم الملف من مستعرض السرفر ثم تنقر عليه بالزرار الأيمن وتختار إغلاق الاتصال Close Connection وبذلك ستلاحظ وجود علامة × بجانب أيقونة الملف. بعدها ستتم المعاينة بشكل سليم.

صعوبات واجهتها في تطوير الفكرة

هناك بعض الأشياء التي لم أجد لها حلاً، :

1- عملية إضافة سجلات جديدة في الجدول.

2- عملية حذف سجلات موجودة في الجدول.

3- عملية تحديث سجلات موجودة في الجدول.

ملاحظات

1- فيما يتعلق بالفرونت بيج والفجوال ستوديو 2005:

هذه الخطوات لا يمكن استخدامها في برنامج Microsoft Frontpage 2003

أما بالنسبة لل Microsoft Visual Stuio 2005 فنفس خطوات ال 2008 و 2010 تنطبق عليه، مع إمكانية استخدام نفس طريقة الإكسبرشن ويب في كل الاصدارات.

2- تستطيع بواسطة الداتا ست DataSet ربط أكثر من جدول من نفس الملف بشرط أن تكون قد حددت لكل جدول اسم مميز له داخل ملف الأكسل أولاً. كما يسهل باني الاستعلامات Query Builder عملية الربط والعلاقات إن كنت تريد انشائها.

حسناً إذن

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

والسلام عليكم ورحمة الله وبركاته :)

تم تعديل هذه المشاركة بواسطة AmeenSnw في 24 نوفمبر 2010 في 01:06

1
#2

مشاركة جميلة و مجهود طيب

ولكن لي عندك سؤال

لو ملف الـ Excel فيه خانات مدمجة مع بعضها البعض

Merge Cells

كيف يتم قراءتها ؟؟؟

ارحب بكم في مدونتي الشخصية

M2000 Developer

#3

السلام عليكم :)

اقتباس
لو ملف الـ Excel فيه خانات مدمجة مع بعضها البعض

Merge Cells

كيف يتم قراءتها ؟؟؟

أعتقد أن الموضوع يحتاج هنا إلى توضيح إضافي لنفهم.

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

فلو تلاحظ أن اسم أي خلية مدموجة هو نفسه اسم الخلية الأولى فيها، أي أننا لو دمجنا الخليتين A1 وB1 سنلاحظ أن اسم الخلية المدموجة هو A1. كذلك إن كانت خلايا مدموجة أفقياً.

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

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

أرجوا أن تكون الفكرة واضحة.

والسلام عليكم ورحمة الله وبركاته :)

تم تعديل هذه المشاركة بواسطة AmeenSnw في 28 نوفمبر 2010 في 09:41

1

مواضيع مشابهة