Problem beim Einlesen eines Excel-Range in ein Array

06/05/2010 - 02:03 von Franky | Report spam
Hallo!
Ich greife über
Excel.Range myRange (Excel.Range)xlApp.ActiveWindow.RangeSelection;
auf meinen aktuellen Range zu.
Lese dann die Werte ein:
object[,] array = (object[,])myRange.Value2;
Mein Problem ist jedoch, dass ich einen Fehler bekomme, sobald der
Range nur eine Zelle beinhaltet. Steht in der Zelle ein Double habe
ich das Problem, dass ein Double nicht in ein Object[,] umgewandelt
werden kann, bei String etc. dann natürlich das gleiche Problem mit
dem Datentyp.

Bei diesem Code:
Excel.Range myRange (Excel.Range)xlApp.ActiveWindow.RangeSelection;
object[,] array = new object[myRange.Rows.Count,
myRange.Columns.Count];

Excel.Range rng;
for (int i = 0; i < myRange.Rows.Count;i++)
{
for (int j = 0; j < myRange.Columns.Count;j++)
{
rng = (Excel.Range)myRange.Cells[i + 1, j + 1];
array[i,j] = rng.Value2;
}
}

return array;
habe ich das Problem, dass es viel zu lange dauert. Funktioniert zwar,
ist aber nicht zu akzeptieren, da ich auch mit großen Datenmengen
arbeiten muss.

Habt ihr mir ne Idee wie ich das lösen kann?
Ich darf übrigens auch nicht eine Abfrage machen, ob die Zelle nur
einen Wert beinhaltet und diese dann nicht in ein Array, sondern in
ein Object einlesen?! =/ So hatte ich es schon, bekam zu hören, dass
ich es anders lösen soll. Habt ihr mir ne Idee?? Ich hab leider keine
mehr.

Grüße
 

Lesen sie die antworten

#1 Frank Dzaebel
06/05/2010 - 07:31 | Warnen spam
Hallo Franky,

[Excel-Zellen-Werte in ein Array (performant) einlesen]
Habt ihr mir ne Idee wie ich das lösen kann?



Zum Beispiel:

Range myRange = (Range)xlApp.ActiveWindow.RangeSelection;
object[,] array = (object[,])xlApp.WorksheetFunction.Transpose(myRange);
object wert45 = array[4, 5];


In manchen Situationen auch über die Zwischenablage in C# recht
performant:

[Übertragen von Daten in eine Excel-Arbeitsmappe mit Visual C# 2005 oder
Visual C# .NET]
http://support.microsoft.com/kb/306023


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

Ähnliche fragen