Gadzila |
Отправлено: 16.07.2003, 11:27 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 21
|
Воспользовался FAQ и статьями по вопросу OLE,
(за что превеликая благодарность организаторам сайта)
Однако наткнулся на одну непонятку,
при компиляции проэкта со снатой галочкой:
Build with runtime packages
не отрабатывает открытие книги Excel
books = app.OlePropertyGet("Workbooks");
books.Exec(Procedure("Open")<<"c:\nal\reestr.xls");
Вылетает экссепшн,
Есть подозрение что чет в настройках проэкта недопрописал |
|
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 |
|
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
|
Без изменений!
Да собственно переживу пока, уже поставил бухгалтеру на тачку Билдер
Тут попутный вопрос, переделываю вывод в 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();
естественно — программа другая и фунции не такие как написал.
А компилится она всегда без ошибки, если бувы правильно написаны,
ошибка проявляется только во время исполнения, если в вызываемом объекте нет чего-либо из того что вызываешь. |
|