PDA

View Full Version : مقاله: ايجاد Office 2007 Com Add-ins



reza1944
یک شنبه 18 مرداد 1388, 02:44 صبح
به نام خدا


موضوع : ساخت Com Add ins براي Office 2007

نياز به : VS2008 و Office 2007


درجه: متوسط به بالا

منابع: MSDN و وب سايت Microsoft و تجربيات فردي خودم




بخشها:

آشنايي
ايجاد يك پروژه
ايجاد محيط ribbon (visual designer)
مثال و توضيحات در مورد آن
خصوصيات propertis
ايجاد در محيط ribbon (XML)
آشنايي با تگ هاي XML
مثال XML و توضيحات در مورد آن



آشنايي:
بعد از مدتها وقت پيدا كردم تا يك مطلب شايد مفيد براي بچه هاي اين فروم بنويسم شايد تا الان در مورد vs2008 و قسمت آفيس يا ايجاد يك Add in بحثهاي كمي مطرح شده باشه كه در اين بخش ميخوام در مورد اين قسمت در vb بيشتر آشنا بشيم.
COM Add-in: مي توان گفت اين قسمت همان پلاگين براي آفيس است يعني چيزهاي كه به آفيس اضافه شده و كارهاي بيشتري را انجام ميدهند نمونه آن Office Classic menu را نام برد يا Export Xps , PDF و ...
اين آموزش با Visval Studio 2008 و در موردOffice 2007 داده شده است. اين نسخه از آفيس و ويژوال را اگر بر روي سيستم خود نصب نكرده ايد نصب كنيد و ادامه آموزش را بخوانيد.
با استفاده از اين قسمت مي تونيد براي مايكروسافت آفيس add in هاي شخصي بنويسيد و از اونها استفاده كنيد.
ايجاد يك پروژه:
ويژوال استوديو رو اجرا كنيد و بعد به قسمت آفيس برويد
http://www.img98.com/images/0ozvqnmm1erhcywdgynp.jpg

حالا ميتونيد هر نوع فايل آفيس ، قالب و add_in براي آفيس 2003 و آفيس 2007 را درست كنيد.
در مورد add_in براي ورد 2007 صحبت ميكنيم و چگونگي درست كردن آن و استفاده از آن را توضيح ميدهم.
با انتخاب گزينه word 2007 add-in بعد از انتخاب نام پروژه و محل ذخيره آن وارد محيط زير ميشويم.
http://www.img98.com/images/bkr341obrju192ue5999.jpg

در ايجاد كلاسي به نام thisaddin وجود دارد كه داري رويدادهاي است دو رويدادي كه وجود دارد يكي startup يا لحظه شروع كار addin و ديگري shutdown يا لحظه خروج از addin شما است.
در قسمت مشخص شده روي پروژه كليك راست كرده و از منوي add گزينه new item را انتخاب ميكنيم.

در اين قسمت مي توانيد يك كلاس يك ماژول و حتي يك فروم را هم به پروژه اضافه كنيد اما قسمت مهم اين بخش office است كه دو ايتم در آن موجود مي باشد.
http://www.img98.com/images/q1304n9gtv73hd7hury.jpg



يكي از انها طراحي ribbon افيس در محيط گرافيكي و نوشتن دستورات آن يكي ديگر هم طراحي در محيط XML و نوشتن دستورات آن كه در اين قسمت با محيط گرافيكي آن آشنا ميشويد.

ايجاد محيط ribbon (visual designer):
روي ribbon (visual designer) كليك كنيد تا محيط ريبون آفيس به نمايش در بيايد.
در قسمت ابزار ( (toolboxبرنامه يك تب به نام office ribbon controls اضافه مي شود كه سري از آتمها دكمه و combo box و ... براي كار اضافه شده است .

http://www.img98.com/images/4n2umn82k6vspdfkfpff.jpg


با كليك راست بر روي قسمت ريبون مي توانيد tab اضافه كنيد و از قسمت ابزار ها هم ميتوانيد گروپ و غيره را اصافه كنيد. با كليك بر روي دكمه آفيس وي توانيد يك دكمه به ليست منوها اضافه كنيد .اگر پرو‍ژه را اجرا كنيد محيط ورد براي شما باز شده و تمامي تب ها و منو هاي اضافه شده را در ان ببينيد. يعني شما يك پلاگين (addin) براي آفيس درست كرده ايد.
با اين شروع و توضيحات داده شده با يك مثال بقيه قسمتها را نيز توضيح ميدهم .
مثال و توضيحات در مورد آن:
مثال: با نصب پلاگين در ورد يك مي توان تمامي عكسهاي يك مسير را جستجو و به در يكtaskpan قرار داده با انتخاب و كليك بر روي عكس مورد نظر عكس به محيط ورد وارد شود و نوشته اي هم در محيط نوشته شود.
يك پروژه جديد را اضافه كرده و واردمحيط طراحي ميشويم. ليبل گروپ را به image list تغيير مي دهيم سه دكمه (يكي (togglebuttonبراي انتخاب عكسها و يكي براي پاك كردن ليست و ديگري براي نمايش task pan در group اضافه ميكنيم.
http://www.img98.com/images/o1clcfgicxvyxccme4px.jpg

قسمتي كه در اينجا وجود دارد انتخاب آيكن براي دكمه ها است. يكي از راههاي ان انتخاب تصوير موردنر خود براي دكمه است و ديگري در قسمت خصوصيات دكمه يك خصوصيت با نام OfficeImageId وجود دارد كه ميتوانيد از ايكنهاي خود آفيس استفاده كنيد. روش استفاده از آن بايد از وب سايت شركت مايكروسافت Office2007ControlIDs را دانلود كنيد و نام تمامي كنترل ها در آن وجود دارد و نام تصوير مورد نظر را در خصوصيت بنويسيد تا نمايش داده شود. مثال مي خواهيم براي دكمه imports از ايكن open خود افيس استفاده كنيم پس در قسمت OfficeImageId مينويسيم FileOpen

http://www.img98.com/images/un0d8z8twlpmwz3fjglp.jpg

خصوصيات propertis:
ميبينم كه عكس دكمه import به عكس open ورد تغيير كرد
خصوصيت ديگر key tip كه براي shortcut key ميتوانيم از آن استفاده كنيم. اين قسمت بيشتر از سه حرف را نمي تواند قبول كند.
Screen tip هم عنوان و supertip هم براي نوشتن توضيحات يك tooltip دو خصوصيت ديگر است .
Description هم براي نوشيتن توضيحات و نمايش آن در بخش منوي آفيس است.
خصوصيت Control size هم براي نمايش كنترل و آيكن آن در دو نمايي كوچك و بزرگ است.
Position خصوصيت ديگر است كه تعيين قرار گيري هر يك از اشيا را مشخص ميكند كه در مورد آن حرف ميزنم.
بقيه خصويات هم مانند آشنا است و نيازي به توضيح ندارد.
مي خواهيم task pan را طراحي كنيم پس يك user control به برنامه اضافه ميكنم و يك list box و picturebox و دكمه import و clear و insertرا به آن اضافه ميكنيم.


برسي كدهاي user control

Dim a As New Word.Global
اين دستور نقش همهي را دارد چون ما ميتوانيم با اين دستور با محيط كار ورد ارتباط برقرار كنيم
a.Application.Selection.InlineShapes.AddPicture(pp ic)

اين دستور هم باعث ميشود كه عكس مورد نظر در محل فعلي درج شود . اگز بخواهيم با خود محيط ورد بيشتر ارتباط برقرار كرده و از تمام امكانات آن در محيط كد نويسي استفاده كنيم a.Applicationدستوري است كه ميتوانيد با محيط و تغيير يك فايل ورد مورد استفاده قرار گيرد. ايجاد هدر و فودر و نوشتن در محيط ورد و تمامي كارها كه در محيط ورد انجام ميشود در اين تابع Word.Global و Application كنجانده شده و ميتوان از آن استفاده كرد.


برسي كدهاي Ribbon1


Dim tl As Microsoft.Office.Tools.CustomTaskPane
Dim tpuc As New UserControl1

دستور اول براي تعريف يك تسك پنل است. خط بعدي نيز يك متغيير از نوع UserControl1 را ايجاد ميكنيم.





دستورات زير در هنگام لود ريبون اجرا ميشوند.



tl = Globals.ThisAddIn.CustomTaskPanes.Add(tpuc, "Image List")



tl.DockPosition = Microsoft.Office.Core.MsoCTPDockPosition.msoCTPDoc kPositionLeft



AddHandler tl.VisibleChanged, AddressOf HandleVisibleChanged


دستور نخست يك تسك پنل را با UserControl1 يا متغيير tpuc ايجاد كرده در tl قرار ميدهدو dock پنل در سمت چپ ورد قرار ميگيرد و نمايش و عدم نمايش پنل نيز در HandleVisibleChanged برسي ميشود.
بقيه دستورات قابل فهم و ساده ميباشند و در پروژه موجود ميباشد.
براي درست كردن تسك پنل حتما بايد يك UserControl1 را ايجاد كنيم.
مي خواهيم در اين بخش با Position يك شي بيشتر آشنا بشيم.
Position يك شي يعني قرار گرفتن آن تب در كدام قسمت ريبون و يا قرار گرفتن گروپ در كدام تب ريبون و يا قرار گرفتن يك دكمه در كدام قسمت يك گروپ ريبون.
به طور مثال ميخواميم تب image insert را كi ايجاد كردهايم قبل از تب insert ورد قرار دهيم براي اين كار خصوصيت Position تب image insert را باز كرده PositionType را برابر با BeforeOfficeId قرار داده و خصوصيت officeid كه در زير مجموعه براي ما ظاهر ميشود برابر با TabInsert قرار ميدهيم.
باز هم تكرار ميكنم كه تمام ايدي ها در فايل Office2007ControlIDs وجود دارد كه از سايت مايكروسافت قابل دانلود است.
http://www.microsoft.com/downloads/details.aspx?familyid=4329D9E9-4D11-46A5-898D-23E4F331E9AE&displaylang=en

http://www.img98.com/images/yqoghtl5dnqo0d6bn7n.jpg


حال با اجراي مجدد ميبينيم تب كه ايجاد كرده ايم قبل از تب insert آفيس قرار ميگيرد.
اگر هم بخواهيم به جر تب كه درست كرده ايم تمامي تب هاي آفيس حذف شوند مي توانيم خصوصيت StartFromScratch رابرابر با true قرار دهيد.
DialogBoxLauncher: اين قسمت دكمه اي است كه در هر يك از گروپ ها ميتواند به نمايش در بيايد. براي نمايش اين دكمه گروپ را انتخاب و AddDialogBoxLauncher را فعال كنيد براي عدم نمايش آن RemoveDialogBoxLauncher را انتخاب كنيد. يك گروپ هم به جز رويداد كليك DialogBoxLauncher هيچ رويداد ديگري ندارد و ميتوانيد براي اين دكمه كد نويسي كنيد

http://www.img98.com/images/ekuht4j8spmt7iyw1r9y.jpg


با توضيحات داده شده حالا مي توانيد يك addin مثل office class menu براي آفيس بنويسيد و از آن استفاده كنيد.




ايجاد در محيط ribbon (XML):
قسمت دوم استفاده از XML :
من تا سال قبل XML را بلد نبودم و اون رو به جز يك سري دستورات عجق وجق نميدونستم و حتي نميدونستم بفهمم كه مفهوم اونها چيه تا دي ماه بود كه در تاپيك سي شارپ با مبحث WPF آشنا شدم و XML رو تا حدود هاي ياد گرفتم.
XML بسيار آسون تر از اون چيزي كه ميبيينم. دستورات آون راحته براي يادگيري بهتر ميتونيد تاپيك wpf سي شارپ رو نگاه بندازيد و من در مورد اون حرف نميزنم.

http://www.img98.com/images/1wi38bpljf0n4ksh0ib7.jpg

حال اگر اين بار ribbon (XML) رو انتخاب كنيم دو فايل يكي XML براي طراحي ريبون و محيط مورد نظرمون و ديگري .vb كد نويسي برايقسمتهايي آن است.
آشنايي با تگ هاي XML :
محيط XML براي طراحي بازتر و مي توان كارهاي جديد تر را در اين قسمت هم انجام داد از قبيل اضافه كردن qat يا همان ابزار دسترسي سريع (quick access toolbar).

http://www.img98.com/images/2bs4ydsx6cfn0kgxgq1s.jpg





<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon>


</ribbon>

ميتوانيد تگ هاي مورد نظر رو در بين تگ ribbon وارد كنيد








<tabs>
<tab idMso="TabAddIns">
<group id="MyGroup"
label="My Group">
</group>
</tab>
</tabs>


تگ زير را در نظر بگيريد تگ tabs براي قرار دادن تب هاي مختلف در آن است.
تگ داخلي يك تب تعريف و در تگ داخلي تر هم يك گروپ باكس تعريف شده است اما براي نمايش ريبون در هنگام اجرا بايد دستور زير را در داخل ThisAddIn.vb كپي كنيد.


Protected Overrides Function CreateRibbonExtensibilityObject() As Microsoft.Office.Core.IRibbonExtensibility
Return New Ribbon1()
End Function


Ribbon1 نام ريبون از نوع XML است كه به بروژه اضافه كرده ايد.


مثال XML و توضيحات در مورد آن:


حال يك مثال كمي بزرگتر و پيچيده تر را برسي ميكنيم.


<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="Ribbon_Load">
<ribbon startFromScratch="true">
<qat>
<sharedControls>
<button id="myqatSample" />
</sharedControls>
</qat>
<officeMenu>
<button id="SampleGrpmnu" label="Sample" imageMso="Cut"
onAction="SampleGrp_Click" />
</officeMenu>
<tabs>
<tab id="TabSmple" label="SampleTab">
<group id="MyGroup" label="My Group">
<button id="SampleGrp" label="Sample" imageMso="Cut"
onAction="SampleGrp_Click" size="large" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

اين يك مثال جالب است و از همه نوع تگي در آن وجود دارد
Qat كه در بالا توضيح داده شد زماني نمايش داده ميشود كه startFromScratch داراي مقدار ture باشد. تگ به اشتراك گذاري كنترل هاي qat و در تگ بعدي اضافه كردن يك دكمه.

تگ officeMenu يك تگ براي قرار دادن كنترل مورد نظر در قسمت منوي آفيس قرار ميگيرد يك دكمه تعريف كه با كليك بر روي آن رويداد SampleGrp.Click اتفاق مي افتد. imageMso برابر با cut است كه آيكن cut آفيس به نمايش در ميآيد.

يك تب و يك گروپ نيز تعريف شده است و در داخل گروپ يك يك دكمه تعريف كه با كليك بر روي آن رويداد SampleGrp.Click اتفاق مي افتد. imageMso برابر با cut است كه آيكن cut آفيس به نمايش در ميآيد. اندازه آن بزرگ انتخاب شده است.

با اجرا اين تگ چنين چيزي را مشاهده ميكنيد.





http://www.img98.com/images/mfmgev66l9n3eh8mecqt.jpg


حال اگر بخواهيم براي onaction كدي بنويسيم بايد آن را در قسمت ribbon1.vb وارد ميكنيم.

حال يه اين كد نگاه كنيد:



Public Sub SampleGrp_Click(ByVal control As Microsoft.Office.Core.IRibbonControl)
MsgBox(control.Id + "Click!")


End Sub










بي شك قدرت مايكروسافت ويژوال استوديو براي درست كردن Com Add ins بيشتر از آن چيزي است كه در اين مطلب گنجانده شده است اين مطلب تنها بخش كوچكي ازآن است.

اگر مطلب مورد نظر داراي كمي و كاستي هاي هم هست از همه برو بچهاي فرم برنامه نويس معضرت مي خواهم. توانم را به كار بردم تا مطلبي جمع و جور و در حد نورمال را آماده كنم تا تمامي شما از آن استفاده كنيد .




ms-help://MS.MSDNQTR.v90.en/odc_office2007_ta/html/a4fd6d18-d4a8-4e64-bd89-f437208573d3.htm




ms-help://MS.MSDNQTR.v90.en/odc_office2007_ta/html/6b904f55-525f-4520-9b81-a017db65657b.htm




ms-help://MS.MSDNQTR.v90.en/odc_office2007_ta/html/a16c7df5-93f3-4920-baa8-7b7290794c15.htm




ms-help://MS.MSDNQTR.v90.en/odc_ac2007_ta/html/1a944fa3-4eb1-4005-917b-81278e02d2be.htm













امضاء



امضا ندارم اثر انگشت ميزنم Reza1944

M.Bigdeli
سه شنبه 05 اردیبهشت 1391, 13:53 عصر
آقا دمت گرم
خيلي حال دادي
ايشاا... باهم بريم تايلند :تشویق: