Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Excel. Проблемы с чтением. 
V
    Опции темы
AVronsky
Дата 16.11.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.11.2011

Репутация: нет
Всего: нет



Имеем EXCEL файл типа, 3 столбца:

вс    00:00:00    23:59:59
вт    00:00:00    16:54:59
вт    16:50:00    23:59:59
пн    00:00:00    23:59:59

При чтении данных из EXCEL файла методом:

Код

weekDay := vartostr(x.activeworkbook.activesheet.Range['A'+IntToStr(i)]);
timeFrom := vartostr(x.activeworkbook.activesheet.Range['B'+IntToStr(i)]);
timeTo := vartostr(x.activeworkbook.activesheet.Range['C'+IntToStr(i)]);


и записи в TXT файл получаем лог:

('вс','00:00:00','23:59:59')
('вт','00:00:00','0,704849537037037')
('вт','0,701388888888889','23:59:59')
('пн','00:00:00','23:59:59')

Что не так ?

PM MAIL   Вверх
14SatanA88
Дата 16.11.2011, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: нет
Всего: 5



Код

weekDay := vartostr(x.activeworkbook.activesheet.Range['A'+IntToStr(i)]);
timeFrom := timetostr(x.activeworkbook.activesheet.Range['B'+IntToStr(i)]);
timeTo := timetostr(x.activeworkbook.activesheet.Range['C'+IntToStr(i)]);

PM MAIL ICQ   Вверх
Данкинг
Дата 16.11.2011, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



А что не так-то? Какие значения есть - такие и получились.

Добавлено через 1 минуту и 6 секунд
А, понял. Вообще как вариант - изначально попробовать установить в ячейке нужный формат, т.е. текстовый.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
AVronsky
Дата 16.11.2011, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.11.2011

Репутация: нет
Всего: нет



Цитата(14SatanA88 @ 16.11.2011,  15:27)
Код

weekDay := vartostr(x.activeworkbook.activesheet.Range['A'+IntToStr(i)]);
timeFrom := timetostr(x.activeworkbook.activesheet.Range['B'+IntToStr(i)]);
timeTo := timetostr(x.activeworkbook.activesheet.Range['C'+IntToStr(i)]);

Код

...
var
  x: variant;
begin
  x:=CreateOleObject('Excel.Application');
...


Ошибка:
  "Could not convert variant of type (Dispatch) into type (Double)"
PM MAIL   Вверх
Данкинг
Дата 16.11.2011, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



AVronsky, если у тебя всего 3 столбца, не проще вместо RANGE считать в цикле каждую ячейку?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
AVronsky
Дата 16.11.2011, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.11.2011

Репутация: нет
Всего: нет



Цитата(Данкинг @ 16.11.2011,  16:31)
AVronsky, если у тебя всего 3 столбца, не проще вместо RANGE считать в цикле каждую ячейку?

1. Их далеко не 3
2. Это все равно не снимает проблемы.
PM MAIL   Вверх
14SatanA88
Дата 16.11.2011, 16:49 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: нет
Всего: 5



AVronsky, с помощью магии и правильного положения звезд у меня все работает
приаттачьте проект и тот самый злополучный файл xls, я посмотрю
PM MAIL ICQ   Вверх
Данкинг
Дата 16.11.2011, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



Мне кажется, там в ячейках ссылка / формула стоит, а не значение как таковое.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
14SatanA88
Дата 17.11.2011, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: нет
Всего: 5



Цитата(Данкинг @  16.11.2011,  17:20 Найти цитируемый пост)
Мне кажется, там в ячейках ссылка / формула стоит, а не значение как таковое.


я у себя тестовый проект набросал, все нормально было
так что надо бы взгялнуть на проект ТС полностью
PM MAIL ICQ   Вверх
Данкинг
Дата 17.11.2011, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 5
Всего: 130



Цитата(14SatanA88 @  17.11.2011,  09:11 Найти цитируемый пост)
я у себя тестовый проект набросал, все нормально было

Ну правильно, я и говорю, что у ТС там вероятно ссылка на что-то указана.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
AVronsky
Дата 17.11.2011, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.11.2011

Репутация: нет
Всего: нет



В связи с тем, что XLS файл размером более 8к строк
ведется и корректируется ручками разными людьми,
за форматом ячеек никто не следит
договорился о смене формата данных в столбце с 00:00:00 на 00|00|00.

В дальнейшем меняю "|" на ":" обратно через StringReplace.
Всем спасибо.

PS:
  Для 14SatanA88 файл прилагаю.
  Для Данкинг - формулы никакой нет



Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Time.rar 97,13 Kb
PM MAIL   Вверх
14SatanA88
Дата 17.11.2011, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 13.5.2010

Репутация: нет
Всего: 5



Цитата(AVronsky @  17.11.2011,  09:47 Найти цитируемый пост)
Для 14SatanA88 файл прилагаю

там у вас в разных ячейках разный формат
там где формат текстовый, vartostr забирает в нормальном представлении (например, "23:59:59")
там где формат ячеек указан как общий, функция отдает что-то типа "0,701388888888889"
а timetostr вообще валится из-за несоответствия типов

следующий код решает вашу проблему

Код

    weekDay := vartostr(Excel.activeworkbook.activesheet.Range['C'+IntToStr(i)]);
    try
      timeFrom := timetostr(Excel.activeworkbook.activesheet.Range['D'+IntToStr(i)]);
      timeTo := timetostr(Excel.activeworkbook.activesheet.Range['E'+IntToStr(i)]);
    except
      timeFrom := vartostr(Excel.activeworkbook.activesheet.Range['D'+IntToStr(i)]);
      timeTo := vartostr(Excel.activeworkbook.activesheet.Range['E'+IntToStr(i)]);
    end;

PM MAIL ICQ   Вверх
AVronsky
Дата 17.11.2011, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 16.11.2011

Репутация: нет
Всего: нет



Спасибо, так работает.

Это сообщение отредактировал(а) AVronsky - 17.11.2011, 13:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0910 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.