Артемка123 0 / 0 / 0 Регистрация: 17.11.2014 Сообщений: 66 |
||||||||
1 |
||||||||
19.11.2014, 23:44. Показов 4657. Ответов 2 Метки нет (Все метки)
В общем надо что бы после нажатия кнопки все данные экспортировались в word. Без открытия word’a (что бы в папке с программкой появился word’овский файлик для отправки на почту). Нашёл у вас код для экспорта, но он немного не подходит.
Добавлено через 2 часа 38 минут
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 |
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 Замена текста в Word из Delphi Экспорт в word Экспорт в Word Экспорт в Word Экспорт в Word Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 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