Вот такая вот задача, при экспорте 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]?
Еще раз повторю — у вас в одном месте используется ROW и COL, а в другом K и R. Никто кроме вас не знает что это за переменные — вот и посмотрите что они у вас не перепутаны местами и не выходят за границы массива RangeMatrix.
чтобы не было Variant or safe array index out of bounds используейте .value как в первом случае, т.е.
MyTest := RangeMatrix[ROW,COL].value;
с временем тоже все правильно — время это дробная часть числа. А вот как определить формат числа уже не вспомню, но установить его можно было через NumberFormat, может и определится через него.
Вернемся к названиям переменных:
K — это должна быть строка, потому как первый параметр, смущает название
R — это должен быть столбец, но R это наверное от row. Опять смущает название. Исправьте у себя переменные на человеческие названия.
с Value — это я ошибся. value нужно указывать когда с самим листом работаете, для уже прочитанного массива — не нужно.