Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2009, 19:06   #1
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию изменение *.DOC - файлов

в файле DOC у меня размещены метки типа <aaa>, <bbb>, <ccc> ...
не подскажите, как мне можно заменить эти <aaa>, <bbb>... на соответствующие строковые константы str1, str2... при этом не порушив разметку документа DOC?
Bayazet вне форума Ответить с цитированием
Старый 18.02.2009, 22:07   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не рекомендую...
А вот если Вы сохраните в формате RTF (RichText Format)(причём расширение можно поставить и DOC), тогда в нём можно искать и заменять Ваши метки.

по этом принципу, например, сделан бесплатный RepoRTF - со странички A_PL_ simple's home page
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.02.2009, 08:12   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не рекомендую...
Да чего ж? Автору просто стоит подцепить WordDocument и найти нужные методы в его API.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.02.2009, 08:43   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Виталий, не дискуссии ради, а просто чтобы для себя прояснить - WordDocument - это обёртка над OLE? т.е. для того, чтобы программа работала, потребуется установленный MS Word ? :-(

и ещё, мне показалось, что автор вопроса хочет менять данные прямо внутри бинарного файла (формата .DOC). Так может получится ТОЛЬКО если заменяемый шаблон ТОЧНО такого же размера, как и вставляемый текст...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.02.2009, 09:11   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
потребуется установленный MS Word ?
Ну а чего б нет?
Цитата:
что автор вопроса хочет менять данные прямо внутри бинарного файла
Плохая идея, согласись. Проще Ворд поставить и не морочится
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.02.2009, 15:15   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Виталий, Вы не поверите, многие огранизации/фирмы вынуждены отказываться от установки MS Office, т.к. он стоит достаточно приличных денег.. :-)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.02.2009, 15:37   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поверю, Серж, но я никогда не говорил о лицензионках )

Ломанное форева!
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.02.2009, 15:43   #8
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Цитата:
Плохая идея, согласись. Проще Ворд поставить и не морочится
Поддерживаю !!! В таких вещах как управление офисными программами и их документами лучше всего пользоваться стандартными методами, хотя бы для избежания потери времени на поиск ответа на специфическую проблему по которой даже у Гугла "не совпадений" ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 24.02.2009, 13:13   #9
Bayazet
Форумчанин
 
Регистрация: 08.12.2008
Сообщений: 156
По умолчанию

неплохая дискуссия вышла.
но вопрос все еще открыт (некоторое время у меня не было доступа к сети) :
каким способом мне можно заменять свои "теги" на какие-то другие строковые константы?

ворд выбирается не случайно - в doc-шаблонах нарисованы сложные таблицы с разными видами границ в оных
Bayazet вне форума Ответить с цитированием
Старый 24.02.2009, 14:16   #10
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Вот было у меня. Взято не помню где.
Код:
type
  TWordReplaceFlags = set of (wrfReplaceAll, wrfMatchCase, wrfMatchWildcards);
......
......
function WordStringReplace(ADocument: TFileName; SearchString, ReplaceString:string; Flags: TWordReplaceFlags): Boolean;
const wdFindContinue = 1;  wdReplaceOne = 1;  wdReplaceAll = 2;  wdDoNotSaveChanges = 0;
var WordApp: OLEVariant;
begin
  Result := False;
  if not FileExists(ADocument) then
  begin
    ShowMessage('Файл не найден!');
    Exit;// если файла нет - ВЫХОД из функции
  end;
  try WordApp := CreateOLEObject('Word.Application');
  except on E: Exception do
    begin
      E.Message := 'Word недоступен'; // Word не установлен на компе
      raise;
    end;
  end;
  try
    WordApp.Visible := False;
    WordApp.Documents.Open(ADocument);
    WordApp.Selection.Find.ClearFormatting;
    WordApp.Selection.Find.Text := SearchString;
    WordApp.Selection.Find.Replacement.Text := ReplaceString;
    WordApp.Selection.Find.Forward := True;
    WordApp.Selection.Find.Wrap := wdFindContinue;
    WordApp.Selection.Find.Format := False;
    WordApp.Selection.Find.MatchCase := wrfMatchCase in Flags;
    WordApp.Selection.Find.MatchWholeWord := False;
    WordApp.Selection.Find.MatchWildcards := wrfMatchWildcards in Flags;
    WordApp.Selection.Find.MatchSoundsLike := False;
    WordApp.Selection.Find.MatchAllWordForms := False;
    { СОБСТВЕННО ПОИСК}
    if wrfReplaceAll in Flags then WordApp.Selection.Find.Execute(Replace := wdReplaceAll)
    else WordApp.Selection.Find.Execute(Replace := wdReplaceOne);
    { Сохраняем документ там же }
    WordApp.ActiveDocument.SaveAs(ADocument);
    Result := True;// Все в норме
    WordApp.ActiveDocument.Close(wdDoNotSaveChanges);
  finally
    WordApp.Quit; WordApp := Unassigned; // закрываем ОБЯЗАТЕЛЬНО иначе экземпляры Word останутся "висеть" в памяти
  end;
end;
Использование :
Код:
WordStringReplace('C:\Файл тест.doc', 'Ку-ку', 'Ка-ка', [wrfReplaceAll]);
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ОТКРЫТИЕ DOC ФАЙЛОВ KurtWagner Компоненты Delphi 3 04.02.2009 11:47
структура файлов doc furstenberg Общие вопросы Delphi 0 17.01.2009 21:53
Изменение типа музыкальных файлов G@rGul'YA Свободное общение 3 08.08.2008 16:48
Программное обращение к свойствам файлов и их изменение lemonhead Общие вопросы Delphi 1 24.07.2008 10:20
Импорт doc и pdf файлов в базу omi БД в Delphi 3 30.06.2007 00:37