2016-10-04 5 views
0

に進配列に小数のオブジェクトを変換するために、私は相互運用機能を使用してExcelで名前付き範囲で読んでから来て、それはこのようになりますC#でobjectを持っている:どのようにC#の

myObject = 
oName.RefersToRange.Value {object[1..1, 1..5]} 
((object[,])oName.RefersToRange.Value)[1, 1] 10 
((object[,])oName.RefersToRange.Value)[1, 2] 20 
((object[,])oName.RefersToRange.Value)[1, 3] 30 
((object[,])oName.RefersToRange.Value)[1, 4] 40 
((object[,])oName.RefersToRange.Value)[1, 5] 50 

私は考え私は、次のコードを使用してこれをやろうとしている

myDecimal = {[10.0], [20.0], [30.0], [40.0], [50.0]} 

decimal[,] myDecimal = (decimal[,])myObject 
0123のよう Decimalにこれを変換したいです私も試してみました

decimal[,] myDecimal = Convert.ToDecimal(myObject) 

や他のもののホストを、のどれも本当に働いていないと、すべては私にエラーを与える傾向があります。

これを行う別の方法は、2つのディメンションを反復し、Decimalに変換するか、値を0.0に設定するメソッドを作成することです。それは大丈夫でしょうが、私はそれを働かせるように見えません。ここで私が持っているものだ(ところで - 私はこれがずさんである知っているだけで、この問題を解決するには、私の無益さを実証する):

public static decimal[,] Convert2dObjectTo2dDecimalArray(object obj) 
    { 
     decimal[,] result = default(decimal[,]); 

     for (int i = 0; i <= obj.SomeUnknownMethodThatCountsElements(0); i++) 
     { 
      for (int j = 0; i <= obj.SomeUnknownMethodThatCountsElements(1); j++) 
      { 
       try 
       { 
        result[i, j] = Convert.ToDecimal(obj[i, j]); 
       } 
       catch (Exception) 
       { 
        result[i, j] = new decimal(0.0); 
       } 
      } 
     } 

     return result; 
    } 

すべてのヘルプは大歓迎です。

私は上の例が実際には1次元のデータセットであることを知っていますが、2次元で作業する必要があります。例の使用例を短くしています。

+0

あなたがmyObjectという – Sorceri

+0

@Sorceriを宣言する方法を示して行うことができるはず - 私はちょうどコードを短縮しています、myObjectという、実際に 'Microsoft.Office.Interop.Excel.Nameです。 RefersToRange.Value [オブジェクト] ' – gotmike

答えて

0

あなたはこの

object[,] obj = new object[,] { { 1.1, 2.1, 2.3 },{ 3.2, 4.3, 5.4 } }; 
decimal[,] result = new decimal[obj.GetLength(0), obj.GetLength(1)]; 

for (int i = 0; i < obj.GetLength(0); i++) 
{ 
    for (int j = 0; j < obj.GetLength(1); j++) 
    { 
     try 
     { 
      result[i, j] = Convert.ToDecimal(obj[i, j]); 
     } 
     catch (Exception) 
     { 
      result[i, j] = new decimal(0.0); 
     } 
    } 
}