Kezdőoldal > .NET, C#, Office > Word Dokumentum kiegészítése

Word Dokumentum kiegészítése

2012. január 24. kedd Hozzászólás Go to comments

Feladat ismertetése

Ebben a feladatban egy Word dokumentumot fogunk létrehozni, melynek utána a funkcionalitását fogjuk kiegészíteni. A Word-ünk Ribbonján elhelyezünk egy saját tab fület, azon belül két editboxot és egy gombot. Amikor a felhasználó megnyomja a gombot, akkor egy véletlen számot generálunk a megfelelő (meghatározott) tartományban a számára, és megformázzuk a kiírt szöveget.

Eredmény képekben

image

Dokumentum elkészítése

Indítsuk el a Visual Studio 2010 Ultimate változatát! Kattintsunk File -> New -> Project… menüpontra, majd a megjelenő ablakban állítsuk be az alábbiakat:

A jobb oldali menüből válasszuk ki a Visual C# elemet, azon belül is az Office -> 2010 alkalmazást! A template listából válasszuk ki a Word 2010 Document-et! Adjuk neki az ExtendedFuncWordDocument projekt nevet, majd kattintsunk az OK gombra (Figyeljünk arra, hogy a .NET Framework 4 legyen kiválasztva! A feladatokat meglehet ugyan oldani .NET 3.5 el is csak sokkal körülményesebb módon!).

image

Jogosan merül fel a kérdés, hogy mi a különbség a Word 2010 Document és a Word 2010 Add-in között. Nos, a dokument csak egy dokumentum funkcionalitását egészíti ki, míg az add-in magát a Word-öt egészíti ki, abban az esetben is, ha arra a funkcióra az adott dokumentum elkészítésénél nincs szükség. Az pedig gyakori eset, hogy csak egy speciális dokumentumot szeretnénk készíteni, így erre a feladatra a Word 2010 document lesz a legjobb megoldás.

Az Add-in és a Word Document fejlesztése hasonló alapokon nyugszik. Leginkább az Add-in telepítésénél és használatában van különbség.

Ezt követően megjelenik a Visual Studio Tools for Office Project Wizard, ahol beállíthatjuk, hogy új Word dokumentumot vagy már meglévő dokumentumot szeretnénk kiegészíteni. Maradjunk most az alapbeállításoknál, ahol új dokumentumot hozunk létre, aminek a formátuma docx lesz.

image

A Visual Studio ekkor betölt egy Word dokumentumot a szerkesztő mezőbe. Itt elérhetjük a Word szerkesztési funkciójának nagy részét tehát könnyen szerkeszthetünk egy összetettebb Word dokumentumot is a Visual Studio–n belül.

image

A Solution Explorerben található egy ThisDocument.cs fájl (Jobb klikk View Code). Ebben a fájlban alapesetben két esemény van: az egyik a StartUp amely a nevéből is adódóan akkor fut le, amikor elindítjuk a dokumentumot, a másik pedig a ShutDown, ami a dokumentum bezárásakor fut le. A teszt kedvéért a StartUp eseményhez írjuk a következőt:

MessageBox.Show("Hello Office World");

Ekkor, ha elindítjuk az alkalmazást (F5), akkor egy Word dokumentum fog betöltődni, és a betöltődést követően az alábbi ablak fog felugrani:

image

Látható tehát, hogy milyen egyszerűen tudunk a dokumentum indulására és bezárására feliratkozni. Konkrét funkcióval viszont még nem láttuk el ez a dokumentumot. Az előző MessageBox-os kódsort töröljük és vágjunk bele a saját funkciónk megírásába!

Első körben a Word Ribbon menüjéhez szeretnénk hozzáadni saját funkciókat. A Solution Explorerben kattintsunk jobb egérgombbal a projektre és az Add -> New Item –re, majd válasszuk ki a megjelenő ablakban a Ribbon (Visual Designer) –t, majd kattintsunk az Add gombra.

image

A Ribbon (Visual Designer) és a Ribbon (XML) között az a különbség, hogy a dizájnérnél egy Visual Studioba épített UI dizájnért kapunk, XML-nél pedig XML elementekkel fogalmazhatjuk meg hogy a Ribbon felhasználói felülete milyen legyen. Utóbbi esetben manuálisan is be tudjuk tölteni a Ribbon felületét (Akár dinamikusan is!).

Sokak inkább a manuális XML szerkesztésre esküsznek, hisz sokkal inkább testreszabhatóbb, mint a Visual Designer, de cserébe hosszadalmasabb vele a munkánk.

A Visual Studio betölti a Ribbon Designer-t. A Toolboxon a ribbonhoz tartozó kontrolokat találjuk. Látható, hogy a Windows Forms kontroljaihoz képest viszonylag szegényes a felhozatal, de az alap feladatokra tökéletesen használhatók ezek a vezérlők.

Készítsük el az alábbi felhasználói felületet:

image

A Ribbon Tabnak a Label tulajdonságának adjuk meg a „Saját funkció” szöveget, a benne található Ribbon Groupnak a Label -jét állítsuk át „Véletlen számra”.

A Ribbon Groupba dobjunk fel Ribbon Box-ot, amelynek a BoxStyle tulajdonságát állítsuk be Vertical-ra. Ebbe a Ribbon Box-ba helyezzünk el két EditBox-ot, az egyik neve ebMin a másiké ebMax. Az ebMin editbox Label-je értelemszerűen a Minimum, az ebMax Label-je pedig a Maximum szöveget tartalmazza. Az editboxoknak adjunk értékeket is! A minimum legyen értelemszerűen 1, a Maximum pedig 100 (Tervező nézetben ez nem fog megjelenni!).

A Ribbon Box mellé helyezzünk fel egy Ribbon Button-t! Ennek a gombnak legyen a neve a btnDice, a Label-je pedig az „Adj egy számot” szöveg legyen, a ControlSize tulajdonságát pedig állítsuk át RibbonControlSizeLarge-ra! Célszerű képet is megadni a számára. Töltsük le például ezt a képet, és tallózzuk ki!

A felhasználói felületünk elkészült, itt az ideje az üzleti logikát is megírnunk, majd kattintsunk kétszer a btnDice-ra, ekkor betöltődik a gomb alapértelmezett eseményvezérlője.

Mielőtt belekezdenénk az eseményvezérlő megírásába, még 2 apró dolgot meg kell tennünk. Egyfelől be kell töltenünk a Microsoft.Office.Interop.Word névteret. Mivel most Word dokumentumot készítünk, ezért a Visual Studio eleve betöltötte ezt az assembly-t, csak a usingok közé kell áthelyeznünk.

(Adtunk számára egy alias-t is, hogy könnyebben tudjuk majd felhasználni.)

using Word = Microsoft.Office.Interop.Word;

Ezen kívül készítünk a Random osztályból egy példányt,ezt a kódsort most a konstruktor elé helyezzük el:

Random rnd = new Random();

Ezt követően térjünk vissza a btnDice Click eseményéhez és írjuk be a következő sorokat:

Word.Range currentRange = Globals.ThisDocument.Application.Selection.Range;

 

int min = Convert.ToInt32(ebMin.Text);

int max = Convert.ToInt32(ebMax.Text);

currentRange.Text = rnd.Next(min, max).ToString();

Az első sornál lekérdezzük azt, hogy hol van most a kurzor (CurrentRange). A következő kétimage sorban az editboxokba írt szövegeket alakítjuk át integer-é (látható, hogy nincs levédve az alkalmazás a helytelen adatbevitel ellen. Figyeljünk erre!), majd az utolsó sorban a random osztály Next metódusát hívjuk meg, ahol megadjuk a számára, hogy mi az a minimum és maximum szám, amelyek között megadhatja számunkra a véletlen számot. Ezt a számot kiíratjuk a jelenlegi pozícióba.

Ha elindítjuk az alkalmazást (F5), akkor az eredmény kb. a következő lesz:

Ez már egész kellemes eredmény. Annyit tegyünk még meg, hogy formázzuk meg a kiírt szöveget! Az előzőleg beírt kódsor alá írjuk be az alább kódsorokat:

currentRange.Font.TextColor.RGB = 255;

currentRange.Font.Bold = 1;

currentRange.Font.Italic = 1;

Az első sorban beállítjuk a szöveg színét (RGB kóddal), majd mind a félkövér, mind a dőlt tulajdonságot igazra állítjuk (1).

Indítsuk el az alkalmazást, és most az eredmény valami hasonló lesz:

image

A feladatunkat immár elvégeztük, a funkciók működnek. Érdemes megemlíteni egy érdekességet: ha megnyitjuk a Projektünk mappáját (Solution Explorer -> Jobb klikk -> Open Folder In Windows Explorer), és belépünk a \bin\Debug mappába, akkor ott találjuk a Word dokumentumot a Projektünkkel megegyező nevű DLL-t (Ez a dll tartalmazza az egyedi üzlet logikánkat).

image

Ha ezt a dokumentumot publikálni szeretnénk, tulajdonképpen nincs más dolgunk, mint egy egyszerű fájlmásolást végrehajtani.

Ezen a rövid példán keresztül is látható, hogy mennyire egyszerű C#-ban egy saját funkciókkal bíró Word dokumentumot létrehozni, és ezzel bizonyos esetekben a hatékonyságot növelni.

A teljes kód:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Microsoft.Office.Tools.Ribbon;

using Word = Microsoft.Office.Interop.Word;

 

namespace ExtendedFuncWordDocument

{

    public partial class MyRibbon

    {

        Random rnd = new Random();

        private void MyRibbon_Load(object sender, RibbonUIEventArgs e)

        {

        }

 

        private void btnDice_Click(object sender, RibbonControlEventArgs e)

        {

           Word.Range currentRange = Globals.ThisDocument.Application.Selection.Range;

 

            int min = Convert.ToInt32(ebMin.Text);

            int max = Convert.ToInt32(ebMax.Text);

            currentRange.Text = rnd.Next(min, max).ToString();

 

            currentRange.Font.TextColor.RGB = 255;

            currentRange.Font.Bold = 1;

            currentRange.Font.Italic = 1;

        }

    }

}

Függelék

Bizonyos esetekben, amikor elindítjuk a Word-öt, a bővítményünk nem töltődik be, csak egyszerűen elindul a Word. Előfordulhat olykor az is, hogy maga a Template-et sem engedi betölteni, ilyenkor az alábbi lépésekkel lehet elhárítani a hibát:

Indítsunk el egy Word alkalmazást. File -> Options -> Add-Ins. Az ablak alján válasszuk ki a COM Add-ins –t és kattintsunk a Go gombra!

image

A megjelenő COM Add-Ins ablakban a Visual Studio Tools for Office Design-Time Adapter for Word legyen bepipálva (Értelemszerűen Excelnél vagy a többi Office alkalmazásnál szintén)!

image

Másik gyakori eset, amikor elindítjuk a bővítményünket, de nem töltődik be. Ez több okból is előfordulhat, de a leggyakoribb oka az, hogy történt egy kivétel és az Office az adott bővítményt letiltotta. Ekkor válasszuk ki a File menü -> Options -> Add-ins menüpontot, a Manage elemek közül pedig a Disabled Items-et majd kattintsunk a Go gombra. A megjelenő ablakban válasszuk ki (ha létezik) azt az elemet, ami le van tiltva és kattintsunk az Enable gombra (Célszerű ezután újraindítani a Word-öt)!

image

Ez a két leggyakoribb jelenség, de előfordulhat, hogy fejlesztés során mással is találkozhatunk. Bizonyos gépeken a Visual Studio 2010 Service Packja okozott problémát, máshol pedig a biztonsági beállítások. További hibajelenségekre választ az MSDN Office Development fórumán lehet találni.

Advertisements
Kategóriák:.NET, C#, Office Címke: , ,
  1. Még nincs hozzászólás.
  1. No trackbacks yet.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

%d blogger ezt kedveli: