Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.11.2013, 11:58
oleg_c# oleg_c# вне форума
Прохожий
 
Регистрация: 23.11.2013
Сообщения: 6
Версия Delphi: 2010
Репутация: 10
По умолчанию Проблема с открытием документа 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  
Старый 23.11.2013, 12:05
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

msw пустое?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 23.11.2013, 12:24
oleg_c# oleg_c# вне форума
Прохожий
 
Регистрация: 23.11.2013
Сообщения: 6
Версия Delphi: 2010
Репутация: 10
По умолчанию

точно не скажу, но
ранее вызвана функция
Код:
 // Открываем Word
  if not OpenWord(msword) then
  begin
    ShowMessage('Ошибка открытия MS Word');
    exit;
  end;
  msword.Application.DisplayAlerts := false; // отключаем предупреждения
документ word уже создан...

Последний раз редактировалось M.A.D.M.A.N., 23.11.2013 в 12:49.
Ответить с цитированием
  #4  
Старый 23.11.2013, 13:58
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от oleg_c#
точно не скажу, но
А отладчик что по этому поводу говорит?
Ответить с цитированием
  #5  
Старый 23.11.2013, 15:27
oleg_c# oleg_c# вне форума
Прохожий
 
Регистрация: 23.11.2013
Сообщения: 6
Версия Delphi: 2010
Репутация: 10
По умолчанию

с отладкой я не разговариваю.. не то что бы принципиально.
просто второй раз открыл делфи код.
пользуюсь ShowMessage.. и открылись новые подробности дела.
файл не открывается, потому что его НЕТУ!!
более ранний метод не копирует шаблон , метод выглядит так CopyFile(PChar(templatepath + cbTemplate.Items[cbTemplate.ItemIndex]),
PChar(frmMain.sdReport.FileName), true)
почему не копирует для связки windows xp и word2003

НЕПОНИМАЮ!?
Ответить с цитированием
  #6  
Старый 23.11.2013, 15:37
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

function OpenSample(var msw: OleVariant; path: string): boolean;
предполагается что у вас до вызова функции был предварительно создан объект Word.
Код:
 WordApp := CreateOleObject('Word.Application');
...
OpenSample(WordApp, 'c:\test.doc');
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 23.11.2013, 15:42
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от oleg_c#
с отладкой я не разговариваю.. не то что бы принципиально.
просто второй раз открыл делфи код.
пользуюсь ShowMessage.. и открылись новые подробности дела.
файл не открывается, потому что его НЕТУ!!
более ранний метод не копирует шаблон , метод выглядит так CopyFile(PChar(templatepath + cbTemplate.Items[cbTemplate.ItemIndex]),
PChar(frmMain.sdReport.FileName), true)
почему не копирует для связки windows xp и word2003

НЕПОНИМАЮ!?
Что говорит по этому поводу GetLastError?

p.s. Если CopyFile не может скопировать файл, она возвращает Ложь (False) и устанавливает в LastError код ошибки (справка в MSDN, справка по-русски).
Узнать какая ошибка случилась можно примерно так:
Код:
  if not CopyFile(.....) then ShowMessage(SysErrorMessage(GetLastError));
Ответить с цитированием
  #8  
Старый 23.11.2013, 15:52
oleg_c# oleg_c# вне форума
Прохожий
 
Регистрация: 23.11.2013
Сообщения: 6
Версия Delphi: 2010
Репутация: 10
По умолчанию

SysErrorMessage говорит что не удается найти указанный путь
Ответить с цитированием
  #9  
Старый 23.11.2013, 15:59
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от oleg_c#
SysErrorMessage говорит что не удается найти указанный путь
Значит так и есть.
Проверяй примерно так:
Код:
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  
Старый 23.11.2013, 16:07
oleg_c# oleg_c# вне форума
Прохожий
 
Регистрация: 23.11.2013
Сообщения: 6
Версия Delphi: 2010
Репутация: 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  
Старый 23.11.2013, 16:23
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от oleg_c#
да так и есть
// Открытие 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;
.....
Почему созданный объект здесь присваивается какой-то непонятной переменной "msword" и зачем этой функции тогда параметр "msw"?

Цитата:
Сообщение от oleg_c#
Код:
// Загрузка шаблона MS Word
function OpenSample(var msw: OleVariant; path: string): boolean;
begin
.....
А как вызов этой функции происходит?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:32.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter