Какой тип возвращает Excel Worksheet.Usedrange - PullRequest
0 голосов
/ 08 марта 2012

Я конвертирую приложение из VBA в C #. Это идет медленно. Вот мой первый вызов ...

В vba я могу назначить диапазон Excel двумерному массиву vba:

Dim strSheetArray as Variant
strSheetArray = xlSH.UsedRange
...
debug.print strSheetArray[1,2]     'etc.

Когда я конвертирую в C #, свойство «UsedRange», похоже, возвращает объект. Я не могу использовать этот объект как массив, получая ошибки времени кода. Итак, как мне обратиться к возвращенному объекту, чтобы я мог перебрать его?

И, пока я нахожусь в этом, ячейки не имеют типа, так как я могу использовать их (некоторые числа, другие текст и т. Д.) Это было довольно легко в vba ....

Спасибо за помощь.

1 Ответ

2 голосов
/ 08 марта 2012

Возвращает интерфейс диапазона. Вы можете прочитать больше об этом на MSDN .

И, пока я нахожусь в этом, ячейки не имеют типа, так как я могу их использовать (некоторые числа, другие текстовые и т. Д.) В vba было довольно легко ...

Ячейки действительно имеют тип, но они просто объекты. Вы должны будете привести к тому, что хотите. Поэтому, если ячейка является текстовой, вам нужно будет сделать что-то вроде:

(string)xlSheet.Cells[row,col].Value2

или

xlSheet.Cells[row,col].Value2.ToString();

Вам бы также пришлось привести числовой тип, если бы вы знали, что это числа.


Редактирование на основе комментариев:

Так что, если вы хотите получить используемый диапазон, вы должны сделать это:

using Excel = Microsoft.Office.Interop.Excel;

Excel.Range range = xlSheet.UsedRange;

Это даст вам все из рабочего листа (я использовал переменную xlSheet, которая является Excel.Worksheet).

Теперь мы можем повторить это, выполнив:

int rows = range.Rows.Count;
int cols = range.Columns.Count;

for(int r=1; r <= rows; r++)
{
    for(int c=1; c <= cols; c++)
    {
        Console.Write(range.Cells[r,c].Value2.ToString());
    }
    Console.WriteLine();
}

Это будет выполнять итерацию по всему диапазону и в основном копировать то, что находится в вашей электронной таблице в окне консоли. Надеюсь, это поможет. Я также написал сообщение в блоге о чтении электронных таблиц Excel с использованием C #, которое вы можете прочитать здесь , если хотите.

...