|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема с открытием документа word 2003
Проблема с открытием документа 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
|
||||
|
||||
Цитата:
Цитата:
|