Delphi word таблицы работа

  1. Работа с таблицами

Не
позволяйте компьютеру догадаться, что
вы спешите.

Из
законов Мэрфи

Давайте
научимся вставлять таблицы в документ
Word. Каждая таблица в
программе будет представлена переменной
типа Table.
Поэтому прежде всего заведем такую
переменную:

VAR
t:Table;

При
вставке новой таблицы в документ надо
указать количество строк и столбцов в
ней. Делаетсяэтотак:

t:=WordDocument1.Tables.Add(WordApplication1.Selection.Range,

6,5,EmptyParam,EmptyParam);

Здесь
6 – число строк, а 5 – число столбцов. Не
забудьте присвоить ссылку на новую
таблицу переменной t.

Новой
таблице желательно придать приличный
вид. Чтобы линии сетки таблицы были
видны, задаем так называемый автоформат
таблицы. Здесь уже понадобятся две
переменные типа OLEVariant:
par
и par1.

par:=wdTableFormatGrid1;

par1:=wdTableFormatApplyBorders;

t.AutoFormat(par,
par1, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam);

Теперь
давайте разместим таблицу по центру
страницы:

t.Rows.Alignment:=wdAlignRowCenter;

Наконец,
очень удобно включить функцию автоподбора
ширины столбцов, что позволяет не
задумываться о подгонке ширины текста
в ячейках:

t.AllowAutoFit:=True;

par:=wdAutoFitContent;

t.AutoFitBehavior(par);

Для
доступа к тексту внутри конкретной
ячейки таблицы используется ее свойство
Cell(строка,
столбец). Например,
вот так можно заполнить нашу таблицу
случайными числами (не забудьте выделить
память под целые переменные i,j
и вещественную a):

// цикл
по
ячейкам
таблицы

for i:=1 to 6
do

for
j:=1 to 5 do

begin

//
занесение значения в ячейку с координатами
i,j

t.Cell(i,j).Select;

a:=RANDOM(100);

WordApplication1.selection.InsertAfter

(FloatToStrF(a,ffFixed,10,4))

end;

Самое
трудное при работе с таблицей – это
выбраться из нее, то есть перенести
точку ввода текста и текстовый курсор
за пределы таблицы, чтобы продолжить
писать текст после нее. Делается это
так (предполагаем, что перед этим мы
выводили текст в последнюю ячейку
таблицы и курсор находится в ней):

//
Переводим курсор за пределы таблицы

par:=wdStory;

par1:=wdMove;

WordApplication1.Selection.EndKey(par,par1);

Метод
EndKey
имитирует нажатие клавиш Ctrl+End,
т.е. переход в самый конец документа,
под таблицу.

  1. Запуск Wordиз внешней программы

Общая
сумма разума на планете — величина
постоянная, а население растет…

Из
законов Мэрфи

Наша
программа, работая как СОМ-клиент,
заставляет Word сформировать
на диске doc-файл с указанным
именем. Часто желательно, чтобы по
завершении генерации этот файл оставался
бы загруженным в Word, чтобы
пользователь тут же смог его просмотреть.
Простейший способ – выбросить из
программы методы WordDocument1.Close
и WordApplication1.Quit.
Тогда созданный нами документ и весь
Word не будут закрываться.

Способ
более интересный – запуск Word
в любой момент из нашей программы и
загрузка в него файла с указанным именем.
Причем так можно запускать не только
Word, но и любую другую
программу, связанную с определенным
типом файлов (скажем, для dwg-файлов
запустится AutoCAD). Делается
это так:

ShellExecute(0,
‘OPEN’, pchar(имя файла), nil, nil, SW_MAXIMIZE)

Не
забывайте, что, если в имени файла
содержатся пробелы, то его надо взять
в кавычки. Параметр SW_MAXIMIZE
раскрывает окно Word’а на
весь экран.

Соседние файлы в папке 2 семестр

  • #
  • #
  • #
  • #

wolitar

0 / 0 / 0

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

Сообщений: 30

1

09.03.2012, 08:37. Показов 7785. Ответов 1

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


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

Всем привет! У меня два вопроса
1) написал код:

Delphi
1
2
3
4
App := CreateOleObject('Word.Application');
  App.Documents.open('C:111.doc');
  App.ActiveDocument.Tables.Add(App.ActiveDocument.Range(0, 0), 5, 2);
  App.Visible := True;

почему-то таблица получилась бесцветная. как сделать так, чтобы были видны ячейки?
2) когда пишу код:

Delphi
1
app.Tables.Item(1).Cell(1,1).Range.Text := 'текст';

то выдаёт ошибку как по другому можно заполнить ячейку таблицы?



0



Mawrat

13094 / 5875 / 1706

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

Сообщений: 8,808

09.03.2012, 17:17

2

Пример, как открыть документ MS Word, добавить в его конце новую таблицу, разлиновать её и перенести в неё данные из таблицы типа TStringGrid на форме.

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
uses
  ComObj;
 
procedure TForm1.Button1Click(Sender: TObject);
const
  wdLineStyleSingle = 1;
var
  wdApp, wdDoc, wdTable : Variant;
  Row, Col : Integer;
  Od : TOpenDialog;
  Sg : TStringGrid;
begin
  Od := OpenDialog1;
  Sg := StringGrid1;
 
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath( Application.ExeName )
  ;
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    ShowMessage(
      'Файл с именем:'#10
      + Od.FileName + #10
      + 'Не найден. Действие отменено.'
    );
    Exit;
  end;
  try
    wdApp := CreateOleObject('Word.Application');
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;
 
  //Делаем видимым окно MS Word.
  wdApp.Visible := True;
  //Попытка открыть выбранный файл.
  wdDoc := wdApp.Documents.Open(FileName:=Od.FileName);
  //Добавляем отступ в конце документа.
  wdDoc.Range.InsertAfter(#13#10);
  //Добавляем таблицу внизу документа.
  wdTable := wdDoc.Tables.Add(
    Range:=wdDoc.Range.Characters.Last
    ,NumRows:=Sg.RowCount
    ,NumColumns:=Sg.ColCount
  );
  //Параметры линий таблицы.
  wdTable.Borders.InsideLineStyle := wdLineStyleSingle;
  wdTable.Borders.OutsideLineStyle := wdLineStyleSingle;
  //Копируем данные из таблицы на форме в таблицу в документе Word.
  for Row := 0 to Sg.RowCount - 1 do
  for Col := 0 to Sg.ColCount - 1 do
    wdTable.Cell(Row + 1, Col + 1).Range.Text := Sg.Cells[Col, Row]
  ;
  //Отключение режима показа предупреждений.
  //wdApp.DisplayAlerts := False;
  //Сохрание документа.
  //wdDoc.Save;
  //Закрываем документ.
  //wdDoc.Close;
  //Включение режима показа предупреждений.
  //wdApp.DisplayAlerts := True;
  //Закрываем MS Word.
  //wdApp.Quit;
end;

Что касается чтения данных из таблицы MS Word. Надо иметь в виду, что текст, прочитанный из ячейки таблицы MS Word, в конце содержит пару управляющих символов: #13#7. Эти символы следует удалить.



3



Использую RAD Studio 10.1 Berlin.

Возникла вот такая задача:
Есть word документ в котором большое количество таблиц.
Нужно просмотреть документ от начала и до конца и при встрече таблицы прочитать данные из 1 столбца 1 строки. Если там написано «Таблица», тогда
Нужно прочитать данные 2 столбца, с 3 строки и до конца таблицы.

Как это можно сделать?
Понимаю, что задача большая — буду рад любым примерам кода.

Пример рабочего кода

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
wdApp, wdDocs, wdDoc : Variant;
file_name:string;
temp_string:AnsiString;
begin

file_name:=ExtractFilePath( Application.ExeName )+'test.doc';

//Пытаемся запустить MS Word и получить ссылку на объект Application.
//- Это корневой объект в объектной структуре MS Word.
try
wdApp := CreateOleObject('Word.Application');
except
ShowMessage('Не удалось запустить MS Word. Действие отменено.');
Exit;
end;
  
//Если требуется, делаем видимым окно MS Word.
wdApp.Visible := false;
//Ссылка на коллекцию документов.
wdDocs := wdApp.Documents;
//Попытка открыть выбранный файл и получить ссылку на объект документа.
wdDoc := wdDocs.Open(FileName:=file_name);

{	
CurTable:=ActiveDocument.Tables(1);
CurTable.Cell(10,20).Range.Text:=Text;
goto end_of_this;
}
	
//Читаем текст документа и записываем его в Мемо.
temp_string:=wdDoc.Range.Text;

//Закрываем MS Word.
wdApp.Quit;

Like this post? Please share to your friends:
  • Delphi word таблица в таблице
  • Delphi word сохранить как
  • Delphi word создание таблицы
  • Delphi word поиск слова на
  • Delphi word открыт или нет