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

كود دالة لإستخراج ملفات الفلاش من ملفات الإكسيل

بدأه koao في 22 يونيو 2008 · 8 رد · 853 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

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

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

ولكن وصدفة وقعت على منتدى أجنبي .. يظهر كود مبرمج بالـ VBA لإستخراج ملفات الفلاش من ملفات الإكسيل والوورد ..وكتب صاحب الموضوع التالي:

Here a code found in China Excel forum to extract embedded Flash file in Excel / Word.

Sub ExtractFlash() 
	Dim tmpFileName As String, FileNumber As Integer 
	Dim myFileId As Long 
	Dim myArr() As Byte 
	Dim i As Long 
	Dim MyFileLen As Long, myIndex As Long 
	Dim swfFileLen As Long 
	Dim swfArr() As Byte 
	tmpFileName = Application.GetOpenFilename("office File(*.doc;*.xls),*.doc;*.xls", , "Select Excel / Word File") 
	If tmpFileName = "False" Then Exit Sub 
	myFileId = FreeFile 
	Open tmpFileName For Binary As #myFileId 
	MyFileLen = LOF(myFileId) 
	ReDim myArr(MyFileLen - 1) 
	Get myFileId, , myArr() 
	Close myFileId 
	Application.ScreenUpdating = False 
	i = 0 
	Do While i < MyFileLen 
		If myArr(i) = &H46 Then 
			If myArr(i + 1) = &H57 And myArr(i + 2) = &H53 Then 
				swfFileLen = CLng(&H1000000) * myArr(i + 7) + CLng(&H10000) * myArr(i + 6) + _ 
				CLng(&H100) * myArr(i + 5) + myArr(i + 4) 
				ReDim swfArr(swfFileLen - 1) 
				For myIndex = 0 To swfFileLen - 1 
					swfArr(myIndex) = myArr(i + myIndex) 
				Next myIndex 
				Exit Do 
			Else 
				i = i + 3 
			End If 
		Else 
			i = i + 1 
		End If 
	Loop 
	myFileId = FreeFile 
	tmpFileName = Left(tmpFileName, Len(tmpFileName) - 4) & ".swf" 
	Open tmpFileName For Binary As #myFileId 
	Put #myFileId, , swfArr 
	Close myFileId 
	MsgBox "SaveAs " & tmpFileName 
End Sub

ولا أخفيكم أني حاولت أن أحلل الكود لأفهمه ولم أستطع .. فلعل أهل الخبرة يساعدوننا في فهمه .. ولكن حين التطبيق أعطاني خطأ في سطرين.. الأول

tmpFileName = Application.GetOpenFilename("office File(*.doc;*.xls),*.doc;*.xls", , "Select Excel / Word File")

وهذا واضح لأن الكود يبحث عن موديول "مربع فتح الملفات" بهذا الإسم وعوضته بإستدعاء موديول آخر .. والسطر الثاني

Application.ScreenUpdating = False

فلم أعرف ماذا أفعل فقمت بتعطيل الكود (بجعل لونه أخضر) .. والحمدلله يعمل الكود بعد التعطيل من دون مشاكل

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

ولا تنسونا من صالح دعاؤكم

FlashExtracorFromExcelFile.zip

اللهم صلي على محمد وعلى آل محمد كما صليت على إبراهيم وعلى آل إبراهيم إنك حميد مجيد

وبارك على محمد وعلى آل محمد كما باركت على إبراهيم وعلى آل إبراهيم إنك حميد مجيد

#2

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

الله يجزاك كل خير أخي الكريم .. الحقيقة الكود ممتاز ونادر

وجهد رائع ومتواصل للوصول للهدف .. لك كل التقدير والثناء

موفق دوما وابدا

#3

شرف لي أخونا وأستاذنا ومشرفنا الغالي أن ترد على موضوعي المتواضع

وفرصة أنتهزها لشكرك على جهودك انت وأساتذتنا الكبار وعلى رأسهم الأخت زهره

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

فالحمدلله رب العالمين ثم الشكر لكم

اللهم صلي على محمد وعلى آل محمد كما صليت على إبراهيم وعلى آل إبراهيم إنك حميد مجيد

وبارك على محمد وعلى آل محمد كما باركت على إبراهيم وعلى آل إبراهيم إنك حميد مجيد

#4

ممتاز ، وشكراً لك

#5

جهدك مشكور عليه عزيزي

ولكن أظن أن الكود يحتاج إلى تعديل بسيط ليتوافق مع ملفات Excel 2007

والتي تأتي بالإمتداد التالي : "xlsx"،

شكرا مرة أخرى.

#6

الشكر موصول لك أخي wkhiar .. وزاد موضوعي إمتيازا بمرورك الكريم

وحياك الله أخي bollbol وحقيقة لم أجرب الكود على اكسيس 2007 بحكم أني لا أستخدمه على جهازي .. فلعل من عنده إياه وهو متحمس لحل المشكلة فجزاه الله خيرا

اللهم صلي على محمد وعلى آل محمد كما صليت على إبراهيم وعلى آل إبراهيم إنك حميد مجيد

وبارك على محمد وعلى آل محمد كما باركت على إبراهيم وعلى آل إبراهيم إنك حميد مجيد

#7

تم تحديث الكود ليقبل التعامل مع ملفات Excel 2007

FlashExtracorFromExcelFile_2007.rar

التعديل الأول:

	If LCase(Right(tmpFileName, 3)) = "xls" Or _
	LCase(Right(tmpFileName, 4)) = "xlsx" Then
	Else
	MsgBox "الملف المحدد ليس ملف إكسل"
	Exit Sub
	End If

التعديل الثاني:

	strStartDir = CurrentDb.Name
	strFilter = ahtAddFilterItem(strFilter, "*.xls;*.xlsx")

المثال جاهز للتحميل، علما بأنه مجرب ومضمون. :)

#8

بالصدفة إكتشفت وجود خطأ في خاصية "الفلتر" عند ظهور مربع حوار فتح مربع،

حيث بالمثال الموجود كان كالتالي:

	strFilter = ahtAddFilterItem(strFilter, "*.xls")

والصحيح يجب أن يكون كالتالي:

	strFilter = ahtAddFilterItem(strFilter, "Excel Files (*.xls, *.xlsx)", "*.xls;*.xlsx")

بحيث عند ظهور مربع حوار فتح ملف لن تظهر إلا ملفات Excel فقط.

التعديل الأخير بالمرفقات وشكرا.

FlashExtracorFromExcelFile_2007_1.rar

#9

أخي bollbol .. الله يعطيك العافيه ويبارك فيك على هذا الجهد الجبار

وحرصك على إكتمال المعلومة .. فجزاك الله عنا كل الخير

واعلم أني انتبهت أن كل الملفات تظهر في مربع الفتح .. وحاولت أن أجعلها تظهر ملفات الإكسيل فقط ولكن لم أوفق .. فجزاك الله خير على هذه المعلومة

اللهم صلي على محمد وعلى آل محمد كما صليت على إبراهيم وعلى آل إبراهيم إنك حميد مجيد

وبارك على محمد وعلى آل محمد كما باركت على إبراهيم وعلى آل إبراهيم إنك حميد مجيد

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…