Ha a munkalap mezőben megadjuk egy munkalap nevét, akkor a keresés csak azon történik. Ha a mező értékét üresen hagyjuk, akkor a keresés az összes munkalapon megtörténik.
Miután létrehoztunk egy új C# alkalmazást, fel kell vennünk egy hivatkozást az Excel programra. Ehhez válasszuk a Project – Add Reference menüpontot. A megjelenő ablakban kattintsunk a COM fülre, a listában válasszuk ki a Microsoft Excel 10.0 Object Library-t. Ezután kattintsunk a Select, majd az OK gombra.
Az Excel programot a háttérben nyitjuk meg.
Excel.ApplicationClass excelApp = new Excel.ApplicationClass();
A WorkBooks kollekció Open metódusával nyithatunk meg egy már létező állományt.
excelApp.Workbooks.Open(textBox1.Text, m, true, m, m, m, m, m, m, m, m, m, m, m, m);
A munkalap mező értékének megfelelően kétféle feldolgozó algoritmusra van szükségünk. Ha a mező értéke üres sztring, akkor az összes munkalapot végig kell néznünk, ellenkező esetben csak azt, amelyiket a mező tartalmazza.
Az alábbiakban az első esetet ismertetjük.
Egy for ciklus segítségével végig kell mennünk a munkalapokon.
for (int k = 1; k <= excelApp.ActiveWorkbook.Sheets.Count; k++)
{
Excel.Range range = ((Excel.Worksheet)excelApp.ActiveWorkbook.Sheets[k]).UsedRange;
A UsedRange property-n keresztül egy olyan Range objektumot kapunk, amely az adott munkafüzetből csak a hasznos tartományt tartalmazza.
Két újabb, egymásba ágyazott for ciklusra van szükségünk, hogy a cellatartomány összes celláját meg tudjuk vizsgálni. A Range objektum Rows és Columns property-jeiből megtudhatjuk a sorok és oszlopok számát.
Azt, hogy az adott cella tartalmaz-e képletet, a HasFormula property értékéből tudhatjuk meg.
r = (Excel.Range)range.Columns.Cells[i, j];
if ((bool)r.HasFormula)
Magát a képletet a FormulaLocal proeprty-ből olvashatjuk ki.
string s = r.FormulaLocal.ToString();
A FormulaLocal property-n keresztül az Excel program nyelvének megfelelő függvényelnevezésekkel olvashatjuk ki. Amennyiben a függvények angol nyelvű megfelelőjére van szükségünk, a Formula property-t kell használnunk.
Ha a koordinátákat is el kell helyeznünk az eredménylistában, a következő utasításra van szükségünk.
listBox1.Items.Add(((Excel._Worksheet)excelApp.ActiveWorkbook.Sheets[k]).Name + " [" + GetCoord(r.Column, r.Row) + "] : " + s);
A koordinátákat számok formájában kapjuk. Az oszlopok sokkal szebben mutatnak, ha azokat betűk formájában jelenítjük meg. Ehhez elkészítettük a GetCoord függvényt.
private string GetCoord(int column, int row)
A függvény egy megadott oszlop és sor sorszámaiból a megszokott „A1” formátumú cellakoordinátát adja vissza.
Az Excel programot a Quit metódus meghívásával zárhatjuk be.