2016-07-11 11 views
0

Mein Problem ist, dass ich die WorksheetFunction Methode CountIf in C# für Excel verwenden möchte.Worksheet Function.CountIfs (...) in C# Rückgabewert ist ein 2 Dim Objekt Array

Und ich bin immer ein 2 dim Objekt Array aus dieser Funktion bekommen

double[,] zn1 = wsf.CountIfs(cSheet.Range[cSheet.Cells[13, 1], 
    cSheet.Cells[20, 1]], sName + sName); 

(Es funktioniert nur mit double[,] zn1 oder var zn1, sonst einen Fehler Ich erhalte, dass das Objekt Array obj[,] nicht sein kann umgewandelt in eine double oder double[], string[] usw. ")

wo wsf als

definiert
Excel.Application xl = new Excel.Application(); 
Excel.WorksheetFunction wsf = xl.WorksheetFunction; 

Also, wenn ich es ausführe, bekomme ich ein 2-Dim-Objekt-Array, das die gleiche Länge wie der Range hat, die ich suche, und alle Einträge enthalten die gleiche Nummer "-2146826273".

Und wenn ich das Array in ein 1-DIM-Doppel-Array konvertieren, ist die Rückkehr System.Double[].

object[] to = zn1.Cast<object>().ToArray(); 
object[] res = to as object[]; 
double[] sRes; 
sRes = res.OfType<double>().ToArray(); 

Alle anderen WorksheetFunction Methoden funktionieren gut und ohne Fehler.

Also meine Frage ist, wie bekomme ich einen normalen Wert für die WorksheetFunction Methode CountIfs(...)?

Und ja, ich muss WorksheetFunction Methoden verwenden und ich kann es nicht wie eine Formel mit einer Zeichenfolge eingeben.

Antwort

0

Versuchen Sie, Ihre Formel zu überprüfen, die Fehlernummer ("-2146826273") zeigt an, dass das Problem innerhalb der Formel liegt.

Siehe hier für formula error checking und insbesondere error.

+0

Das Komische ist, wenn ich diese Formel in vba schreiben es gut funktioniert hat. Aber ich muss es tun in C# Ich habe die Formel für diesen Fehler überprüft und ich habe versucht, das Format für die Zellen zu ändern, aber es hilft nicht. Es sagt auch, dass ein geschlossenes Arbeitsbuch für dieses Problem sein könnte ("-2146826273") = #VALUE !, aber es ist immer offen. – Daniel

+0

Wie Sie bereits erwähnt haben, funktionieren die anderen WorkssheetFunctions so, dass sie nicht das Problem der offenen Arbeitsmappe sein sollten. Ich denke, ich würde mit einem sehr einfachen CountIfs in der Formel beginnen, um zu überprüfen, ob dieser sehr einfache Fall durchkommt. –

+0

Ich habe versucht, die Formel mit einfachen CountIs wie: "32", <32, einfache Wörter und auch mit leeren Zellen, aber der Fehler ("-2146826273") bleibt gleich. Ich habe auch CountIf versucht und es funktioniert nicht. Und wenn ich CountIf (s) wie folgt verwenden: 'Worksheet.Range [...] =" = COUNTIFS (Bereich Arg1, Objekt Arg2) ";' es funktioniert gut. – Daniel

1

Hmmm ... Ich habe das Problem gefunden.

es so sein muss:

var xl = Globals.ThisAddIn.Application; 
Excel.WorksheetFunction wsf = xl.WorksheetFunction; 

und nicht so:

Excel.Application xl = new Excel.Application(); 
Excel.WorksheetFunction wsf = xl.WorksheetFunction; 
+0

Es ist interessant, wäre toll zu wissen, warum das funktioniert hat. –