السلام عليكم ورحمة الله وبركاته,
قد تحتاج في يوم من الأيام أن تقوم بجعل برنامجك يتصل باحدى برامج أوفيس لأداء مهمه ما يصعب القيام بها داخل برنامجك و تريد ان توفر على نفسك الجهد والوقت لأداء مهام أخرى.
من أمثال هذه المهام الصعبه هو تحويل بعض الملفات مثل DOC أو RTF الى HTML او TXT أوالعكس , فاذا فكرت ان تقوم بعمل هذا التحويل بنفسك تماما , فانه سيضيع من وقتك وعقلك الكثير.
عموما انا بحب المقدمات جدا , ولكن خلينا ندخل في الموضوع على طول ونعمل برنامج كدا صغير يحول الملفات RTF الى HTML وسنستخدم برنامج الوورد في ذلك ان شاء الله ...
في البداية قم بعمل Add Reference بالضغط بالزرار اليمين للماوس على كلمة References الموجوده في الـ Solution Explorer ثم الضغط على Add Reference.
ومن نافذة Add Reference بما انني استخدم Word 10 الموجود ضمن أوفيس اكس بي , سأقوم باختيار Microsoft Word 10.0 Object Library واضغط على Select وبعد ذلك اضغط OK.
ماعلينا الآن هو كتابة الكود :
اول شئ نقوم به هو عمل أوبجكت من Word.ApplicationClass عن طريق الكود التالي , وهذا مشابه كأننا نقوم بفتح برنامج الوورد نفسه , ان جاز التعبير ::
Word.ApplicationClass myApplication = new Word.ApplicationClass();
قم الآن بتعريف متغير من نوع object وضع به عنوان الملف الذي تود فتحه , بهذا الشكل ::
object myRTF = @"F:\Documents\myFile.rtf";
وبعد ذلك وبطريقه منطقيه يجب علينا ان نقوم بفتح الملف ( المستند ) اولا وذلك من خلال الداله Open , وهذا كأننا نقوم بفتح برنامج الوورد ونضغط على القائمه File ونقوم بعمل Open لاى ملف لدينا ....
الا اننا نكتشف الآن ان الداله Open تريد حوالي 15 براماتر :blink: !! فمن اين نأتي لها بكل هذه الـ براماترز , عموما لا تنزعج فانت غير مجبر على تمرير جميع البراماترز لهذه الداله ولا تنسى ان هذه الداله مخصصه اصلا لبرنامج الوورد ولم تصمم من اجل احتياجاتك انت فقط لذلك فهى مليئة بالبراماترز التي ربما يحتاجها برنامج الوورد شخصيا ولا نحتاجها نحن الآن في هذا البرنامج ولكن ربما سنحتاجها في برامج أخرى في يوم من الأيام ... , ولتحل هذه المشكله قم بعمل أوبجكت لـ Type.Missing فهو يستطيع حل هذا النوع من المشاكل ::
object _missing = Type.Missing;
بعد ذلك يمكننا ان نقوم بكتابة الداله Open بهذا الشكل وتمرير البارامترز بالـ Reference ::
myApplication.Documents.Open(ref myRTF,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing);
اعتقد ان مبرمجين فيجوال بيسيك دوت نت يمكنهم كتابة نفس الداله السابقه بشكل افضل من ذلك :rolleyes: .
المهم خلينا في السي شارب بتاعتنا ,
نحن لدينا بالفعل مستند مفتوح الآن , كل ماعلينا فعله هو استخدام الداله Save As لنحفظ الملف باى امتداد نريده , فقط قم بعمل متغير من نوع object لنسند له الامتداد الجديد الذي نريده للملف ( الامتداد الذي سنختاره هو HTML ويمكنك تغييره حسب متطلباتك ) , انظر الكود ::
object htmlFormat = Word.WdSaveFormat.wdFormatFilteredHTML;
قم بعمل ايضا أوبجكت لنضع فيه عنوان الملف الـ HTML بعد عملية التحويل , انظر الكود ::
object myHTML = @"F:\Documents\myFile.html";
بعد ذلك نقوم بكتابة الداله Save As بهذا الشكل ::
myApplication.ActiveDocument.SaveAs(ref myHTML,ref htmlFormat ,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing);
وفي النهاية يجب علينا طبعا اغلاق المستندات المفتوحه من خلال الداله Quit وتمرير اليها 3 متغيرات _missing انظر الكود ::
myApplication.Quit(ref _missing,ref _missing,ref _missing);
ومره اخرى نحن نمرر متغيرات _missing لاننا لا نريد الاستفاده من جميع المميزات الموجوده في الداله التي ربما يحتاجها برنامج الوورد نفسه في حالات معينه , ففي الداله Quit مثلا لانريد سؤال المستخدم في برنامجنا هذا ان كان يريد حفظ التغيرات ام لا ؟! ولكن ربما برنامج الوورد يحتاج ان يسئله عن ذلك .. ممكن تسألني دلوقتي لماذا لم نمرر جميع البراماترز بقيمها الصحيحه كما تحتاجها الدوال ؟ أرد عليك وأقول ان هذا امر يرجع لك انت , ولكن ان اردت تمرير كل البراماترز بطريقه صحيحه فهذا سيحتاج منك أكواد أكثر ونحن في غنى عنها في برنامجنا البسيط هذا ولكن ممكن نحتاجها في برامج أخرى.
ملحوظه : يوجد دوال مصممه لتأخذ 30 براماتر !!
عموما بهذا يصبح الكود كاملا بهذا الشكل ::
object myRTF = @"F:\Documents\myFile.rtf"; object myHTML = @"F:\Documents\myFile.html"; object _missing = Type.Missing; object htmlFormat = Word.WdSaveFormat.wdFormatFilteredHTML; Word.ApplicationClass myApplication = new Word.ApplicationClass(); myApplication.Documents.Open(ref myRTF,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing); myApplication.ActiveDocument.SaveAs(ref myHTML,ref htmlFormat ,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing,ref _missing); myApplication.Quit(ref _missing,ref _missing,ref _missing);
انتهينا الآن , وبمثل هذه الطريقه يمكنك الاتصال بباقي برامج الأوفيس.

