Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/32: Рейтинг темы: голосов - 32, средняя оценка - 4.91
sykes
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 11
1

Копирование текста Word

17.04.2011, 23:23. Просмотров 5978. Ответов 7
Метки нет (Все метки)

Здравствуйте, нужна помощь в решении следующей задачи:
Нужно скопировать достаточно большой фрагмент текста из вордовского документа А вордовский документ Б, не потеряв форматирования. В копируемых фрагментах текста присутствуют списки, но нет таблиц.
Должны быть определены хотябы места вставки(т.е. копирование всего документа А в определенное место в документе Б), в идеале конечно хотелось бы определить и места копирования. К примеру:
Найти и копировать из документа А ВСЕ что заключено между тегами [Copy][/Copy] в документ Б в место заключенное между тегами [Paste][/Paste] с заменой тэгов вставки.
Но в реализации я вас не ограничиваю если есть другие варианты с удовольсвием приму и их.
Помогите пожалуйста, заранее спасибо

Добавлено через 11 часов 21 минуту
ап, ---...---

Добавлено через 4 минуты
Вот почва для размышлений: код копирует весь документ 1 в определенное место в документе 2, но единственная проблема в том что он полностью заменяет весь текст в документе 2 на весь текст из документа 1.
А нужно чтобы одно ключевое слово из документа 2 заменилось на весь текст документа 1...
Надеюсь вы меня поняли

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Function FindAndReplace(ADocument1, ADocument2:TFileName; Str:string):boolean;
  Var WordDoc: OleVariant;
  const wdReplaceAll=1;
  Begin
   WordDoc:=CreateOLEObject('Word.Application');
   WordDoc.Visible:=false;
   WordDoc.Documents.Add(ADocument1);
   WordDoc.Documents.Add(ADocument2);
   WordDoc.Documents.Item(2).Activate;
  WordDoc.Selection.Find.MatchSoundsLike := False;
  WordDoc.Selection.Find.MatchAllWordForms := False;
  WordDoc.Selection.Find.MatchWholeWord := False;
  WordDoc.Selection.Find.Format := False;
  WordDoc.Selection.Find.Forward := True;
  WordDoc.Selection.Find.ClearFormatting;
  WordDoc.Selection.Find.Text:=Str;
  WordDoc.Selection.Find.Replacement.Text:=WordDoc.Documents.Item(1).Range.Text;
  FindAndReplace:=WordDoc.Selection.Find.Execute(Replace:=wdReplaceAll);
  WordDoc.ActiveDocument.SaveAs(ADocument2);
   WordDoc.Quit;
   WordDoc:=Unassigned;
  End;
procedure TForm1.Button1Click(Sender: TObject);
begin
FindAndReplace('C:/1.doc','C:/2.doc', '#paste');
end;
 
end.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2011, 23:23
Ответы с готовыми решениями:

Копирование из Word в Delphi
Всем доброе утро. Может кто сталкивался - подскажите, плиз. Если я программно...

Копирование объектов из WORD
Возможно ли скопировать обьекты(кружечки и тд) из WORD-файла на форму...

Копирование текста между тегами
Есть строка Fljsdklajkldaskdhalksdhl необходимо копировать текст только между...

Копирование части текста из файла
Здравствуйте, есть такая проблема, на форме два Edita, в которые будут писаться...

Копирование текста из сторонней программы
у меня при нажатии на кнопку открывается программа, в этой программе нужно...

7
sykes
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 11
19.04.2011, 17:57  [ТС] 2
---up---
0
sykes
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 11
21.04.2011, 11:46  [ТС] 3
up--------

Добавлено через 17 часов 28 минут
----------------up
0
IamPugalo
28 / 28 / 3
Регистрация: 14.04.2011
Сообщений: 101
21.04.2011, 15:38 4
Selection.Copy
0
sykes
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 11
21.04.2011, 17:52  [ТС] 5
а как выделить нужный фрагмент текста?
0
IamPugalo
28 / 28 / 3
Регистрация: 14.04.2011
Сообщений: 101
21.04.2011, 18:35 6
Selection.WholeStory - это весь текст. На будущее, запусти в ворде макрос на запись, сделай нужные действия, останови и посмотри код в редакторе VisialBasic.
0
sykes
2 / 2 / 0
Регистрация: 17.04.2011
Сообщений: 11
22.04.2011, 14:01  [ТС] 7
up---

Добавлено через 1 час 54 минуты
Задача решена.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Процедура
Uses ComObj;
Function FindAndReplace(ADocument1, ADocument2:TFileName; S1, S2:string):boolean;
  Var WordDoc, FStart, FEnd, a, b: OleVariant;
  i,DocLen:longint;
  Begin
  Result:=false;
   FStart:=0;
   FEnd:=0;
   WordDoc:=CreateOLEObject('Word.Application');
   WordDoc.Visible:=false;
   WordDoc.Documents.Add(ADocument1);
   WordDoc.Documents.Add(ADocument2);
   WordDoc.Documents.Item(2).Activate;
  DocLen:=Length(WordDoc.Documents.Item(2).Range.Text);
    For i:=0 to DocLen-2 do begin
    a:=i; b:=i+2;
    if (WordDoc.Documents.Item(2).Range(a,b).Text=S1) then FStart:=i+2
    else if (WordDoc.Documents.Item(2).Range(a,b).Text=S2) then FEnd:=i;
    end;
  if (FStart=0) or (FEnd=0) then showmessage('Ошибка') else
 begin
  WordDoc.Documents.Item(2).Range(FStart, FEnd).Select;
  WordDoc.Selection.Copy;
 end;
//====================================================================
   FStart:=0;
   FEnd:=0;
   DocLen:=Length(WordDoc.Documents.Item(1).Range.Text);
  For i:=0 to DocLen-2 do begin
    a:=i; b:=i+2;
    if (WordDoc.Documents.Item(1).Range(a,b).Text=S1) then FStart:=i
    else if (WordDoc.Documents.Item(1).Range(a,b).Text=S2) then FEnd:=i+2;
    end;
 
 if (FStart=0) or (FEnd=0) then showmessage('Ошибка') else
 begin
  WordDoc.Documents.Item(1).Range(FStart, FEnd).Select;
  WordDoc.Selection.Paste;
  Result:=true;
 end;
  WordDoc.Documents.Item(1).Activate;
  WordDoc.ActiveDocument.SaveAs(ADocument2);
   WordDoc.Quit;
   WordDoc:=Unassigned;
  End;
 
//Пример вызова
procedure TForm1.Button1Click(Sender: TObject);
begin
FindAndReplace('C:/1.doc','C:/2.doc', '<#', '#>');
end;
Это действие найдет в документе 1.doc текст заключенный между тегами <# #> и поместит его в документ 2.doc между теми же тегами <# #>. После использования теги во втором документе затираются

Добавлено через 1 минуту
вставка происходит через буфер обмена =>
1.до использовании процедуры лучше в него ничего ценного не копировать
2. между искомыми тегами могут быть заключены любые объекты помимо текста (рисунки, таблицы ...)
1
Ruska
9 / 9 / 1
Регистрация: 03.12.2008
Сообщений: 556
12.05.2012, 14:06 8
Да, она хорошо работает, а как сделать чтобы еще и математические формулы копировались?
0
12.05.2012, 14:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2012, 14:06

Копирование и удаление текста в Memo
Есть Memo1 мне нужно, по условию если в первом мемо текст превышает 35 строк то...

Копирование текста из Label в Edit
Здравствуйте программисты! У меня такой вопрос. В Label1 и Label2 написан текст...

Копирование текста из MaskEdit в Memo и Label
В maskedit вводится строка, содержащая только цифры или только буквы.Нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru