Нет, я не думаю, что вы можете сделать преобразование за один шаг, но я могу ошибаться. Но вы, конечно, можете создать новый массив и скопировать из старого в новый:
object value = range.Value; //the value is boxed two-dimensional array
var excelArray = value as object[,];
var height = excelArray.GetLength(0);
var width = excelArray.GetLength(1);
var array = new string[width, height];
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
array[i, j] = excelArray[i, j] as string;
}
Edit:
Вот двумерная перегрузка Array.ConvertAll
, которая не намного сложнее, чем код выше:
public static TOutput[,] ConvertAll<TInput, TOutput>(TInput[,] array, Converter<TInput, TOutput> converter)
{
if (array == null)
{
throw new ArgumentNullException("array");
}
if (converter == null)
{
throw new ArgumentNullException("converter");
}
int height = array.GetLength(0);
int width = array.GetLength(1);
TOutput[,] localArray = new TOutput[width, height];
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
localArray[i, j] = converter(array[i, j]);
}
return localArray;
}