powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Импорт даты из Excel ошибка DateTime as Double
15 сообщений из 15, страница 1 из 1
Импорт даты из Excel ошибка DateTime as Double
    #39691127
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, не могу никак справится с импортом из Excel.

При попытке выполнить код:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var ExcelFile: Variant;
AQuery:TQuery;
...
ExcelFile := CreateOleObject('Excel.Application');
AQuery := TMyQuery.Create(nil);
...
AQuery.SQL.Add('INSERT INTO test ('test_date') VALUES (':pTestDate');
[color=yellow]AQuery.ParamByName('pTestDate').Value := ExcelFile.Cells[1,10].Value;[/color]
AQuery.Insert;



В Excel в столбце даты заданы в формате dd.mm.yyyy, кроме того также имеются пустые поля в данном столбце.
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691131
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вручную обрабатывать. В дате получится прочитать, только если в экселе столбец с форматом даты будет. А он по умолчанию проставляется только для реальных данных, отсюда и фейлы на пустых. Можно проверять на Null, или брать Text, смотреть и уже оттуда отталкиваться (пусто или что-то есть).
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691140
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сож. Эксель в-лоб обрабатывать нельзя.
Данные могут быть записаны как угодно, особенно дата.
Поэтому нужен некий парсер, кот. догадается, как вытащить из ячейки правильную дату.
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691167
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

Вот что нагуглилось, попробуйте:

Код: pascal
1.
   AQuery.ParamByName('pTestDate').Value := ExcelFile.Cells[1,10].getDateCellValue();
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691169
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

Скажите, если вот так напишу - будет ли нормально?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
AQuery.SQL.Add('INSERT INTO test ('test_date') VALUES (':pTestDate');
if not (VarIsNull(ExcelFile.Cells[1,10].Value) or (Trim(ExcelFile.Cells[1,10].Value)) then
try
AQuery.ParamByName('pTestDate').Value := ExcelFile.Cells[1,10].Value;
AQuery.Insert;
except
  raise Exception.CreateMsg('Unable to convert %s to DateTime', [ExcelFile.Cells[1,10].Value]);
end;
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691172
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.

Думаю, если выйдет с getDateCellValue(), следует все-равно свой парсер для текста из .Value писать
Вдруг дата как текст сохранена
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691177
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще: ExcelFile.Cells[1,10].Text
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691185
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,

Не очень понял, проще где ?
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691194
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnet,

Для проверки на пустое значение (text <> ''). Условие с трим тупо нерабочее (трим -- обрезает пробелы, а не проверяет).
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691262
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семён wsnet,

Вот что нагуглилось, попробуйте:

Код: pascal
1.
   AQuery.ParamByName('pTestDate').Value := ExcelFile.Cells[1,10].getDateCellValue();



Method getDateCellValue() not supported by automation object
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691378
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем к Excel подключаться через OLE если проще через "Microsoft Access Database Engine"
И у вас получится по-сути маппинг из одного датасета в другой, с совпадающей типизацией.
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691435
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite, не подскажите как формат устанавливать перед импортом из Excel ?
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691453
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик СемёнP.S.

Думаю, если выйдет с getDateCellValue(), следует все-равно свой парсер для текста из .Value писать
Вдруг дата как текст сохранена+1.
Я так и делал. При импорте задается формат предполагаемой даты. При этом разделители могут быть любые.
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691581
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+1
Импортируешь в строковую переменную, смотришь, в каком оно формате. А потом уже парсишь.
В конце концов:

Код: pascal
1.
2.
3.
4.
5.
6.
Var
 d, d1: TDateTime;
 stroka_s_datoy: string;
begin
VarDateFromStr(PWideChar(stroka_s_datoy), LOCALE_USER_DEFAULT, 0, d);// живёт в System.VarUtils
d1 := VarToDateTime(d);
...
Рейтинг: 0 / 0
Импорт даты из Excel ошибка DateTime as Double
    #39691656
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
// живёт в System.VarUtils

Там все уныло и негибко. Только свой парсер.
Тем более даты могут попадать в систему не только с Экселя, но и из XML/JSON/CSV
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Импорт даты из Excel ошибка DateTime as Double
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]