|
1 / 1 / 0
Регистрация: 07.09.2021
Сообщений: 105
|
|||||||||||
Delphi 6-7 Как извлечь из Эксель правильно формат дата в Делфи?09.12.2021, 10:06. Показов 3792. Ответов 41
Метки нет (Все метки)
Добрый день уважаемые форумчане. Пытаюсь помочь музейщикам в их нелегкой кропотливой работе по выгрузке данных по труженикам тыла. Проект похож на участников ВОВ, тему я тут по ним создавал и с вашей помощью успешно справился Функция поиска и индексации методом TStringgrid
По труженикам тыла программу делаю основываясь на предыдущей разработке. Т.е. подключаюсь к эксель через адо. Все норм, кроме одного момента: Даты в столбике забиты в разнобой. Где то просто год, допустим 1899, а где то полноразмерная дата: 04.12.1909. Там, где просто год - все нормально. А там где полноразмерная дата, в дбгрид выводится какое то преобразованное число. Естественно в самом эксель у ячеек где просто год присвоен формат общий, а там где полноразмерная дата, он преобразовал ее в дату. Пробовал создать простенький "проверятор" на корректность даты. Если число больше определенного значения, то пытаться считать поле как дату.
И вот я ломаю голову как мне это обойти. Копался в интернете но ничего не нашел. сам код загрузки эксель через адб (смотреть нужно ADOQuery3. ADOQuery1,2 и 4 нужны для подгрузки списка комбобокс и таблицы расшифровки населенных пунктов):
0
|
|||||||||||
| 09.12.2021, 10:06 | |
|
Ответы с готовыми решениями:
41
дата выдачи кредита - 11.11.11. дата погашения 11.12.11. Как записать это в делфи и решить это в делфи? Формат поля = Дата + краткий формат времени - часы отображаются одной цыферой хоть задано ДВЕ! Как изменить формат <Дата> и <Номер> в макете? |
|
1 / 1 / 0
Регистрация: 07.09.2021
Сообщений: 105
|
||
| 10.12.2021, 13:28 [ТС] | ||
|
если известно имя, тогда вообще не надо предварительно ее узнавать. С этой позиции тогда лучше оставить старую версию с открытием через GetOleObject
Добавлено через 1 минуту
0
|
||
|
1 / 1 / 0
Регистрация: 07.09.2021
Сообщений: 105
|
|
| 10.12.2021, 13:48 [ТС] | |
|
0
|
|
|
AxBxC=X
155 / 135 / 58
Регистрация: 27.04.2016
Сообщений: 549
|
|
| 10.12.2021, 14:03 | |
|
Как вариант: экспортировать таблицы в dbf и работать с ними.
Предварительно сменить назавания заголовков колонок на латиницу (<=8 символов, без пробелов, 1-й символ не цифра)
0
|
|
|
3765 / 2272 / 706
Регистрация: 29.05.2013
Сообщений: 9,622
|
|
| 10.12.2021, 14:13 | |
|
А вы хоть посмотрели, что такое эта ваша База_данных? А стоило. Это именованная область всех данных из искомой таблицы, т.е. запрос вида select * from База_данных вернет вам требуемый набор данных и не надо получать никаких других имен листов.
0
|
|
|
3765 / 2272 / 706
Регистрация: 29.05.2013
Сообщений: 9,622
|
|
| 10.12.2021, 14:18 | |
|
Да не нужно ему знать название листа, оно вообще может быть каким угодно. Автор эксельной таблицы просто выделил весь блок данных и дал ему псевдоним База_данных. Теперь это такой-же объект в книге как и лист и вы хоть как называйте лист, а псевдоним останется неизменным.
0
|
|
|
1 / 1 / 0
Регистрация: 07.09.2021
Сообщений: 105
|
|||
| 10.12.2021, 15:38 [ТС] | |||
|
А как мне тогда обратиться к этой базе данных? В одной таблице это допустим database, в другой таблице я такого вообще не увидел. Вообще запутался...
Узнавать наименование листа через GetOleObject является пока что безотказным методом, пусть это и костыль. Добавлено через 2 минуты
0
|
|||
|
3765 / 2272 / 706
Регистрация: 29.05.2013
Сообщений: 9,622
|
||
| 10.12.2021, 16:08 | ||
|
1. К вам эти файлы поступают к вам с изменениями или же это каждый раз новые данные? 2. Структура самой таблицы при этом меняется? 3. Название листа меняется? 4. Каждый из файлов при поступлении имеет неизменное имя?
0
|
||
|
1 / 1 / 0
Регистрация: 07.09.2021
Сообщений: 105
|
||
| 10.12.2021, 16:19 [ТС] | ||
|
Я делаю 2 подобные программки, про участников великой отечественной войны, и ветеранов труда. Первую уже сделал. На ее основе сейчас занимаюсь второй, т.к. структурно данные похожи и методы обработки схожи. Проект некоммерческий, делаю на общих основаниях для своей девушки которая работает в музее,дабы облегчить ее нелегкий труд. Если бы я делал только для нее, то не парился бы с названием листом в таблицах. Но в перспективе хочу раздать другим музейщикам, после того как эти программы опробирует девушка. Ну и поэтому стоит задача сделать так чтобы все это работало с как можно меньшим набором данных от самого пользователя. Чтобы не вводить там названия листов, не править причину смерти и т.п. 1) Сказать как будет называться точно другой лист с данными у другого района - я не могу. Те, кто составляет эти таблицы могут обозвать его как угодно. 2) структурно скорее всего она будет такой же. Но в случае чего вручную подкорректировать позицию столбцов можно будет самому пользователю. 3) ответил в первом пункте) 4) Название файлов разное, но конкретно здесь это не имеет значения, ибо в программа предусмотрено, чтобы пользователь сам выбирал файл для загрузки через опендиалог.
0
|
||
|
1 / 1 / 0
Регистрация: 07.09.2021
Сообщений: 105
|
|||||||
| 13.12.2021, 10:36 [ТС] | |||||||
|
Я в описании где то ошибку допустил?
0
|
|||||||
|
3765 / 2272 / 706
Регистрация: 29.05.2013
Сообщений: 9,622
|
|
| 13.12.2021, 15:23 | |
|
Проверил, не работает. Стал вспоминать как же это у меня-то работало когда-то. И ведь вспомнил, но к сожалению вам это не поможет. Передавали мне для обработки файлы с расширением .xls, которые на самом деле были .csv и для них я использовал такую схему.
Каюсь, обманул. Прошу понять и простить.
0
|
|
|
1 / 1 / 0
Регистрация: 07.09.2021
Сообщений: 105
|
|||||||||||
| 13.12.2021, 15:51 [ТС] | |||||||||||
|
Все мы заблуждаемся и ошибаемся) Не ошибается только тот, кто ничего не делает)
В общем пока пришел к тому, что надо исправить даты с порядкового номера на нормальный. Тут и затык. Пытался это реализовать 2 методами: 1) Через редактирование таблицы методом ADO.Edit
Вторая точно такая же на вид Но заканчивается ошибкой. Пробовал добавлять после ADO.Post открытие и закрытие ADO. Но тогда он просто бесконечно выводит первую дату. Т.е. исправления фактически не происходит. 2) Через SQL запрос "Update".
Ошибка вылезает как будто бы в ADO отсутствуют данные. Пробовал перед этим в том же АДО5 делать запрос "SElect * FROM" - бес толку. Адо5 как и адо3 привязаны к адоконнектишон2, который в свою очередь связывается с эксель. Но датасеты у них разные. Я уже окончательно запутался, что я не так делаю)))
0
|
|||||||||||
|
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
|
||||||
| 13.12.2021, 16:16 | ||||||
|
Можно попробовать нужные поля в строку запросом, в проге со строкой будет проще
0
|
||||||
|
1 / 1 / 0
Регистрация: 07.09.2021
Сообщений: 105
|
|
| 13.12.2021, 17:01 [ТС] | |
|
Кажется начинаю понимать почему с запросом update не получалось. Вместо двойных кавычек " надо было использовать апострофы `
0
|
|
|
3765 / 2272 / 706
Регистрация: 29.05.2013
Сообщений: 9,622
|
|
| 13.12.2021, 17:20 | |
|
Возьмите название поля в квадратные скобки, а не в апострофы. [Год рождения]
1
|
|
|
1 / 1 / 0
Регистрация: 07.09.2021
Сообщений: 105
|
||||||
| 20.12.2021, 10:51 [ТС] | ||||||
|
Блин. Который день уже бьюсь над проблемой исправления кривых дат. И все как головой об стену -результат нулевой.
Если стоблец в экселе предварительно сделать как текстовый, то адо его воспринимает как текстовый соответственно. Но вылезает проблема с датами. И вот на этапе приведения дат к удобочитаемому виду и вылезает бяка. как видим тип данных WideString. При попытке сохранить текст вылезает ошибка: Без разницы щелкаешь ты по другому полю в DBGrid или же через обработчик в отдельной кнопке:
0
|
||||||
|
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
|
|
| 20.12.2021, 11:10 | |
|
Ты же пишешь результат преобразования в то же самое строковое поле, у которого есть фиксированная длина. И этой длины мало для записи развернутой даты , если widechar то для даты нужно 20 байт.
0
|
|
|
1 / 1 / 0
Регистрация: 07.09.2021
Сообщений: 105
|
|
| 20.12.2021, 12:07 [ТС] | |
|
И эту проблему с помощью адо никак не обойти?
0
|
|
| 20.12.2021, 12:07 | |
|
Как задать формат колонки дата-грида программно? Как поменять формат даты у пользовательского свойства с типом дата? Как проверить, что дата подходит под наш формат времени? делфи и эксель
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации:
1. Вернуть возможность использования знаков | 1 l I;. . .
|
|
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С.
Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
|
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию?
Фраза «Любая достаточно развитая технология неотличима от магии». . .
|
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль?
Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
|
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология.
«Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
|