C#' und Cells.Find

21/08/2008 - 21:43 von Wojtek Kusch | Report spam
Hallo!
Ich möchte Zeilen einem einem excelsheet finden, die einem bestimmte
Suchkriterium entsprechen, und in diesen ein bestimmte Zelle dann "updaten".
Ich wollte auf die Funktion "Cells.Find" verzichten und selbst die
Zeilen durchgehen. Aber ich bekomme eine Exception ("KEINE ZELLEN
GEFUNDEN"), wenn ich Folgendes mache:


private Worksheet sheet;
private string searchItem;
...


Range arr = sheet.Cells.CurrentArray;





Exception! ("KEINE ZELLEN GEFUNDEN")









Auch Folgendes liefert keinen Wert:

sheet.Cells[2,1];




Folgendes geht aber und liefert die gewünschte Zelle:


Range rgFound = sheet.Cells.Find(searchItem,
sheet.Cells[1, 1],
XlFindLookIn.xlValues,
XlLookAt.xlPart,
Type.Missing,
XlSearchDirection.xlNext,
false,
Type.Missing,
Type.Missing);




Was mache ich falsch?
Vielen Dank für die Hilfe!
Wojtek
 

Lesen sie die antworten

#1 Frank Dzaebel
22/08/2008 - 08:17 | Warnen spam
Hallo Wojtek,

Ich möchte Zeilen einem einem excelsheet finden, die einem bestimmte
Suchkriterium entsprechen, und in diesen ein bestimmte Zelle dann
"updaten".



ok.


Ich wollte auf die Funktion "Cells.Find" verzichten und
selbst die Zeilen durchgehen. Aber ich bekomme eine Exception ("KEINE
ZELLEN GEFUNDEN"), wenn ich Folgendes mache:
Range arr = sheet.Cells.CurrentArray;
//>>>> Exception! ("KEINE ZELLEN GEFUNDEN")



Beachte die Dokumentation zu dieser Eigenschaft:

[CurrentArray Property]
http://msdn.microsoft.com/en-us/lib...91193.aspx

"If the specified cell is part of an array, returns a
Range object that represents the entire array.
Results in a run-time error if the specified cell is
not part of an array."

nun, das ist bei Dir höchstwahrscheinlich der Fall.

"Use the HasArray property to determine whether
or not a cell is part of an array."

Also etwa:

if (sheet.Cells.HasArray.Equals(true))
{
Range arr = sheet.Cells.CurrentArray;
}

wenn Du denn wirklich damit etwas machen
wollen würdest. Ich vermute viel eher Du
möchtest den "sheet.UsedRange" benutzen, aber
das kannst Du ja ggf. noch mal erlàutern.



Auch Folgendes liefert keinen Wert:
sheet.Cells[2,1];



Das ist eine geboxte Referenz auf einen Range.
Den "Wert" dieses Range (den Du meinst)
bekommst Du so:
object value = ((Range)sheet.Cells[2, 1]).Value2;


Folgendes geht aber und liefert die gewünschte Zelle:
Range rgFound = sheet.Cells.Find(
searchItem, [..], sheet.Cells[1, 1], ...



ja, die Methode verlangt hier im zweiten Parameter ja
auch explizit eine geboxte Range-Referenz auf eine Zelle,
(nach der die Suche beginnt) die Du somit auch angibst.
Das ist hier also korrekt.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen