Чтение из Excel

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Чтение из Excel

Сообщение s2176 »

Добрый день!
У меня есть xls-файл, где данные в ячейке записаны в формате [ч]:mm, т.е. по сути - часы:минуты. Я не могу в интерфейсе достать эти данные :sad:
Читаю так (пробую это делать в переменные типа string и time):
....
var pt: time;
var _str: string;
...
xlGetCellValue(_row,col,pt);
logStrToFile('log.log',timeToStr(pt,'HH:MM:SS'));
xlGetCellValue(_row,col,_str);
logStrToFile('log.log',_str);
...

В логе получаю:
00:00:00
0,161111111111111
а на самом деле в ячейке - 3:52:00
Мне нужны часы и минуты отдельно.
Кто сказал, что бесполезно биться головой об стену?!
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

время идет в Double нужно перевести в Time
как пример можете попробывать вот такую функцию

Код: Выделить всё

function DoubleToTime(_Time:Double):Time;
{
var t1: Double;
var s1,s2,s3,s:String;

 t1:= _Time * 24 * 60 * 60;
 S1:= Longint(Trunc(t1 / 3600));
 t1:= Longint(t1) mod 3600;
 S2:= Longint(Trunc(t1 / 60));
 t1:= Longint(t1) mod 60;
 S3:= Longint(Trunc(t1));
 S:= s1+':'+s2+':'+s3+':'+'000';
 result:=StrToTime(s, 'HH:MM:SS:SSS');
};
только запятую нужно заменить на точку
0,161111111111111 = 0.161111111111111
s2176
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Новосибирск

Сообщение s2176 »

Спасибо, похоже, придется так сложно делать!
Кто сказал, что бесполезно биться головой об стену?!
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

Сообщение Vik »

Легче так:

Код: Выделить всё

function DoubleToTime(_Time:Double):Time; 
{ 
  result:=From_Sec100(_Time* 24 * 60 * 60 * 100); 
};
 
evchic
Местный житель
Сообщения: 216
Зарегистрирован: 25 апр 2006, 12:05
Откуда: г.Ростов-на-Дону
Контактная информация:

Сообщение evchic »

Vik писал(а):Легче так:

Код: Выделить всё

function DoubleToTime(_Time:Double):Time; 
{ 
  result:=From_Sec100(_Time* 24 * 60 * 60 * 100); 
};
 
Кстати можно и так... спасибо...
Ответить