![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 09.06.2014
Сообщений: 5
|
![]()
Доброго дня.
Есть проект написанный в Delphi XE, где обращение к Excel основано на позднем связывании. В XE3 проект, понятное дело, компилируется без ошибок, но во время исполнения выдает ошибки обращения к методам Excel. Это как-нибудь лечится без перехода на раннее связывание? |
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Текст ошибок в студию.
Если метод не найден, то значит не Делфи тут виновато а просто такого метода в этой версии оффиса в доступности для OLE Automation уже нет.
I'm learning to live...
|
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 09.06.2014
Сообщений: 5
|
![]()
Сама ошибка:
Метод PasteSpecial из класса Range завершен неверно. Прмерный код написал ниже: Код:
В том-то и дело, что есть. Проект скомпилированный в Delphi XE работает без вопросов. Все что нашел в inet по этой теме: http://www.add-in-express.com/forum/...ID=1&TID=11377 Но я не могу преобразовать все вызовы в раннее связывание. И это не единственный метод, который не работает, но некоторые работают нормально. Кстати, в XE5 та же проблема. Stilet Ты правда из Краматорска? Вот полный "не работающий" пример: Код:
Последний раз редактировалось Stilet; 09.06.2014 в 19:53. |
![]() |
![]() |
![]() |
#4 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Я с такой проблемой в лазарусе столкнулся. Цитата:
I'm learning to live...
|
||
![]() |
![]() |
![]() |
#5 | ||
Новичок
Джуниор
Регистрация: 09.06.2014
Сообщений: 5
|
![]() Цитата:
Вариант с явным указанием имен параметров (см. ниже) тоже не работает. vRange2.PasteSpecial(Paste := xlPasteFormats ); Цитата:
Беспредел, который у вас происходит, нам во всех деталях показывают. Непонятно только почему всё этими репортажами и заканчивается. Уже стыдно за Россию становится. |
||
![]() |
![]() |
![]() |
#6 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Хотя честно признаюсь - я бы выбрал не xls а xml для сохранения данных, передаваемых потом в Экзель. Т.е. создать XML файл, а потом открыть его в экзеле - ИМХО самый простой путь. API Оффиса качалось от версии к версии, и по разным компиляторам по разному воспринималось. Вообще лучше бы ты озвучил задачу - зачем тебе понадобилось данные через OLE передавать в оффис. Уверен что решить ее можно гораздо эффективнее, чем то что ты делаешь сейчас. Цитата:
I'm learning to live...
|
||
![]() |
![]() |
![]() |
#7 | |
Новичок
Джуниор
Регистрация: 09.06.2014
Сообщений: 5
|
![]() Цитата:
Необходимо построить отчет по запросу из базы данных, а в Excel хранится шаблон отчета - внешний вид, расположение и формат ячеек полей для одной записи запроса к БД. Программа считывает эту информацию, дублирует представление для каждой записи и заполняет её реальными значениями. И таких отчетов уже много, а я хотел перейти на более старшую версию Delphi. |
|
![]() |
![]() |
![]() |
#8 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
![]()
Раньше для таких отчетов использовали xlReport, но он перестал поддерживаться, хотя по Сети ходят советы под адаптацию исходников под новые версии Delphi. Если xlReport работает, можно подсмотреть в его исходниках, как он это делает. Если правильно помню, он использовал какой-то хитрый механизм, вроде DDE вместо OLE.
В разработке: воспроизводственный контур ИТ
|
![]() |
![]() |
![]() |
#9 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Ну если у тебя одна Делфи норм работает а вторая косячит, то можно только развести руками... Максимум что тебе посоветую не использовать PasteSpecial(). Переноси данные другими методами. Используй cell. Или range
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#10 |
Новичок
Джуниор
Регистрация: 09.06.2014
Сообщений: 5
|
![]()
Вот так работает (см. ниже), т.е. все параметры должны иметь тип oleVariant.
Причем true и false можно передавать напрямую. Решение подходит для всех проблемных методов. vRange2.PasteSpecial( oleVariant(xlPasteFormats), oleVariant(xlPasteSpecialOperationN one), False, False); |
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Позднее связывание в COM сервере | lexaltd | Общие вопросы Delphi | 2 | 01.11.2013 12:32 |
Excel-Autocad позднее связывание | gsg | Microsoft Office Excel | 6 | 21.10.2013 16:58 |
meta-дата и позднее связывание | Voipp | C# (си шарп) | 1 | 04.07.2013 18:03 |
Позднее связывание и полиморфизм Delphi | iCaesy | Помощь студентам | 14 | 09.10.2011 23:55 |
Позднее связывание | _Art_ | Общие вопросы C/C++ | 1 | 19.12.2009 12:53 |