![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Проблема с открытием документа word 2003
Здравствуйте. Приходится разбираться с чужим кодом. Приложение windows приложение (среда разработки Delphi2010) работает с документами Word 2010, но выкидывает exception в случае, когда установлен word2003 (точнее windows 7 c word2010 работает, а windows XP и word2003 не работает) Ошибка выбрасывается в методе Оpen , функция полностью приведена ниже Код:
// Загрузка шаблона MS Word function OpenSample(var msw: OleVariant; path: string): boolean; begin msw.Documents.Open(path); // msw-System.OleVariant здесь получаем исключение end; Последний раз редактировалось M.A.D.M.A.N., 23.11.2013 в 12:48. |
|
#2
|
||||
|
||||
|
msw пустое?
|
|
#3
|
|||
|
|||
|
точно не скажу, но
ранее вызвана функция Код:
// Открываем Word
if not OpenWord(msword) then
begin
ShowMessage('Ошибка открытия MS Word');
exit;
end;
msword.Application.DisplayAlerts := false; // отключаем предупрежденияПоследний раз редактировалось M.A.D.M.A.N., 23.11.2013 в 12:49. |
|
#4
|
||||
|
||||
|
Цитата:
|
|
#5
|
|||
|
|||
|
с отладкой я не разговариваю.. не то что бы принципиально.
просто второй раз открыл делфи код. пользуюсь ShowMessage.. и открылись новые подробности дела. файл не открывается, потому что его НЕТУ!! более ранний метод не копирует шаблон , метод выглядит так CopyFile(PChar(templatepath + cbTemplate.Items[cbTemplate.ItemIndex]), PChar(frmMain.sdReport.FileName), true) почему не копирует для связки windows xp и word2003 НЕПОНИМАЮ!? |
|
#6
|
||||
|
||||
|
function OpenSample(var msw: OleVariant; path: string): boolean;
предполагается что у вас до вызова функции был предварительно создан объект Word. Код:
WordApp := CreateOleObject('Word.Application');
...
OpenSample(WordApp, 'c:\test.doc'); |
|
#7
|
||||
|
||||
|
Цитата:
p.s. Если CopyFile не может скопировать файл, она возвращает Ложь (False) и устанавливает в LastError код ошибки (справка в MSDN, справка по-русски). Узнать какая ошибка случилась можно примерно так: Код:
if not CopyFile(.....) then ShowMessage(SysErrorMessage(GetLastError)); |
|
#8
|
|||
|
|||
|
SysErrorMessage говорит что не удается найти указанный путь
|
|
#9
|
||||
|
||||
|
Цитата:
Проверяй примерно так: Код:
var
FileName1, FileName2: String;
begin
FileName1 := templatepath + cbTemplate.Items[cbTemplate.ItemIndex];
if not FileExists(FileName1) then
raise Exception.CreateFmt('Не найден файл "%s"', [FileName1]);
FileName2 := frmMain.sdReport.FileName;
if not DirectoryExists(ExtractFileDir(FileName2)) then
raise Exception.CreateFmt('Не найден каталог "%s"', [ExtractFileDir(FileName2)]);
if not CopyFile(Pointer(FileName1), Pointer(FileName2), True) then RaiseLastOSError;
end; |
|
#10
|
|||
|
|||
|
да так и есть
// Открытие MS Word Код:
function OpenWord(var msw: OleVariant): boolean;
begin
try
OpenWord := false;
// MsWord.Documents.Add;
msword := CreateOleObject('Word.Application');
// MsWord.Documents.Add;
//ShowMessage('open word'); nil
// msword:=CreateOleObject('Word.Basic');
// msword.AppShow;
OpenWord := true;
except
try
// msword := CreateOleObject('com.sun.star.ServiceManager');
except
OpenWord := false;
end;
end;
end;
// Загрузка шаблона MS Word
function OpenSample(var msw: OleVariant; path: string): boolean;
begin
//ShowMessage(path);
//msw.Documents.OpenOld(path,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam,emptyparam);
//msw.ConnectTo(msw.ActiveDocument);
msw.Documents.Open(path);
// msw.FileOpen(path);
//msw.Documents.Add(path,EmptyParam);
OpenSample := true;
//ShowMessage(path);
end;
и есть |
|
#11
|
||||
|
||||
|
Цитата:
Цитата:
|