C# - Excel függvények futtatása, telepített Excel nyelve

Excel programozása 3. rész

forráskód letöltése
Sorozatunk mostani részében azt vizsgáljuk, hogy miként tudunk az egyes cellákba nem csak konstans értékeket írni, hanem tetszőleges Excel függvényeket is elhelyezni, valamint a függvény által számított értéket programból kiolvasni.
Vizsgálódásunk további tárgya az Excel nyelvének lekérdezése. Erre azért is szükségünk lesz, mert például a SUM függvényt a magyar nyelvű Excel-be már SZUM függvényként kell írni. Így a nyelv ismerete fontos, ha fel akarjuk készíteni alkalmazásunkat többféle Excel verzió kezelésére.
Létrehozunk egy új Excel munkalapot a már szokásos módon és egyik oszlopába számokat írunk.
    private void button1_Click(object sender, System.EventArgs e)
    {
      for (int i=1; i<10; i++)
      {
        ws.Cells[i, 1] = i*12.34;
      }    
A feladatunk az lesz, hogy ezen oszlop számait összegezzük az Excel SUM függvényével és az összeget jelenítsük meg saját alkalmazásunkban is. Ehhez szükségünk lesz a Range objektumra, mely most azt a cellát fogja leírni, ahová az Excel függvényt szúrjuk be.
      Excel.Range er = (Excel.Range)ws.Cells[10, 1];      
Mielőtt elvégeznénk a függvény beszúrását egy cellába, el kell döntenünk programból, hogy milyen nyelvű Office lett telepítve. Ettől függ majd hogy SUM, vagy SZUM nevű függvényt kell-e alkalmaznunk. (Alkalmazásunkban most csak az angol, illetve a magyar nyelvű Office verziókkal foglalkozunk.)
Az Office nyelv azonosítóját lekérdezhetjük az Excel alkalmazás objektumának LanguageSettings property-jén keresztül elérhető get_LanguageID függvénnyel.
      label3.Text = ea.LanguageSettings.get_LanguageID(Microsoft.Office.Core.MsoAppLanguageID.msoLanguageIDInstall).ToString();
Magyar nyelvű Office esetén 1038 lesz a visszaadott szám. A get_LanguageID függvény vár egy paramétert is, mely az alábbiak egyike lehet:
Konstans Leírás
msoLanguageIDHelp Az Office súgójának nyelve.
msoLanguageIDInstall A telepített Office nyelve.
msoLanguageIDUI Az Office felhasználói felületének nyelve.
Az Office nyelvét tehát vizsgálhatnánk a get_LanguageID függvény által visszaadott szám alapján is, de van erre egy még egyszerűbb módszer. Ez pedig a get_LanguagePreferredForEditing függvény. Ennek paraméterként meg kell adnunk egy nyelvet, majd a függvény igaz értékkel tér vissza, ha az Office által az adott nyelv támogatott.
A nyelv ismeretében már tudjuk, hogy a SZUM, vagy a SUM függvényt kell-e használnunk, mely funkciójában nyilván azonos, csupán a leírása más. A függvényt a már létrehozott Range objektum FormulaArray property-n keresztül helyezhetjük el sztringként. Ezt a sztring pont olyan lesz, mint amikor manuálisan írunk be egy cellába egy Excel függvényt.
      if (ea.LanguageSettings.get_LanguagePreferredForEditing(Microsoft.Office.Core.MsoLanguageID.msoLanguageIDHungarian))
      {
        er.FormulaArray = "=Szum(A1:A9)";
      }
      else
      {
        er.FormulaArray = "=Sum(A1:A9)";
      }
A cella eredményét most a NumberFormat property-n keresztül egyedi formájúvá alakítjuk.
      er.NumberFormat = "# ##0,00 Ft";
      er.Font.Italic = Convert.ToInt32(true);     
Végül már csak az eredményt kell kiolvasnunk és megjelenítenünk az alkalmazásunkban. Erre két mód is létezik: az egyik a Range objektum Text property-je, a másik a Value2 property. Mindkét esetben megkapjuk az eredményt, de Text property-n keresztül a formázott értéket kapjuk vissza szövegként, míg a Value2 property-n keresztül csak az értéket számként.
      label1.Text = er.Text.ToString();
      label2.Text = er.Value2.ToString();
    }

Excel programozása cikksorozat