Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Excel и Delphi -- загвоздка.


Автор: Алекс С. 27.8.2002, 22:01
Может кто подскажет как обойти/исправить такую "умную" экселевскую фишку, как автоматическая конвертация вещественных чисел, после того как их загрузили в клетки Экселя. Дело в том, что насколько я понимаю, в клетки можно записать только строки, т.е. когда пишу данные пользую FloatToStr и дальше вставляю string-и туда, куда нужно. Но тут возникает такая проблема -- несмотря на предварительное и последующее форматирование клеток, Эксель продолжает считать введённые данные строками (в правом верхнем углу ещё появляется такой зелёный треугольничек). Мелкософт в файле помощи предлагает чудовищное решение данной проблемы когда речь идёт о переводе целой области в числа. Да и поодиночке не знаю как это сделать (программно, в смысле) -- пишущий макро плейер не "ловит" процесс перевода, поэтому VBA кода тоже нет.
Может уже кто сталкивался с подобной проблемой? Подскажите, пожалуйста!

Автор: Vit 27.8.2002, 23:23
Всё-таки Excel это не база данных... Чисто теоретически попробуй обратится не через OLE, а через DAO. Посмотри у нас в FAQ  - там описан этот способ, только когда будешь писать кверю на создание таблиц, попробуй указать именно те типы столбцов которые должны быть.

Автор: Алекс С. 28.8.2002, 00:27
Да я и не пытаюсь пользовать Эксель в качестве БД, мне нужно просто составить красивую и простую в понимании смету. Для этого я ввожу "сырые" (из сети, БД и т.д.) данные по определённому формату в одну книгу, и хочу чтобы мне эти данные моя прога согласно определённым закономерностям разбросала по шаблонам смет. Вот и всё! Я конечно не знаю, может быть это можно сделать и как-то по другому (например макросами), но меня вполне устраивает и медлительность и некоторая ненадёжность в данном случае (если её можно было бы избежать, то это было бы конечно здорово, но я не знаю как свести её к нулю).
Для всего этого и затеян весь сыр-бор. Самое прикольное, что буквально в одну колонку числа вводятся и становятся числами, а в соседней так и остаются строками при абсолютно одинаковом форматировании клеток. Как я не пытался определить хоть какую-нибудь закономерность в действия Экселя, всё вышло впустую. Именно поэтому мне кажется, что способ подключения (OLE, DAO) не играет особой роли, хоть я это обязательно попробую.
Впрочем, я уже готов пойти и извращенческим мелкософтовским путем, главное, чтобы пахало. Так что если кто знает как оформить Paste Special/Multiply в Дельфи, напишите пожалуйста маленький примерчик.
Ещё раз спасибо и прошу прощения, если мои просьбы и вопросы звучат слишком глупо -- я всего лишь начинающий  :withstupid

Автор: adminlion 28.8.2002, 04:26
Worksheets("Sheet1").Range("B1").FormulaR1C1 = "=SQRT(R1C1)"

Автор: Алекс С. 30.8.2002, 19:25
В общем ответ на собственный вопрос. Пока что обойти эту загвоздку получилось только копируя и вставляя данные из буфера обмена (вроде бы умные люди пишут, что так даже быстрее). Тогда Эксель признаёт числа числами. Есть одно "но" только -- почему-то не сохраняется форматирование клеток, в которые вставляется содержимое буфера. Ну да и ещё надо куда-нить сохранять то, что валяется в буфере перед собственным его использованием. Кстати, ещё одна фишка, которую я обнаружил чисто методом "научного тыка" -- это использование метода PasteSpecial для вставки из буфера, который освобождает от множества ненужных нюансов, как то ввод "лишних" параметров и позволяет вставлять данные в отдельную клетку, а не в целую область.

Автор: P&$ 2.9.2002, 15:21
www.delphikingdom.com/helloworld/excel3.htm
http://xxibek.com.ua/compiler/texts/excelapp.htm
Загляни сюда, может найдешь что нужное. :)

Автор: Vit 4.9.2002, 04:40
Ещё раз предлагаю использовать DAO (пример в нашем FAQ) - там ты обозначишь колонку как поле типа integer и будешь туда писать сразу цифры (а никакие не строки, без всякой там конвертации), тем более что если ты будешь использовать для создания листа 'Create Table' - что я настоятельно рекомендую, то ты прямо укажешь тип данных в столбце.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)