Name of the blog

Short description of the blog

Ár kalkulátor - Excel AddIn


Feladat:


Kaptam egy felkérést, hogy az ügyfél saját funkciókkal szeretné kiegészíteni az egyik Excel-es munkafüzetét.

Gyakorlatilag egy olyan szoftvert kellett megvalósítani, ami az egyik munkalapról felolvassa a termékeket, azok tulajdonságait és egységárát, majd biztosít egy felületet, amelyen keresztül a felhasználó a megadott paraméterek alapján beszúrja az adatokat egy másik munkalapra.

Annak ellenére, hogy nagyon kevesen tudnak az AddIn -ek által nyújtott lehetőségekről (nincs túl nagy reklámja a Microsoft részéről sem), mostanában egyre több úgyfelet érdekelnek hasonló megoldások. 


Néhány érv, ami miatt érdemes AddIn-t használni:


  • A teljes Excel rendelkezésre áll az összes funkcióval, nem kell az alap funkciókat programozni, bármelyik elérhető a CLR-en keresztül is.
  • A fejlesztési idő nagyon lerövidül, hiszen csak a fő feladattal kell foglalkozni, a keretet az Office biztosítja.
  • Egyszer kell telepíteni, onnantól kezdve minden Excel indításkor elérhető, nincs szükség külön alkalmazás futtatására, kézi betöltésre.
  • A sablonos, hosszú ideig tartó, ismétlődő, "kézzel végzett" munkák nagy részét kiválóan lehet vele automatizálni.


Na de ennyi bevezető elég is, nézzük nagyvonalakban a feladatot:


  • Tervezzük meg a menüt a kért funkciókkal: Nem sok egyszerűbb dolgot tudok elképzelni a .NET fejlesztés területén, mint a Ribbon menü létrehozását. A Visual Studio-ban van beépített sablon, ami ráadásul egy varázsló, tehát kapunk egy grafikus felületet, amin keresztül a WinForms-nál már jól ismert módszerekkel elkészíthetjük a Ribbon menüt (az említett sablon és a komplett Office fejlesztés a Visul Studio Express-ben nem támogatott):


  • Tervezzük meg a panelt, ami beolvassa a tétellistát: Ugyan alapból nincsenek becsatolva a Windows Form-os DLL-ek az Office projektbe, de senki nem tiltotta, hogy felvegyük őket. Amint ez megtörtént, hirtelen a teljes WinForms rendelkezésre áll, tehát bármilyen ablakot, vezérlőt létrehozhatunk, amit egyébként egy sima asztali alkalmazásnál is megtehetnénk. Ha már Excel, maradjunk a zöld színnél :), készítsünk egy UserControl-t.

  • Joggal merülhet fel a kérdés, hogy miért kell ide UserControl, egy sima Form-al is meg lehetne csinálni. A válasz az, hogy ugyan egy Form is megfelelő lenne, egy Excel panel mégiscsak sokkal látványosabb, dokkolható és könnyen kezelhető. Excel panelt pedig UserControl-ból tudunk készíteni. Sokkal jobban összeolvad az Excel-el:


  • Sokkal jobb megoldás, mint egy modális ablak, ami állandóan a felhasználó szeme előtt van és zavarja a munkában.


Néhány funkció, amit még meg kellett valósítani:


  • Tételek állapotának beállítása: Minden sorra vonatkozóan lehetőséget kell biztosítani, hogy a felhasználó egy combobox-ból kiválassza a tétel állapotát. Az Excel-ben szerencsére van lehetőség Combobox-ot készíteni, az Adatok menü Érvényesítés gombjának segítségével. Ennek az adatforrása valamelyik munkalapon van, de nem szerencsés, ha a felhasználó ezt módosítani tudja. Mi a megoldás? Rejtsük el a munkalapot. Viszont a felhasználó még mindíg elő tudja csalogatni a Felfedés gombbal. Megoldás? Rejtsük el "nagyon". .NET kódból van egy olyan beállítási lehetőség a munkalap láthatóságára, hogy Excel.XlSheetVisibility.xlSheetVeryHidden. Épp erre van szükségünk, a felhasználó nem lesz képes előcsalogatni ezt a munkalapot, így az adatforrás védve marad.
  • Tételek sorának formázása az állapot alapján: Annak ellenére, hogy van rá lehetőség, nem kell mindent .NET-ből megoldani. Az Excel-es feltételes formázás kiváló erre a feladatra.
  • Feltételes exportálás PDF-be: Biztonyos állapotú tételekről listát kellett készíteni, majd az eredményt PDF-be exportálni. Az adatokat felolvastam a munkalapról .NET-es osztályokba, majd Linq-val könnyedén kiszűrtem azokat, amiket exportálni kell. Generáltam egy átmeneti munkafüzetet a .NET-ből, majd elvégeztem az exportálást.


Egy kép az elkészült szoftverről: