![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
слияние 2-х файлов word в один
alpp © (2010-06-03 20:34:00)Объединяю файлы, возникла следующая проблема.
uses ComObj;
......
var wordd:variant;
begin
......
wordd:=CreateOleObject('word.application');
wordd.documents.open(FileName := ResultFolderPath+'\main.doc', ReadOnly := False);
wordd.documents.open(FileName := TmpFilePath1, ReadOnly := False); // открываем файл №1
wordd.ActiveDocument.range.copy; //копируем все в файле №1
wordd.Documents.Item(2).Activate;//переключаемся на main
wordd.ActiveDocument.range.paste;//вставляем в main
wordd.Documents.Item(1).Activate;
worduk.ActiveDocument.Close(wdDoNotSaveChanges); // закрываем файл №1
wordd.documents.open(FileName := TmpFilePath2, ReadOnly := False); // открываем файл №2
wordd.ActiveDocument.range.copy; //копируем все в файле №2
wordd.Documents.Item(2).Activate;//переключаемся на main
///????????????????????????????????????????????????????
а вот дальше вопрос - как вставить скопированное в конецmain? wordd.ActiveDocument.range.paste просто заменяет скопированное ранее...
YurikGL (2010-07-18 15:10:00) [1]
> надо вначале передвинуть у ворда текстовый курсор в конец.
var
vr:olevariant;
...
vr:=wdStory;
w1.Selection.EndKey(vr,EmptyParam);
TStas (2010-07-14 23:44:00) [2]Чтобы вставить именно в конец, надо вначале передвинуть у ворда текстовый курсор в конец. Как именно это делать, я сходу не вспомню, но всё делал имеено так:
1) Берём ворд, открываем в нём какой-то документ, содержащий длинный текст.
2) Запускаем запись макроса.
3) Нажимаем в ворде Ctrl + End
4) Останавливаем запиь макроса.
5) Переходим в редактор макроса. Вдумчиво выбираем из него едиственную строку, в которой и есть наш Ctrl + End.
6) Выбираем из него неведомые дельфям вордовские константы.
7) Пишем в редакторе макросов MsgBox(гордое_имя_константы)
8) Запускаем макрос на выполнение и пишем на бумажку значение константы.
9) В Дельфях объявляем константы с теми же именами и присваиваем им их значения.
10) Перед строкой вставки содержимого второго документа ставляем выуженную строку из вордовского бейсика.
Это нге может не работать. Я сам именно таким способом делал в ворде весьма сложные документы, пока не написал себе надстройку над вордом.
Xmen (2010-07-14 09:51:00) [3]код можете на емаил отправить у меня точно такая проблема и не могу решить его до конца. ero1@mail.ru
Спасибо заранее.
Andy BitOff (2010-06-09 14:20:00) [4]Я, конечно, дико извиняюсь, но почему не так:
for i:=1 to N do begin
WordApp.Selection.EndKey(wdStory);
WordApp.Selection.InsertFile(TmpFilePath+inttostr(i), '', False, False, False);
end;
alpp (2010-06-06 23:10:00) [5]Спасибо, получилось так:
wordd.documents.open(FileName := ResultFolderPath+'\main.doc', ReadOnly := False);
for i:=1 to N do begin
wordd:=CreateOleObject('word.application');
wordd.documents.open(FileName := TmpFilePath+inttostr(i), ReadOnly := False);
Wordd.Selection.WholeStory;
Wordd.Selection.Copy;
wordd.Documents.Item(ResultFolderPath+'\main.doc').Activate;
vr:=wdStory;
wordd.Selection.EndKey(vr,EmptyParam);
wordd.selection.paste;
wordd.Documents.Item(TmpFilePath+inttostr(i)).Activate;
Wordd.ActiveDocument.Close(wdDoNotSaveChanges);
end;
wordd.Documents.Item(ResultFolderPath+'\main.doc').Activate;
Wordd.ActiveDocument.Save;
...
YurikGL (2010-06-05 16:39:00) [6]Если ничего не путаю, то так
> wordd:=CreateOleObject('word.application');
> wordd.documents.open(FileName := ResultFolderPath+'\main.
> doc', ReadOnly := False);
> wordd.documents.open(FileName := TmpFilePath1, ReadOnly
> := False); // открываем файл №1
> wordd.ActiveDocument.range.copy; //копируем все в файле
> №1
> wordd.Documents.Item(2).Activate;//переключаемся на main
> wordd.ActiveDocument.range.paste;//вставляем в main
> wordd.Documents.Item(1).Activate;
> worduk.ActiveDocument.Close(wdDoNotSaveChanges); // закрываем
> файл №1
>
> wordd.documents.open(FileName := TmpFilePath2, ReadOnly
> := False); // открываем файл №2
> wordd.ActiveDocument.range.copy; //копируем все в файле
> №2
> wordd.Documents.Item(2).Activate;//переключаемся на main
>
vr:=wdStory;
w1.Selection.EndKey(vr,EmptyParam);
wordd.ActiveDocument.range.paste;//вставляем в main
А вообще, запиши макрос, и посмотри, как он выглядит.
oldman (2010-06-05 14:09:00) [7]
> Суть - N вордовских файлов объединить в один...
У тебя что там, миллион файлов?
Ворд сам прекрасно добавляет файлы в конец текста.
alpp (2010-06-05 10:03:00) [8]видимо я что-то другое делаю неправильно, все равно в итоговом файле данные только из второго файла. Кому не сложно - скиньте пожалуйста код. Суть - N вордовских файлов объединить в один... Задача вроде тривиальная, а третий день ничего сделать не могу:(
YurikGL (2010-06-04 21:29:00) [9]Перед тем, как вставлять второй кусок надо перевести курсор в конец текста...
var
vr:olevariant;
vr:=wdStory;
w1.Selection.EndKey(vr,EmptyParam);
Пример использования тут http://www.delphimaster.ru/articles/dbtoword/index.html