C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
C++ Builder6 & OLE, Build with runtime packages ???????
Gadzila
Отправлено: 16.07.2003, 11:27


Ученик-кочегар

Группа: Участник
Сообщений: 21



Воспользовался FAQ и статьями по вопросу OLE,
(за что превеликая благодарность организаторам сайта) biggrin.gif
Однако наткнулся на одну непонятку,
при компиляции проэкта со снатой галочкой:
Build with runtime packages
не отрабатывает открытие книги Excel
books = app.OlePropertyGet("Workbooks");
books.Exec(Procedure("Open")<<"c:\nal\reestr.xls");
Вылетает экссепшн,
Есть подозрение что чет в настройках проэкта недопрописал sad.gif
Gedeon
Отправлено: 16.07.2003, 12:07


Ветеран

Группа: Модератор
Сообщений: 1742



Ну батенька если ты снимаешь эту галочку то экзешник строится без необходимых библиотек и понятно будет эксепшн, но если запускать прогу на тачке где есть билдер то должно быть все нормально.
iAlexander
  Отправлено: 16.07.2003, 13:09


Дежурный стрелочник

Группа: Участник
Сообщений: 70



А вот с Excel'ем, если использовать уроки данного сайта, возникает такая проблема:
Если жмакать "Просмотр книги" в ПЕРВЫЙ раз, то он открывается и показывает Workbook, если в следующий — Workbook формируется (это точно — т.к. его можно распечатать), но на его месте — пустота (виден рабочий стол). Если выгрузить Excel из памяти, то снова можно один раз просмотреть. Причем на разных версиях Win и Office данная проблема может и не проявляться.
winXP + ofXP — есть
win98SE + of97 — не замечено.
win98SE + ofXP — есть

Подозреваю, что не совсем корректно происходит закрытие Excel и освобождение OLE переменных.
Да, и еще бывает ИногдА нечто совершенно восхитительное: "ERROR: Недоступен сервер RPC"

На всякий случай обрывки:
--------------- // инициализируем Excel ------------------------
try {
App=Variant::GetActiveObject("Excel.Application");
}
catch(...) {
try { App=Variant::CreateObject("Excel.Application"); }
catch (...) {
Application->MessageBox("Невозможно открыть Microsoft Excel!"
" Возможно, приложение не установлено на компьютере.","Ошибка",MB_OK+MB_ICONERROR);
}
}

-----------------// открытие книги FName -------------------------
try {
App.OlePropertyGet("WorkBooks").OleProcedure("Open", FName.c_str(), 0, false, 1);
Sheet = App.OlePropertyGet("WorkSheets",1);
} catch(...) {
Application->MessageBox(AnsiString(("Ошибка открытия книги Microsoft Excel! Путь: " + FName)).c_str(),"Ошибка",MB_OK+MB_ICONERROR);
return 0;
}


-------------//закрываем Excel -------------------------
try {
App.OlePropertyGet("WorkBooks",1).OleProcedure("Close");
}
catch(...) {
ShowMessage("Не забудьте сами закрыть Excel.");
}
//---

// освобождаем ресурсы
App.OleProcedure("Quit");
Sheet.Clear();
App.Clear();


Видимо, придется читать справку MS по VBA wink.gif
Gadzila
Отправлено: 17.07.2003, 10:03


Ученик-кочегар

Группа: Участник
Сообщений: 21



>Ну батенька если ты снимаешь эту галочку то экзешник строится без>необходимых библиотек и понятно будет эксепшн, но если запускать>прогу на тачке где есть билдер то должно быть все нормально.
^^^^^^^^^^^^^^^^^??
Эт понятно!!!!! Должно быть!!!! Но увы ................
Прикол в том что все это происходит на тачке с С++Билдером!
Gadzila
Отправлено: 17.07.2003, 10:15


Ученик-кочегар

Группа: Участник
Сообщений: 21



QUOTE (iAlexander @ 16/07/2003, 14:11)
А вот с Excel'ем, если использовать уроки данного сайта, возникает такая проблема:

Подобного не заметил, у меня C++ Builder6, непропатченный,
Win2000Server, Office2000,
нормально открывается документ, и не один раз.......
А откуда у тебя глюки с RPC — эт вообще загадка!
Если я не ошибаюсь, он никаким боком и рядом не лежал с OLE.

По поводу повторного открытия у меня другой глюк:
после работы с OLE, если я открываю любой документ Excel (просто нажатием Enter) то вижу именно рабочий стол, с вехней частью Excel,
хотя документ считается открытым............
iAlexander
  Отправлено: 17.07.2003, 11:50


Дежурный стрелочник

Группа: Участник
Сообщений: 70



Это не другая, а как раз эта проблема.

Прошу отметить, что первое сообщение связано с этой проблемой лишь темой.
Gedeon
Отправлено: 17.07.2003, 12:09


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (Gadzila @ 17/07/2003, 11:05)
Эт понятно!!!!! Должно быть!!!! Но увы ................
Прикол в том что все это происходит на тачке с С++Билдером!

А как ты включаешь заголовочный файл
CODE


1)#include <Office_2K_SRVR.h> — так правильно

2)#include "Office_2K_SRVR.h" — так вставляет билдер, если добавлять обьект.

Если у тебя второй вариант измени на первый, если не поможет пиши, что-нибудь придумаем



Отредактировано Admin — 25/07/2003, 14:07
Gedeon
Отправлено: 17.07.2003, 12:11


Ветеран

Группа: Модератор
Сообщений: 1742



Запарочка вышла
Правильные варианты такие

CODE


1)#include <Excel_2K_SRVR.h>

2)#include "Excel_2K_SRVR.h"


Отредактировано Admin — 25/07/2003, 14:05
Gadzila
Отправлено: 17.07.2003, 16:11


Ученик-кочегар

Группа: Участник
Сообщений: 21



Я Excel_2K_SRVR.h не использую,
работаю через comobj.hpp и OLEServer.hpp.
Причем на тестовом проэкте в котором чисто открытие-запись-закрытие
все нормально. Практически один в один перенес на рабочий проэкт -
глючит (зараза этакая!).
Gedeon
Отправлено: 18.07.2003, 10:14


Ветеран

Группа: Модератор
Сообщений: 1742



Попробуй эти заголовочные файлы скопировать в директорию с твоим проектом, напиши, что получится
Gadzila
Отправлено: 18.07.2003, 14:25


Ученик-кочегар

Группа: Участник
Сообщений: 21



Без изменений!
Да собственно переживу пока, уже поставил бухгалтеру на тачку Билдер wink.gif
Тут попутный вопрос, переделываю вывод в Word на OLE,
и чет не получается сохранить документ, ни так:
app.OlePropertyGet("Documents",1).OleProcedure("SaveAs","c:\nal\podatkova.doc");
ни эдак:
doc.Exec(Procedure("SaveAs")<<"c:\nal\podatkova.doc");
Компилит нормально, а при выполнении говорит типа не знаю такого "SaveAs" ???
Не в курсах че не нравится?
З.Ы. Кстатьи вариант освобождения переменных на Win2000+Office2000 помогает четко, а на Win98+Office97 когда как .....
Gedeon
Отправлено: 18.07.2003, 14:58


Ветеран

Группа: Модератор
Сообщений: 1742



Попробуй как-то так

c:\\nal\\podatkova.doc

Вообще я где-то читал, что с OLE лучше работать с типом widestring, тогда исчезает множество запарок, попробуй еще, если не поможет

widestring MyPath = "c:\\nal\\podatkova.doc";

потом сконверти эту переменную и скорми её.
Gadzila
Отправлено: 23.07.2003, 13:54


Ученик-кочегар

Группа: Участник
Сообщений: 21



Пробовал по всякому, результат тот-же.
KrisK
Отправлено: 23.07.2003, 18:02


Не зарегистрирован







Я с Wordой не работал, но было у меня что-то вроде
doc.Exec(Procedure("SaveAs")<<"c:\nal\podatkova.doc");
только описывал я это так:

Procedure SaveAs("SaveAs");
doc.Exec(SaveAs<<"c:\nal\podatkova.doc");

а перед повторным вызовом делал

SaveAs.ClearArgs();

естественно — программа другая и фунции не такие как написал.

А компилится она всегда без ошибки, если бувы правильно написаны,
ошибка проявляется только во время исполнения, если в вызываемом объекте нет чего-либо из того что вызываешь.

Вернуться в Вопросы программирования в C++Builder