2011-11-08 19 views
1

私はExcelDNA/C#/ Excelを主に使用しています。これは御馳走を動作し、数を使用している多次元配列をnullに変換できる値に変換する

private static string[] MultiToSingle(object[,] multiArray) 
{ 
    List<string> tempList; 
    string[] returnArray; 
    tempList = new List<string>(); 

    //Add each element of the multi-dimensional Array to the list 
    foreach (object oneObj in multiArray) 
    { 
     tempList.Add(oneObj.ToString()); 
    } 
    //Convert the list to a single dimensional array 
    returnArray = tempList.ToArray(); 
    return returnArray; 
} 

:私は基本的にやろうとしていますと、次のコードを使用して、特異次元配列に多次元配列(細胞のつまり範囲)に変換されます私のプロジェクトを通して何度も、私はいくつかの機能を追加したいと思います。

空のセルを含む範囲でこの関数を実行しようとすると、恐ろしいことに、現時点では空のセルにN/Aを入力するようにエラーメッセージが表示されます。

私が本当にやりたいことは、おそらく、この関数には、「N/A」というテキスト文字列に空のセルが格納されている「null」または何でも変換することでしょう。

答えて

5

おそらくちょうど:

tempList.Add(oneObj == null ? "n/a" : oneObj.ToString()); 

したい場合、私はまた、それをより効率的にする方法を考えることができます。これは、中間リストといくつかの補助配列のコピーを切り取っ

string[] arr = new string[multiArray.Length]; 
int i = 0; 
foreach (object oneObj in multiArray) 
{ 
    arr[i++] = oneObj == null ? "n/a" : oneObj.ToString(); 
} 
return arr; 

+0

私はC#の専門家ではないが、 '(oneObjを文字列として)'は何をするのだろうか? 'oneObj'が** NULL **でない場合、ToString()メソッドを使って文字列への明示的なキャストを推測しようとしませんか? – flindeberg

+1

@flindebergいいえ、そうではありません。 ** **文字列の場合は、文字列を返します。 ** **文字列でない場合は、常にnullになります。 '.ToString()'などは呼び出されません。したがって、 '123'は' null'になります。 –

+0

このMarcのおかげで、昨日返信する機会はなかったが、この答えはまさに私が探していたものだ。 –

1

nullを見つけると、おそらくエラーが発生している可能性があります.Marcの答えは正しいです。しかし、Excel-DNAで公開されているワークシート関数として直接別のコンテキストでこの関数を使用することもできます。

Excel-DNAは、ExcelDna.Integration.ExcelEmpty型のオブジェクトとして引数配列に空のExcelセルをマーシャリングします。したがって、コードがワークシート関数としてExcel-DNAから直接呼び出された場合は、エラーではなくToString()から型名を取得します。

ので、[](エクセル-DNAが直接あなたの文字列[]の機能を登録しません)オブジェクトへの変更の戻り値の型を持つ関数が次のようになります。

public static object[] MultiToSingle(object[,] multiArray) 
{ 
    List<string> tempList; 
    object[] returnArray; 
    tempList = new List<string>(); 

    //Add each element of the multi-dimensional Array to the list 
    foreach (object oneObj in multiArray) 
    { 
     tempList.Add(oneObj.ToString()); 
    } 
    //Convert the list to a single dimensional array 
    returnArray = tempList.ToArray(); 
    return returnArray; 
} 

と呼ばれたときにExcelでこの出力を提供します直接ワークシート関数として: Excel-DNA array function

この場合のために、あなたは空のセルに対処する配列項目の種類にチェックを追加することができます。

tempList.Add(oneObj is ExcelEmpty ? "!EMPTY" : oneObj.ToString()); 
+0

非常に感謝Govert!残念なことに、そのオプションは私には公開されていませんが、Marcのソリューションは大変でした。 –

関連する問題