السلام عليكم ورحمة الله
اخواني اريد استورد بيانات موجوده مسبقا في ملف اكسل على شكل جداول دراسية للطلاب
تسلم اخوي جعفر
لكن هذا ملف الاكسل فقط مثال يحتوي على بيانات اربع طلاب فقط
البيانات التي عندي تتعدى ٧٠٠ طالب اي كل طالب له خمس سطور
من الصعب المرور عليها ووضع الاسم ورقم للخلايا الفارغة
وشكرا لك ومقدر مجهودك
تم تعديل هذه المشاركة بواسطة mas33 في 20 يناير 2014 في 00:27
أخي صفوت وعليكم السلام ورحمة الله وبركاته
هل اطلعت على البيانات في الملف المرفق
لآن في خانة الأسم والرقم تكون الخلايا مدمجة
مازلت المشكلة قائمة
وجزاك الله خيراً
وشكرا لك ومقدر مجهودك
أخي الفاضل :)
ممكن ترفق لي النسخة اﻻصلية من ملف اﻻكسل ، ﻻني ﻻزم اعمل له برنامج:
1. تغيير الحقول المدمجة إلى حقول منفصلة ، ثم تسمية الاعمدة المفردة ، حتى استطيع استيراد الملف في اﻻكسس ،
2. استيراد الملف للاكسس ،
3. ثم تعبئة الحقول الفاضية بالنسبة للاسماء الطلبة و صفوفهم ،
هذه البرمجة ستكون مصممه خصيصا ﻻعدادات ملفك ، لذا يجب ان اعمل على الملف اﻻصل ، واﻻ فالبرمجة لن تظبط :(
جعفر
شكرا جزيلا ، استلمت الملف :)
سؤال لوسمحت:
عملية استيراد البيانات ، هل هي مطلوبة لهذا الملف فقط ، او لملفات اخرى لاحقة كذلك؟
جعفر
فيه ملفات اخرى على نفس الشاكلة
كل الذي اريد هو كيف يتم استيراد البيانات من الملفات على هذا المنوال
وشكرا لك واهتمامك بالموضوع
استاذنا الفاضل :)
اولاً اعتذر عن التأخير ، فالكود كان جاهز البارحة ، ولكن مشيئة الله ارادته ان لا يعمل ، رغم محاولاتي :(
واليوم ، في خلال دقائق اكتشفت الخطأ في الكود ، وهو ان سطر واحد ، كان لازم يكون بعد السطر اللي بعده :)
ثانيأً لي الشرف في خدمة مربي اجيالنا ، امثالكم اساتذتنا الكرام :) وشرفكم يعلو بعلو صاحب المدينه النوراء ، على صاحبها وآله وصحبه أفضل الصلاة واتم التسليم :)
استاذي الفاضل ، حاولت تسهيل عملية الاستيراد ، فالخطوات المطلوبة لعملية الاستيراد هي:
- ان يكون اسم ملف الاكسل:
146.CS_GetStudentScheduleReport.xls
- وان يكون في نفس مجلد برنامج الاكسس.
- واذا عندك اكثر من ملف تريد استيراده ، فعليك دائما تغيير اسمه الى الاسم اعلاه (اما اذا كان عندك مجموعة ملفات وحبيت اني اغير في البرنامج ، بحيث يقرأ جميع ملفات الاكسل اللي في المجلد ، فما يمنعك إلا اصبعك عن الطلب ، ويكون لي الشرف في التلبية ان شاء الله تعالى :) )
اما البرنامج:
1. فيه جدول مؤقت tbl_Temp_Import ، يتم مسحه تلقائيا قبل استيراد اي ملف اكسل جديد ، ولا قيمة له بعد استيراد البيانات ،
2. والجدول الآخر tbl_Student_Schedule ، وهو طلبك ، ويبدو هكذا بعد استيراد البيانات في:
3. اما العقل المدبر فهو النموذج ، وكل مافيه هو زر الاستيراد ، وعندما تتم العملية ، تحصل على رسالة تخبرك بانتهاء عملية الاستيراد ، واتمام التنظيم في الجدول tbl_Student_Schedule
والكود الذي يقوم بهذا العمل هو:
Private Sub cmd_Import_From_Excel_Click()
'read the excel file from
File_Path = Application.CurrentProject.Path & "\146.CS_GetStudentScheduleReport.xls"
'import the file to a temporary table
'delete the temporary table, then import
CurrentDb.Execute ("Delete * From tbl_Temp_Import")
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "tbl_Temp_Import", File_Path, False
'lets move the correct fields to the other table tbl_Student_Schedule
Dim rst1 As DAO.Recordset
Dim rst2 As DAO.Recordset
Set rst1 = CurrentDb.OpenRecordset("Select * From tbl_Temp_Import Order by ID")
rst1.MoveLast: rst1.MoveFirst
Set rst2 = CurrentDb.OpenRecordset("Select * From tbl_Student_Schedule")
'which Row the data start from
Data_From_Row = 0
'loop through the import table
For i = 1 To rst1.RecordCount
If InStr(rst1!F1, "العام") Then Y = rst1!F1 'capture the school_year
If InStr(rst1!F1, "الفصل") Then S = rst1!F1 'capture the session
If InStr(rst1!F14, "ثانوية") Then N = rst1!F14 'capture the school_name
'data starts from the Row after the word القاعة
If rst1!F1 = "القاعة" Then
Data_From_Row = i + 1
End If
'read data from Data_From_Row, but make sure we have Day value, this is how we know to stop importing
If i >= Data_From_Row And Len(rst1!F23 & "") <> 0 Then
rst2.AddNew
rst2!school_name = N
rst2!school_year = Y
rst2!session = S
rst2!L7_S = rst1!F1
rst2!L7_E = rst1!F2
rst2!L6_S = rst1!F3
rst2!L6_E = rst1!F5
rst2!L5_S = rst1!F7
rst2!L5_E = rst1!F9
rst2!L4_S = rst1!F11
rst2!L4_E = rst1!F13
rst2!L3_S = rst1!F15
rst2!L3_E = rst1!F16
rst2!L2_S = rst1!F17
rst2!L2_E = rst1!F20
rst2!L1_S = rst1!F21
rst2!L1_E = rst1!F22
rst2!Week_Day = rst1!F23
'student name, and ID repetition
If Len(rst1!F24 & "") <> 0 Then sName = rst1!F24
If Len(rst1!F25 & "") <> 0 Then sID = rst1!F25
rst2!Student_Name = sName 'rst1!F24
rst2!Student_ID = sID 'rst1!F25
rst2.Update
End If 'i >= Data_From_Row
rst1.MoveNext
Next i
rst1.Close: Set rst1 = Nothing
rst2.Close: Set rst2 = Nothing
MsgBox "Importing Completed"
End Subجعفر
1. المرفق به قاعدة بيانات بصيغة 2003 و 2007
2. ملف الاكسل يجب ان يكون مطابقاً للملف الذي ارسلته لي :)
تم تعديل هذه المشاركة بواسطة jjafferr في 23 يناير 2014 في 20:29
أخي الفاضل جعفر
يعجز لساني عن الشكر لك
وكل ما استطيع هو الدعاء لك ولوالديك
جزاءك الله خير وجعلك من يتنعمون بجنانه
وشكراً على اهتمامك وتعبك معي يا استاذي
أخي جعفر
الملف المرفق ما هو التغيير في الكود لكي استورده للأكسس
وإذا ممكن شرح الكود أو طريقة ملئ الفرغات التي بالأكسل
وشكراً لك جزيلاً
وعليكم السلام استاذنا الفاضل :)
واعذرني في اعادة طلبي:
ممكن ترفق لي النسخة اﻻصلية من ملف اﻻكسل ، ﻻني ﻻزم اعمل له برمجة ستكون مصممه خصيصا ﻻعدادات ملفك ، لذا يجب ان اعمل على الملف اﻻصل ، واﻻ فالبرمجة لن تضبط :(
جعفر
تم تعديل هذه المشاركة بواسطة jjafferr في 24 يناير 2014 في 10:54
أخي الفاضل جعفر
الملف حجمه كبير جداً أكثر من 4000 سطر
حذفت من السطور حتى يقل في الحجم
والبنية الأساسية لملف الأكسل لم تتغير مدام الفكرة واحدة
فلا يهم عدد السطور حيث أن عدد الطلاب يزيد أو ينقص في كل فصل دراسي
وشكراً لك
اتعبتك معاي
وعليكم السلام استاذنا الفاضل :)
حاولت ان احتفظ بنفس نمط البرنامج السابق ، لذا اصبح لديك الآن زرين بدلا عن زر واحد :)
الجداول اللي فيها كلمة Temp ، معناها انها مؤقته لإستيراد المعلومات الخام من ملف الاكسل ،
والكود يأخذ البيانات من الحقول المستوردة ويضعها في حقولها الصحيحة في الجدول النهائي :)
وهنا كذلك يجب ان اشير الى انه يجب ان يكون ملف الاكسل في نفس مجلد ملف الاكسس ،
بالاضافة ان اسمه يجب ان يكون:
146.FinalMarksReport.xls
اذا حبيت ان اشرح لك بالتفصيل كود البرنامج ، سطر بسطر ، فانا تحت امرك ، ما يردك الإ لسانك :)
جعفر
والمرفق كذلك خليت لك الملفات فيه بصيغة 2003 و 2007
اخي الفاضل جعفر
والله ما قصرت وجزاك الله خير
ومقدر ومثمن مجهودك
وأشكرك جداً على ما علمتني إياه
حياك الله :)
معذرة استاذ جعفر على التدخل
هل هذا التطبيق الإستيراد بالأكسس يطبق الا على برنامج اكسل للأخ "mas33"
ام لجميع برامج الإكسل
إذا كان كذالك ممكن تعطينا فكرة عامة لإستيراد اي ملف بالأكسل 2003 الى اكسس 2003
الْلَّهُم صَلِّ وَبَارِك وَسَلِم عَلَى سَيِّدِنَا مُحَمَّد وَعَلَى الِه وَصَحْبِه وَسَلِّم
حياك الله اخي كريمو الثاني :)
هذا البرنامج مفصل لبرنامج اكسل استاذنا الفاضل mas33 :)
اما عملية استيراد ملف اكسل الى اكسس ، فالطريقة سهلة ، ويقوم اكسس بالخطوات ، وما عليك الا ان تقول next next :)
هذا رابط اجنبي للعملية ، فكل اللي عليك عمله هو متابعة الصور فقط :)
https://www.ischool.utexas.edu/technology/tutorials/office/access03/import_data.php
وعند استيراد الملف ، لا تهتم كثيرا بالمسميات او نوع الحقول ، المهم ان تستورد المعلومات ، ونحفظ الجدول كجدول مؤقت ،
ثم نقوم بعمل كود او استعلام لنقل البيانات من هذا الجدول المؤقت الى الجدول النهائي ، والذي سنستخدمه في البرنامج :)
وفي حال اتبعت الخطوات السابقة واستوردت ملف الاكسل ، وكنت تريد القيام بهذه العملية بصفة دورية ، فلا داعي للخطوات (الخطوات مهمة لأول مرة فقط) ، وانما يمكنك استيراد الملف الى الجدول المؤقت عن طريقة هذا الكود:
File_Path = Application.CurrentProject.Path & "\146.CS_GetStudentScheduleReport.xls" DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Table Name", File_Path, False
وهنا File_Path عبارة عن مجرد اسم ملف الاكسل ومساره .
واذا كانت لديك اسئلة اخرى في هذا لخصوص ، فرجاء تفتح سؤال جديد في هذا الخصوص ، ثم ارسل لي رساله بالرابط ، واكون في الخدمة ان شاء الله تعالى :)
واعتذر لأستاذنا الفاضل mas33 عن قرصنة سؤاله لسؤال آخر :)
جعفر
تم تعديل هذه المشاركة بواسطة jjafferr في 25 يناير 2014 في 20:11
هذا الموضوع مغلق.