Delphi выгрузка в word

Артемка123

0 / 0 / 0

Регистрация: 17.11.2014

Сообщений: 66

1

19.11.2014, 23:44. Показов 4657. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

В общем надо что бы после нажатия кнопки все данные экспортировались в word. Без открытия word’a (что бы в папке с программкой появился word’овский файлик для отправки на почту).

Нашёл у вас код для экспорта, но он немного не подходит.

Delphi
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
procedure TGlavForm.Button24Click(Sender: TObject);
 
const
  wdAlignParagraphCenter = 1;
  wdAlignParagraphLeft = 0;
  wdAlignParagraphRight = 2;
var
  wdApp, wdDoc, wdRng, wdTable: Variant;
begin
  try
    wdApp := CreateOleObject('Word.Application');
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;
 
  //Делаем видимым окно MS Word.
  wdApp.Visible := True;
  //Создаём новый документ.
  wdDoc := wdApp.Documents.Add;
  //Отключение перерисовки окна MS Word. - Для ускорения работы.
  wdApp.ScreenUpdating := False;
  try
    wdRng := wdDoc.Range;
    //1 текст.
    wdRng.InsertBefore('ПРЕДВАРИТЕЛЬНОЕ ОПИСАНИЕ ЗАДАНИЯ (БРИФ)');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 12;
    //Выравнивание по центру.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;;
    //Добавляем перевод строки.
    wdRng.InsertAfter(#13#10);
//Формируем новый диапазон непосредственно за текущим диапазоном.
    wdRng.Start := wdRng.End;
    //Сброс параметров параграфа.
    wdRng.ParagraphFormat.Reset;
    //Сброс параметров шрифта.
    wdRng.Font.Reset;
    //Добавляем перевод строки.
    wdRng.InsertAfter(#13#10);
    //2 текст.
    wdRng.InsertBefore('на производство видеоролика');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := True;
    wdRng.Font.Size := 18;
    //Выравнивание.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    //3 текст.
    wdRng.InsertBefore(' Бриф должен включать в себя всю необходимую информацию для работы над проектом.');
    wdRng.InsertBefore('         Бриф заполняется или координируется человеком, ответственным за приём проекта и его оценку на всех этапах разработки. Вся информация, полученная от Клиента, является конфиденциальной и не подлежит разглашению третьим лицам.');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := False;
    wdRng.Font.Size := 11;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    //4 текст.
    wdRng.InsertBefore('         Если некоторые поля вы считаете не нужными - не заполняйте их.');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := False;
    wdRng.Font.Size := 11;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    //5 текст.
    wdRng.InsertBefore('         Заранее спасибо!');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := False;
    wdRng.Font.Size := 11;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng.InsertAfter(#13#10#13#10);
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    //6 текст.
    wdRng.InsertBefore('E-mail:                                                 '+Edit9.Text+ #13#10);
    wdRng.InsertBefore('Контактное лицо, должность:        '+Edit8.Text+ #13#10);
    wdRng.InsertBefore('www:                                                    '+Edit7.Text+ #13#10);
    wdRng.InsertBefore('Факс:                                                   '+Edit6.Text+ #13#10);
    wdRng.InsertBefore('Телефон:                                             '+Edit5.Text+ #13#10);
    wdRng.InsertBefore('Срок исполнения:                             '+Edit4.Text+ #13#10);
    wdRng.InsertBefore('Дата заполнения:                              '+Edit3.Text+ #13#10);
    wdRng.InsertBefore('Предполагаемый бюджет:              '+Edit2.Text+ #13#10);
    wdRng.InsertBefore('Клиент:                                               '+Edit1.Text+ #13#10);
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := True;
    wdRng.Font.Size := 11;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    //7 текст.
    wdRng.InsertBefore('ОБЩИЕ ВОПРОСЫ (необходимы для разработки концепции видеоролика).');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := False;
    wdRng.Font.Size := 11;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
 
  finally
    //Включение перерисовки окна MS Word.
    wdApp.ScreenUpdating := True;
  end;

Добавлено через 2 часа 38 минут
Разобрался сам!

Delphi
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
procedure TGlavForm.Button24Click(Sender: TObject);
 
const
  wdAlignParagraphCenter = 1;
  wdAlignParagraphLeft = 0;
  wdAlignParagraphRight = 2;
var
  wdApp, wdDoc, wdRng, wdTable: Variant;
begin
  try
    wdApp := CreateOleObject('Word.Application');
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;
 
  //Создаём новый документ.
  wdDoc := wdApp.Documents.Add;
  //Отключение перерисовки окна MS Word. - Для ускорения работы.
  wdApp.ScreenUpdating := False;
  try
    wdRng := wdDoc.Range;
 
    //1 текст.
    wdRng.InsertBefore('ПРЕДВАРИТЕЛЬНОЕ ОПИСАНИЕ ЗАДАНИЯ (БРИФ)');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := false;
    wdRng.Font.Size := 12;
    //Выравнивание по центру.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;;
 
    //Добавляем перевод строки.
    wdRng.InsertAfter(#13#10);
//Формируем новый диапазон непосредственно за текущим диапазоном.
    wdRng.Start := wdRng.End;
    //Сброс параметров параграфа.
    wdRng.ParagraphFormat.Reset;
    //Сброс параметров шрифта.
    wdRng.Font.Reset;
    //Добавляем перевод строки.
    wdRng.InsertAfter(#13#10);
    //2 текст.
    wdRng.InsertBefore('на производство видеоролика');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := True;
    wdRng.Font.Size := 18;
    //Выравнивание.
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.ParagraphFormat.Reset;
    wdRng.Font.Reset;
    //3 текст.
    wdRng.InsertBefore(' Бриф должен включать в себя всю необходимую информацию для работы над проектом.');
    wdRng.InsertBefore('         Бриф заполняется или координируется человеком, ответственным за приём проекта и его оценку на всех этапах разработки. Вся информация, полученная от Клиента, является конфиденциальной и не подлежит разглашению третьим лицам.');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := False;
    wdRng.Font.Size := 11;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    //4 текст.
    wdRng.InsertBefore('         Если некоторые поля вы считаете не нужными - не заполняйте их.');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := False;
    wdRng.Font.Size := 11;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    //5 текст.
    wdRng.InsertBefore('         Заранее спасибо!');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := False;
    wdRng.Font.Size := 11;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphLeft;
    wdRng.InsertAfter(#13#10#13#10);
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    //6 текст.
    wdRng.InsertBefore('E-mail:                                                 '+Edit9.Text+ #13#10);
    wdRng.InsertBefore('Контактное лицо, должность:        '+Edit8.Text+ #13#10);
    wdRng.InsertBefore('www:                                                    '+Edit7.Text+ #13#10);
    wdRng.InsertBefore('Факс:                                                   '+Edit6.Text+ #13#10);
    wdRng.InsertBefore('Телефон:                                             '+Edit5.Text+ #13#10);
    wdRng.InsertBefore('Срок исполнения:                             '+Edit4.Text+ #13#10);
    wdRng.InsertBefore('Дата заполнения:                              '+Edit3.Text+ #13#10);
    wdRng.InsertBefore('Предполагаемый бюджет:              '+Edit2.Text+ #13#10);
    wdRng.InsertBefore('Клиент:                                               '+Edit1.Text+ #13#10);
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := True;
    wdRng.Font.Size := 11;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
    //7 текст.
    wdRng.InsertBefore('ОБЩИЕ ВОПРОСЫ (необходимы для разработки концепции видеоролика).');
    wdRng.Font.Name := 'Times New Roman';
    wdRng.Font.Bold := False;
    wdRng.Font.Size := 11;
    wdRng.ParagraphFormat.Alignment := wdAlignParagraphCenter;
    wdRng.InsertAfter(#13#10);
    wdRng.Start := wdRng.End;
    wdRng.Font.Reset;
 
  finally
    //Включение перерисовки окна MS Word.
    wdApp.ScreenUpdating := True;
    wdApp.ActiveDocument.SaveAs(GetCurrentDir + 'file' + Edit1.Text + '.doc');
    wdApp.ActiveDocument.Close;
    wdApp.Quit;
  end;
 
end;



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

19.11.2014, 23:44

2

71 / 72 / 23

Регистрация: 14.10.2013

Сообщений: 534

20.11.2014, 09:43

2

Цитата
Сообщение от Артемка123
Посмотреть сообщение

wdApp.ActiveDocument.SaveAs(GetCurrentDir + ‘file’ + Edit1.Text + ‘.doc’);

Здесь может быть ошибка, т.к. GetCurrentDir не всегда может возвращать папку с программой. лучше использовать ExtractFilePath (ParamStr(0)).



1



0 / 0 / 0

Регистрация: 17.11.2014

Сообщений: 66

22.11.2014, 20:13

 [ТС]

3

FaTaL-CS, спасибо, учту ��



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

22.11.2014, 20:13

Помогаю со студенческими работами здесь

Экспорт и импорт между Delphi и Word
Привет) Объясните подробно, пожалуйста, как осуществить экспорт и импорт между Delphi и Word.

Замена текста в Word из Delphi
Здравствуйте
Требуется заменить текст в ворде на текст из делфи.
Делаю так (процедура на кнопке):…

Экспорт в word
Я зашел в тупик! Мне необходимо открывать шаблон при нажатии на кнопку, но он будет открываться и…

Экспорт в Word
Здравствуйте! Кто нибудь знает, как сделать экспорт данных из Delphi в Word, используя при этом…

Экспорт в Word
Подскажите как сделать экспорт в Word. У меня есть представление в котором хранятся почтовые…

Экспорт в Word
В общем, по нажатию кнопки производится экспорт в Word таблицы находящейся в dbgrid1.
procedure…

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

Или воспользуйтесь поиском по форуму:

3

Можно. При этом, думаю, можно обойтись и без сторонних компонентов.
Проще всего создать шаблон будущего документа, в котором текст уже будет размещен на нужных местах. Тогда вашей задачей будет всего лишь заменить его на свой. Инициализируете OleObject (разумеется, Word должен быть установлен!):

var
  Word : variant;
<...>
     try
          Word := CreateOleObject('Word.Application');
     except
          MessageBox ('Не установлен Microsoft Word!!!', 'Ошибка',
                              MB_OK);
          exit;
     end;
     word.documents.open ('Путь к документуИмя.docx'); // открываем ваш файл
     word.Visible := false; // спрячем его с экрана

Если делать всё по-честному, то теперь нужно работать с коллекциями Word через Word.Documents.Item, т.е. к примеру, чтобы обратиться к 1й колонке последней таблицы (если у вас есть в документе таблицы), нужно делать так:

W1.ActiveDocument.Tables.Item(W1.ActiveDocument.Tables.Count).Columns.Item(1).Select;

Сразу дам подсказку: чтобы потом не мучаться с перебором коллекций, один раз сделать эту замену руками при включенной записи макроса (Сервис/Макрос/Начать запись…), тогда вы будете знать, к каким коллекциям обращаться.

Ну, а теперь немного «шулерства».

  procedure FindAndReplace (ww:variant; SearchStr, ReplaceStr : string);
  begin
    ww.Selection.Find.Text := SearchStr;
    ww.Selection.Find.Replacement.Text := ReplaceStr;
    ww.Selection.Find.Execute (Replace := 2);
  end;
<...>
  FindAndReplace (Word, '%prepod%', edit1.Text); // просто ищем  в документе предопределенный текст и заменяем его.
  FindAndReplace (Word, '%bilet%', edit2.Text);
  FindAndReplace (Word, '%DATE%', edit3.Text);

В сети много информации по работе с документами Office, рекомендую поизучать, откроете массу полезного.

Ну, а если уж совсем лениво, вот бесплатный компонент VectorSoft Report, позволяющий при небольшом старании создавать на базе готового шаблона нужный вам документ.

6th
Авг

Posted by Chas under Delphi

Samkoff
я опрашиваю все таблицы программы и все это дело печатаю в ворд.
Эта процедура висит на кнопке.

procedure TForm1.N12Click(Sender: TObject);
begin
//создаем документ
try
wdApp := CreateOleObject('Word.Application');
wdApp.Visible := True;
except
ShowMessage('Не удалось запустить MS Word. Действие отменено.');
Exit;
end;

//Делаем видимым и активным окно MS Word.
wdApp.Visible := true;
wdApp.Activate;

//Ссылка на коллекцию документов.
wdDocs := wdApp.Documents;
wdDoc := wdDocs.Add;
wdDoc.Range.InsertAfter('Парсинг 1 ');
Parsing := 1;
Analysis.Button1.Click;
ExpToWord (Analysis.MStringGrid1);
Analysis.Button2.Click;
ExpToWord (Analysis.MStringGrid1);
wdDoc.Range.InsertAfter('Парсинг 2 ');
Parsing := 2;
Analysis.Button1.Click;
ExpToWord (Analysis.MStringGrid1);
Analysis.Button2.Click;
ExpToWord (Analysis.MStringGrid1);
....

wdApp := Unassigned;
wdDocs := Unassigned;
wdDoc := Unassigned;

А вот эта процедура рисует в ворде. Все таблицы у меня друг за другом.

procedure ExpToWord (SG: TStringGrid);
var
wdTable: OLEVariant;
Row, Col: Integer;
begin
wdApp.Selection.Font.Size := 12;
wdApp.Selection.Font.Name := 'Times New Roman';

//создание таблицы
wdTable := wdDoc.Tables.Add(
Range:=wdDoc.Range.Characters.Last,
NumRows:=SG.RowCount,
NumColumns:=SG.ColCount);
wdDoc.Range.InsertAfter(#13);

for Row := 1 to SG.RowCount do
for Col := 1 to SG.ColCount do
wdTable.Cell(Row, Col).Range.Text := SG.Cells[ Col-1, Row-1 ];

wdTable.Borders.Enable := true;
wdApp.ActiveDocument.Tables.Item(1).AutoFitBehavior(wdAutoFitContent);
wdApp.ActiveDocument.Paragraphs.SpaceAfter := 0;
wdApp.ActiveDocument.Paragraphs.SpaceBefore := 0;

end;

тема на форуме

Похожие статьи

  • Сохранить таблицу из StringGrid в MS Word
  • Запуск макроса в открытом на данный момент Word
  • Сумма столбца, в котором находится минимальный элемент StringGrid
  • Добавить строку с верха вниз StringGrid
  • Изменение размера динамического StringGrid
  • Зашифровать данные из StringGrid
  • Проверить stringrid на пустоту
  • Сложить столбец в Stringgrid
  • Копировать данные StringGrid в другой StringGrid
  • Добавить checkbox в stringrid

Понравилась статья? Поделить с друзьями:
  • Delphi работа с excel закрыть только свой excel
  • Delphi вывод таблицы excel
  • Delphi программа для excel
  • Delphi вывод отчета в word
  • Delphi проверить что excel файл уже открыт