Показать сообщение отдельно
Старый 20.01.2007, 17:32   #16  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от zinius Посмотреть сообщение
Бывало что выделении ячеек в столбце и присваивание им типа Text не помогало.
Лекарство - выделить весь столбец (по заголовку) и прописать ему Text.
Это при использовании ADO? Или при "иных удовольствиях"?
В случае ADO, если честно, не увидел разницы при установке формата "Text" для диапазона внутри столбца или всего столбца, выделяя щелчком по заголовку колонки Excel.

Но ваше лекарство подвигло меня дальнейшее изучение вопроса, и у меня получились некоторые доп.результаты, о которых я поведаю чуть позже, когда подготовлю наглядную табличку.

Пока же новая пилюля для Freeangel: достаточно проставить ведущие апострофы в первые 8 ячеек проблемной колонки, чтобы они распознавались ADO как текст.

Не обязательно во все 8, но так, чтобы текстовых было больше половины. Т.е. если у нас первые 3 ячейки - честный текст (т.е. с буквами), а следующие 5 ячеек - текст из цифр, то минимально надо добавить ведущий апостроф в две ячейки из пяти (чтобы текстовых ячеек стало 5 из 8 и они "победили" числа). Соответственно, в Registry ничего трогать не надо, но на всякий случай можно заглянуть туда и убедиться, что значение TypeGuessRows = 8.


Цитата:
Сообщение от Gustav Посмотреть сообщение
Пока же новая пилюля для Freeangel: достаточно проставить ведущие апострофы в первые 8 ячеек проблемной колонки, чтобы они распознавались ADO как текст.
Однако, я неправ...
Заставить-то мы заставили ADO считать наше поле текстовым... Но дело в том, что за пределами первых 8 ячеек все значения, состоящие из только цифр и в которые мы не проставили ведущий апостроф, превратились в пустые строки... Т.е. я "прав" на небольшом количестве ячеек (10-20), когда нетрудно проставить в них апострофы вручную. В 1000 же ячеек вручную апосторофы проставить проблематично... Ну что... чешем репу дальше...


Упс! Найдено новое средство (пилюлей уже боюсь называть, но, надеюсь, что это... победа...).

Допустим, наши данные для загрузки расположены на листе Sheet1 и проблемной является колонка A. Сделать надо следующее:

1. Скопировать всю проблемную колонку с данными на другой лист рабочей книги, например, Sheet2, для удобства - в те же ячейки, что и на листе Sheet1 (т.е. A2 в A2 и т.д.)
2. На листе Sheet1 заменить простые значения в проблемной колонке на формулы: в ячейку A2 ввести формулу =Sheet2!A2&"" , т.е. значение этой же ячейки с листа Sheet2, дополненное пустой строкой.
3. Скопировать формулу ячейки A2 на всю колонку на листе Sheet1.
4. Всё. Далее можно с листа Sheet1 читать данные при помощи ADO - вся колонка A корректно распознается как текст.

Если вас смущают формулы, то можно их заменить на значения при помощи Copy и PasteSpecial ("только значения"). Но будьте осторожны: дальнейшее редактирование какой-нибудь такой ячейки с текстом из цифр и последующее нажатие Enter приведет к превращению значения такой ячейки из текста в число и всё необходимо будет проделать сначала (хотя для одной ячейки как раз и можно воспользоваться ведущим апострофом ) .

P.S. Ну, и как обещал, на память выкладываю в файле свои изыскания, посвященные манипуляциям с форматами General/Text и апострофами. В процессе эксперимента я пользовался своим первым джобом из Поговорим об ADO. Прогнав его один раз и сгенерив эксельный файл, далее я комментировал первую часть джоба, посвященную экспорту, и запускал только импорт. Перед запуском импорта я терзал сгенеренный файл AdoTestBook.xls и смотрел, что затем попадает в инфолог Аксапты. Сделал я это, как видно из файла AdoResearch.xls, 9 раз ("шагов").
Вложения
Тип файла: xls AdoResearch.xls (19.0 Кб, 82 просмотров)