Сведения о вопросе

Kirushaa

05:41, 2nd October, 2020

Теги

Delphi   Pascal    

Экспорт XLS в Delphi + Массив Variant

Просмотров: 336   Ответов: 4

Уважаемые Delphi специалисты (Использую Delphi 7)

Вот такая вот задача, при экспорте XLS файла в stringgrid средствами COM.

Начало и заголовки стандартные, интереса не представляют.

Но, есть тип RangeMatrix: Variant, в который помещаются данные при вызове
RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;

Затем данные из RangeMatrix по циклу помещаются в StringGrid.Cell[ROW,COL]

Вот так:
StringGrid.Cells[ROW, COL] := RangeMatrix [ROW,COL];
Этот код работает.

Все данные помещаются нормально, за исключением DateTime, которое помещается в виде Double, т.е. время в ячейке вместо 16:30 выглядит как 0.ХХХХХХХХ, т.е. 0.324234234

Вопрос: Как сделать распознать тип текущих данных в RangeMatrix [ROW,COL]; дабы совершить над ними какие либо действия в процессе обработки?

В отличие от кода выше, код ниже, когда значение RangeMatrix [ROW,COL] присвавается переменной, не работает
MyTest := RangeMatrix[ROW,COL];

Этот код выдает ошибку: Variant or safe array index out of bounds

Голова сломалась совсем. Прошу совета, почему переменной MyTest нельзя присвоить RangeMatrix[ROW,COL]?



  Сведения об ответе

VCe znayu

14:44, 25th September, 2020

StringGrid.Cells[ROW, COL] := RangeMatrix [ROW,COL];
Этот код работает.


Покажите, как вы индексы массива перебираете. Как границы определяете.


  Сведения об ответе

VERSUION

06:21, 29th September, 2020

MyTest := RangeMatrix[K, R];
Этот код выдает ошибку: Variant or safe array index out of bounds


  Сведения об ответе

fo_I_K

11:50, 28th September, 2020

чтобы не было Variant or safe array index out of bounds используейте .value как в первом случае, т.е.

MyTest := RangeMatrix[ROW,COL].value;

с временем тоже все правильно — время это дробная часть числа. А вот как определить формат числа уже не вспомню, но установить его можно было через NumberFormat, может и определится через него.


  Сведения об ответе

Chhiki

17:23, 27th September, 2020

так в случае
AGrid.Cells[ROW, COL] := RangeMatrix[K, R];
идет приведение типа к String;

попробуйте объявить
var
myTest: OleVariant;

или вот так написать

var
myTest: Variant;

myTest:=String(RangeMatrix[ROW,COL].Value);

но проблему определения типа данных в ячейке это не решит


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться