Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.08;
Скачать: CL | DM;

Вниз

слияние 2-х файлов word в один   Найти похожие ветки 

 
alpp ©   (2010-06-03 20:34) [0]

Объединяю файлы, возникла следующая проблема.

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-06-04 21:29) [1]

Перед тем, как вставлять второй кусок надо перевести курсор в конец текста...
var
 vr:olevariant;

vr:=wdStory;
w1.Selection.EndKey(vr,EmptyParam);


Пример использования тут http://www.delphimaster.ru/articles/dbtoword/index.html


 
alpp ©   (2010-06-05 10:03) [2]

видимо я что-то другое делаю неправильно, все равно в итоговом файле данные только из второго файла. Кому не сложно - скиньте пожалуйста код. Суть - N вордовских файлов объединить в один... Задача вроде тривиальная, а третий день ничего сделать не могу:(


 
oldman ©   (2010-06-05 14:09) [3]


> Суть - N вордовских файлов объединить в один...


У тебя что там, миллион файлов?
Ворд сам прекрасно добавляет файлы в конец текста.


 
YurikGL ©   (2010-06-05 16:39) [4]

Если ничего не путаю, то так

>   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

А вообще, запиши макрос, и посмотри, как он выглядит.


 
alpp ©   (2010-06-06 23:10) [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;
...


 
Andy BitOff ©   (2010-06-09 14:20) [6]

Я, конечно, дико извиняюсь, но почему не так:
for i:=1 to N do begin
 WordApp.Selection.EndKey(wdStory);
 WordApp.Selection.InsertFile(TmpFilePath+inttostr(i), "", False, False, False);
end;


 
Xmen   (2010-07-14 09:51) [7]

код можете на емаил отправить у меня точно такая проблема и не могу решить его до конца. ero1@mail.ru
Спасибо заранее.


 
TStas   (2010-07-14 23:44) [8]

Чтобы вставить именно в конец, надо вначале передвинуть у ворда текстовый курсор в конец. Как именно это делать, я сходу не вспомню, но всё делал имеено так:
1) Берём ворд, открываем в нём какой-то документ, содержащий длинный текст.
2) Запускаем запись макроса.
3) Нажимаем в ворде Ctrl + End
4) Останавливаем запиь макроса.
5) Переходим в редактор макроса. Вдумчиво выбираем из него едиственную строку, в которой и есть наш Ctrl + End.
6) Выбираем из него неведомые дельфям вордовские константы.
7) Пишем в редакторе макросов MsgBox(гордое_имя_константы)
8) Запускаем макрос на выполнение и пишем на бумажку значение константы.
9) В Дельфях объявляем константы с теми же именами и присваиваем им их значения.
10) Перед строкой вставки содержимого второго документа ставляем выуженную строку из вордовского бейсика.

Это нге может не работать. Я сам именно таким способом делал в ворде весьма сложные документы, пока не написал себе надстройку над вордом.


 
YurikGL ©   (2010-07-18 15:10) [9]


> надо вначале передвинуть у ворда текстовый курсор в конец.


var
vr:olevariant;
...
vr:=wdStory;
w1.Selection.EndKey(vr,EmptyParam);



Страницы: 1 вся ветка

Текущий архив: 2012.01.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
2-1317480831
Mishanja
2011-10-01 18:53
2012.01.08
Выделение строки в ListView


2-1317639592
alexdn
2011-10-03 14:59
2012.01.08
While и прочее


15-1315398270
Empleado
2011-09-07 16:24
2012.01.08
Конец OLE DB


15-1316107383
Kerk
2011-09-15 21:23
2012.01.08
Вот так Google продвигает свой поиск в России


4-1252985488
defen
2009-09-15 07:31
2012.01.08
серийный номер диска