Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2009, 18:52   #1
Polotenchik
Форумчанин
 
Аватар для Polotenchik
 
Регистрация: 04.12.2008
Сообщений: 260
По умолчанию

Ребят, помогите кто чем может. Вот что надо сделать по нажатию на кнопку:
1. Экспортировать stringgrid в word
2. На одном документе создать 3-и таблицы
3. В определенные ячейки в таблицах вписать нечто такого: Fg м3, где g - нижний регистр, а 3 - верхний (степень)
4. Выровнять таблицы по ширине окна
5. Научиться вставлять символы (например лянда)

1-ый и 3-ий пункты в принципе реализованы:

Код:
uses ComObj
....
procedure TForm1.SpeedButton8Click(Sender: TObject);
var
  W, Table, Table2: Variant;
  Row, Col, i, j: Integer;
  s: string;
begin
//создаем документ
  W := CreateOleObject('Word.Application');
  W.Documents.Add;

//Создаем таблицу. clnum - это моя переменная, которая содержит число строк.
  W.ActiveDocument.Tables.Add(W.ActiveDocument.Range,
  clnum+1, main.ColCount-9);

//Выбираем созданную таблицу
  Table := W.ActiveDocument.Tables.Item(1);

//Прорисовываем сетку  
 Table.Style := 'Сетка таблицы';

//Загоняем в таблицу данные из StringGrid (main).
  for i := 1 to clnum+1 do
    for j := 1 to 9 do
    begin

// первую колонку таблицы оставляем пустой, так как туда и надо будет загнать то, что прописано в 3-ем пункте.
      Table.Cell(i + 1, j).Range.Text := main.Cells[j, i];

// назначаем стиль таблицы
      Table.Cell(i, j).Range.Font.name:='ISOCPEUR';
      Table.Cell(i, j).Range.Font.size:=11;
      Table.Cell(i, j).Range.Font.italic := 2;
      end;

// В первую ячейку загоняем то, о чем писалось в 3-ем пункте Fg м3
  Table.Cell(1, 1).Range.Select;
  s := 'F';
  W.Selection.TypeText(s);
  W.Selection.Font.Subscript := 1; //врубаем нижний регистр
  s := 'g';
  W.Selection.TypeText(s);
  W.Selection.Font.Subscript := 0; //отрубаем нижний регистр
  s := 'м';
  W.Selection.TypeText(s);
  W.Selection.Font.Superscript := 1; //теперь верхний
  s := '3';
  W.Selection.TypeText(s);
  W.Selection.Font.Superscript := 0; //отрубаем верхний

//открываем ворд
W.Visible := True;
end;
Теперь что касается 2-го пункта: создать 3-ри таблицы на 1 листе.
Пробовал в том коде дописать:

Код:
var
W, Table, Table2: Variant;
...
begin
.....

  W.ActiveDocument.Tables.Add(W.ActiveDocument.Range,
 4, 5);
  Table2 := W.ActiveDocument.Tables.Item(2);
Но это не помогло! Видимо надо как-то сделать отступ от 1-ой таблицы... ?!

Не знаю так же как быть с:

Цитата:
4. Выровнять таблицы по ширине окна
5. Научиться вставлять символы (например лянда)
А так же мне надо обозвать таблицы, т.е
Таблица 1. - бла
....
Таблица 2. - бла бла
.....
Таблица 3. - бла бла бла

Помогите пожалуйста! Ну просто очень надо!

Почти со всем разобрался!
Символы вставляются так:
Код:
W.Selection.InsertSymbol(966,Unicode:=True);
Что бы можно было вставлять несколько таблиц надо вместо ActiveDocument использовать Selection

Пожалуйста помогите, как объединить несколько ячеек в столбце? Уже все перепробовал...

А еще все пытаюсь формулу вставить. Знаю как вставить место для формулы:

Код:
W.Selection.OMaths.Add(W.Selection.Range);
А вот как вставить в это место саму формулу? Например дробь 6/2=3
Я бы изменил мир, но Бог не дает исходники...

Последний раз редактировалось Stilet; 21.08.2009 в 09:25.
Polotenchik вне форума Ответить с цитированием
Старый 20.08.2009, 23:24   #2
pro100-delphi
Пользователь
 
Аватар для pro100-delphi
 
Регистрация: 19.08.2009
Сообщений: 99
По умолчанию

http://www.welikeit.ru/delphi-fromdelphitoword.html - почитай эту статью может чё найдёш)), хоть и не то что надо но нового узнаеш. Статья называется: Импорт информации из Delphi в Word
pro100-delphi вне форума Ответить с цитированием
Старый 21.08.2009, 09:27   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
А вот как вставить в это место саму формулу? Например дробь 6/2=3
А там свойство есть
Код:
Selection.Range.formula='=6/2';
Если мне память не изменяет
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2009, 14:43   #4
Polotenchik
Форумчанин
 
Аватар для Polotenchik
 
Регистрация: 04.12.2008
Сообщений: 260
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А там свойство есть
Код:
Selection.Range.formula='=6/2';
Если мне память не изменяет
Ругается на formula.

pro100-delphi, спасибо за ссылку, но там самое простое объяснено...
Я бы изменил мир, но Бог не дает исходники...

Последний раз редактировалось Polotenchik; 21.08.2009 в 14:46.
Polotenchik вне форума Ответить с цитированием
Старый 21.08.2009, 15:08   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Вот смотри:
Код:
unit Unit1;

interface

uses          comobj,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var   sh,wb,XL:OleVariant;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 XL := CreateOleObject('Excel.Application');
 wb:=XL.Workbooks.Add;
 sh:=wb.WorkSheets[1];


end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   xl.quit;
 xl:=Unassigned;
 wb:=Unassigned;
 sh:=Unassigned;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then begin
     sh.range['A1'].formula:='='+Edit1.Text;
     caption:=sh.range['a1'].text;
end;
end;

end.
Это я Эвалюатор на основе Экзеля предлагал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2009, 15:19   #6
Polotenchik
Форумчанин
 
Аватар для Polotenchik
 
Регистрация: 04.12.2008
Сообщений: 260
По умолчанию

Ну здесь это не прокатывает. Ругается вообще как на метод formula Может тут как-то надо по другому задавать хз.

Вообще если в ворде записать макрос вставки формулы то он выглядит так:
Код:
Sub Макрос2()
'
' Макрос2 Макрос
'
'
    WordBasic.EquationEdit 1
    Selection.OMaths(1).Functions.Add Range:=Selection.Range, Type:= _
        wdOMathFunctionScrSup
End Sub
или вот:
Код:
Sub Макрос1()
'
' Макрос1 Макрос
'
'
    WordBasic.EquationEdit 1
    Selection.OMaths(1).Functions.Add(Selection.Range, wdOMathFunctionFrac). _
        Frac.Type = wdOMathFracBar
End Sub
Я так понимаю на Delphi должно быть что типа:

Код:
W.Selection.OMaths.Add(W.Selection.Range, wdOMathFunctionScrSup);
Но ругается на wdOMathFunctionScrSup, как собственно на все, что начинается в ворде с wd...

П.С. Мне ведь потом в шаблон данной формулы надо вставить числа будет. Сейчас макросы приведенный выше просто создают место для формулы и сам шаблон, т.е например
http://itrash.ru/idb/35433119513797a...d9c/o21.08.png
это и есть wdOMathFunctionScrSup
Я бы изменил мир, но Бог не дает исходники...

Последний раз редактировалось Polotenchik; 21.08.2009 в 15:23.
Polotenchik вне форума Ответить с цитированием
Старый 21.08.2009, 15:22   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Ругается вообще как на метод formula
Ты его (мой пример) запускал? Разбирал?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2009, 15:39   #8
Polotenchik
Форумчанин
 
Аватар для Polotenchik
 
Регистрация: 04.12.2008
Сообщений: 260
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ты его (мой пример) запускал? Разбирал?
Ну так меня там интересует только одна строчка
Код:
 sh.range['A1'].formula:='='+Edit1.Text;
Я уже только как не пробовал использовать код с formula. Он вообще не понимает formula. Т.е нет такого метода. Видимо только для экселя это работает...

Пример пробовал! В случаи экселя на formula вроде не ругается, но в твоем примере ексель не открывается вообще... Но всяка Дельфи бы выругнался на formula если бы она была не в тему тут...
Я бы изменил мир, но Бог не дает исходники...
Polotenchik вне форума Ответить с цитированием
Старый 21.08.2009, 16:39   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
но в твоем примере ексель не открывается вообще
И не должен. Там просто вычисления и все.
А мож в Ворде нет такого прикола...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.08.2009, 19:00   #10
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,762
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
И не должен. Там просто вычисления и все.
А мож в Ворде нет такого прикола...
нету и небыло.. и думаю не будет, есть в ворде возможность екселевские таблички вставлять.. как организовать не знаю... но если так надо(сомневаюсь в нужности этого действия), то тут вплотную надо скриптами VB занятся по моему
vovk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как связать Отчет(qreport) в Delphi c Вордом? KingSize БД в Delphi 2 07.12.2008 11:20
Нужна помощь! Нужно переделать программу написанную на дельфи, чтобы она работала под управлением Vista Karloss Фриланс 5 10.11.2008 17:14
Как заставить открыться из под Дельфи CHM файл grenles Общие вопросы Delphi 5 09.10.2008 13:01
Пишу прог на Дельфи под заказ!!! Sanek777 Фриланс 1 31.08.2008 23:22
Помогите с Вордом! Amra Помощь студентам 2 05.06.2007 20:22