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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2013, 11:01   #1
undead92
Пользователь
 
Регистрация: 26.12.2009
Сообщений: 95
По умолчанию закладки + таблица в word

Привет! нашел примеры по кускам, но конкретного не нашел.
Нужно создать счет на основе образца (прикрепил), данные будут заменятся путем закладки в этом документе из dbgrid и edit, проблема далее в том что есть таблица, а в ней нефиксированное количество строк, то есть я могу ввести один edit, должна быть 1 строка, два эдита - 2 строки и тд.

Кто-нибудь может пример скинуть, на делфи много программ есть по учету.
Вложения
Тип файла: doc obrazec.doc (67.5 Кб, 29 просмотров)
undead92 вне форума Ответить с цитированием
Старый 07.11.2013, 13:30   #2
undead92
Пользователь
 
Регистрация: 26.12.2009
Сообщений: 95
По умолчанию

непонятно например лучше всю таблицу строить, или только заполнять готовую в шаблоне, но как тогда добавлять еще строк?
undead92 вне форума Ответить с цитированием
Старый 07.11.2013, 13:37   #3
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

В образце создаёшь нужную таблицу, а потом средствами WORD'а добавляешь туда строки.
Например так
ActiveDocument.Tables.Item(номер таблицы).Rows.Add;
FaTaL вне форума Ответить с цитированием
Старый 07.11.2013, 15:55   #4
undead92
Пользователь
 
Регистрация: 26.12.2009
Сообщений: 95
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
В образце создаёшь нужную таблицу, а потом средствами WORD'а добавляешь туда строки.
Например так
ActiveDocument.Tables.Item(номер таблицы).Rows.Add;

а как определить какое количество строк ей дописать в word, глядя на dbgrid
undead92 вне форума Ответить с цитированием
Старый 07.11.2013, 16:17   #5
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Столько сколько в DBGrid. Свойство Count
FaTaL вне форума Ответить с цитированием
Старый 08.11.2013, 09:23   #6
undead92
Пользователь
 
Регистрация: 26.12.2009
Сообщений: 95
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
Столько сколько в DBGrid. Свойство Count
это понятно, я имел ввиду можно строчку кода показать которая именоо добавляе в ворд не фиксированное количество строк
undead92 вне форума Ответить с цитированием
Старый 08.11.2013, 09:36   #7
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Цитата:
Сообщение от undead92 Посмотреть сообщение
это понятно, я имел ввиду можно строчку кода показать которая именоо добавляе в ворд не фиксированное количество строк
Чуть выше дал же код я. Что мешает его запустить в цикле от 0 до кол-ва строк ДБГрида - 1?
FaTaL вне форума Ответить с цитированием
Старый 13.11.2013, 11:23   #8
undead92
Пользователь
 
Регистрация: 26.12.2009
Сообщений: 95
По умолчанию

проблема в том что в конце таблицы есть константы строки, то есть всегда дописываются, а значит мне нужно вставить между заголовочной строкой и конечной
undead92 вне форума Ответить с цитированием
Старый 13.11.2013, 11:32   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Rows.Add
Обычно бывают методы типа Insert - вставка строки в нужную позицию. Вот и поискать такой или подобный метод
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.11.2013, 14:44   #10
undead92
Пользователь
 
Регистрация: 26.12.2009
Сообщений: 95
По умолчанию

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

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    SaveDialog1: TSaveDialog;
    strngrd1: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  ComObj;

function SetBmText(var aBms : Variant; const aBmName, aText : String) : Boolean;
var
  Bm, Rng : Variant;
begin
  //Проверяем - существует ли закладка с заданным именем.
  Result := aBms.Exists(aBmName);
  //Если закладка не найдена - выходим.
  if not Result then Exit;

  //Ссылка на закладку.
  Bm := aBms.Item(aBmName);
  //Ссылка на диапазон, связанный с закладкой.
  Rng := Bm.Range;
  //Удаление закладки.
  Bm.Delete;
  //Заменяем текст в диапазоне.
  Rng.Text := aText;
  //Добавляем новую закладку с таким же именем.
  aBms.Add(aBmName, Rng);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  wdApp, wdDocs, wdDoc, wdBms,w,table : Variant;
  Sd : TSaveDialog;
   WordApp, NewDoc, WordTable: OLEVariant;
 iRows, iCols, iGridRows, jGridCols, Res : Integer;
  FileNameTemplate, Path : String;
begin
  Sd := SaveDialog1;
  Path := ExtractFilePath(ParamStr(0));
  if Sd.InitialDir = '' then Sd.InitialDir := Path + 'Documents\';
  Sd.Title := 'Задайте имя файла нового документа';
  if not Sd.Execute then Exit;
  if not FileExists(Sd.FileName) then begin
    Res := MessageBox(
      0
      ,'Файл с заданным уже существует. Перезаписать?'
      ,'Внимание!'
      ,MB_YESNO + MB_ICONQUESTION + MB_APPLMODAL
    );
    if Res = IDNO then Exit;
  end;
  try
    wdApp := CreateOleObject('Word.Application');
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;

  //Полное имя файла шаблона.
  FileNameTemplate := Path + 'Templates\счет.dot';

  //Делаем видимым окно MS Word.
  wdApp.Visible := True;
  //Ссылка на коллекцию документов.
  wdDocs := wdApp.Documents;
  //Создаём документ на основе шаблона.
  wdDoc := wdDocs.Add(Template:=FileNameTemplate);
  //Подключаемся к коллекции закладок.
  wdBms := wdDoc.Bookmarks;
  //Ищем закладки с нужными именами и изменяем их текст, в соответствие
  //с данными, введёнными на форме.
  SetBmText(wdBms, 'bank', Edit1.Text);
  SetBmText(wdBms, 'bik', Edit2.Text);
  SetBmText(wdBms, 'schet', Edit3.Text);
  SetBmText(wdBms, 'name', Edit4.Text);
  SetBmText(wdBms, 'gruzo', Edit5.Text);




 WordTable := wdApp.activedocument.Tables.Item(1).Rows.Add(W.ActiveDocument.Range, strngrd1.RowCount, strngrd1.ColCount);


    
for iGridRows := 1 to iRows do
   for jGridCols := 1 to iCols do
     WordTable.Cell(iGridRows, jGridCols).Range.Text :=
      strngrd1.Cells[jGridCols - 1, iGridRows - 1];







end;

end.
undead92 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена закладки в тексте документа WORD на мой текст Tiolic Общие вопросы Delphi 4 23.12.2017 15:18
таблица в Word бобок Помощь студентам 3 22.07.2011 12:28
перенести документ Word (таблица) в MS Excel c сохранением форматирования или обеспечить всплывающие подсказки в Word Serge_Bliznykov Microsoft Office Word 6 11.07.2011 11:02
Шаблон word и закладки hackPNZ Microsoft Office Word 11 26.03.2010 09:48
Таблица в WORD xakkkkker Общие вопросы Delphi 4 15.08.2009 21:02