Как преобразовать объект десятичных знаков в десятичный массив в C#

#c# #excel

#c# #excel

Вопрос:

У меня есть object в C #, который получается при чтении в именованном диапазоне в Excel с использованием Interop, и он выглядит так:

 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
  

Я хотел бы преобразовать это в Decimal подобное:

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

Я пытаюсь сделать это, используя следующий код:

 decimal[,] myDecimal = (decimal[,])myObject
  

Я также пытался:

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

и множество других вещей, ни одна из которых на самом деле не работала, и все они, как правило, дают мне ошибки.

Я полагаю, что другим способом сделать это было бы создать метод, который перебирает два измерения и либо преобразует их в 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 resu<
    }
  

Любая помощь приветствуется.

КСТАТИ, я знаю, что мой приведенный выше пример на самом деле представляет собой одномерный набор данных, но мне нужно работать с 2-мя измерениями, я просто пытаюсь сократить пример использования.

Комментарии:

1. покажите, как вы объявляете MyObject

2. @Sorceri — я просто сокращаю код, MyObject на самом деле Microsoft.Office.Interop.Excel.Name.RefersToRange.Value[object]

Ответ №1:

вы должны быть в состоянии сделать это

 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);
        }
    }
}