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