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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2012, 14:47   #1
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию из ehlib в word

как экспортировать таблицу ehlib в ворд? причем добавить шапку перед таблицей?
меня интересует именно цикл по ehlib
Код:

procedure TForml.ButtonllCllck(Sender: TObject);
var table_:variant;
Row_,Column_:integer;
begin
// Создаем новый документ по шаблону
W.documents.Add(ExtractFileDir(Application.ExeName)+
'\Шаблон счета-фактуры.dot');
W.Selection.InsertRows(2-1);//как здесь определить сколько у меня строк?
// Формируем первую строку табличной части документа.
table_.Cell(Row_,Column_+0).Range.Text:='KOVRIC TRIVEL RUG';
table_.Cell(Row_,Column_+1).Range.Text:='шт';
table_.Cell(Row_,Column_+2).Range.Text:='l';
// Формируем вторую строку табличной части документа.
Inc(Row_);

Последний раз редактировалось kate158; 01.06.2012 в 15:01.
kate158 вне форума Ответить с цитированием
Старый 01.06.2012, 15:07   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цикл по колонкам
Код:
  for i:=0 to DBGridEhEvent.Columns.Count-1 do begin
    DBGridEhEvent.Columns[i].Title.Caption - заголовок колонки
    DBGridEhEvent.Columns[i].Field - TField колонки
+цикл по записям DataSet
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.06.2012, 11:54   #3
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

почему у меня не создается пустая таблица?
Код:
  w.activedocument.tables.add(range:=MyRange,Numrows:=(dbgrideh5.columns.count),Numcolumns:=4);
kate158 вне форума Ответить с цитированием
Старый 27.06.2012, 19:18   #4
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Зачем какие-то циклы мутить, когда в DBGridEh можно одной строкой кода сделать экспорт и т.п.? Вот так например можно экспортировать DBGridEh в том виде, в каком ты его видишь в RTF файл (который можно без проблем открыть в MS Word):
Код:
uses DBGridEhImgExp;
...
procedure TForm5.sButton1Click(Sender: TObject);
begin
 SaveDBGridEhToExportFile(TDBGridEhExportAsRTF,Form5.DBGridEh1,'C:\1.rtf',True);
end;
и т.д. Можно экспортировать в TXT, XLS, HTML, CSV...
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 27.06.2012, 21:13   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в RTF файл
Есть в этом небольшие проблемки - если заказчику нужно заполнить по шаблону, то ничто типа RTF тут не поможет. Я с таким сталкивался, когда выгружал спецификации сборок и узлов.
Цитата:
причем добавить шапку перед таблицей?
Создаешь в Ворде шаблон (DOT файл), в котором рисуется шапка, подножье, фоновая разметка.
Далее примерно так:
Открываем новый док на основе шаблона
Код:
 try WordApp:=CreateOleObject('Word.Application');except exit; end;
 WordDoc:=WordApp.documents.add('Шаблон_КС2.dot');
Допустим в нем уже нарисованна заготовочная таблица из одной строки (к примеру)
Код:
WordTable := WordDoc.Tables.Item(1);
получаем ссылку на эту таблицу

И Вносим в нее новые строки:
Код:
WordRow:=WordTable.Rows.Add;
      WordTable.Cell(WordRow.Index, 1).Range.Text :=('Формат');
      WordTable.Cell(WordRow.Index, 2).Range.Text :=('Зона');
      WordTable.Cell(WordRow.Index, 3).Range.Text :=('Позиция');
      WordTable.Cell(WordRow.Index, 4).Range.Text :=('Применяемость')
      WordTable.Cell(WordRow.Index, 5).Range.Text :=('Наименование');
      WordTable.Cell(WordRow.Index, 6).Range.Text :=('Штуки');
      WordTable.Cell(WordRow.Index, 7).Range.Text :=('Примечание');
Это я к примеру - вносится новая строка, в колонках которой (колонки нарисованы в шаблоне)
прописываются некие значения.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.06.2012, 09:09   #6
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

спасибо, друзья, за помощь. вопрос начинает проясняться.
как в моем коде
Код:
var
MsWord,Table, MyRange:Variant;
i,j:integer;
begin
try MsWord:=CreateOleObject('Word.Application');except exit; end;
MsWord.Documents.Add('C:\Temp\shablon.dot');
MsWord.Visible:=False;
MyRange:=MsWord.ActiveDocument.Range(MsWord.ActiveDocument.Range.End-1,
MsWord.ActiveDocument.Range.End-1);
MsWord.ActiveDocument.Tables.Add(MyRange,
dm.people_who_send.RecordCount, dm.people_who_send.FieldCount);
MsWord.ActiveDocument.Tables.Add(MsWord.ActiveDocument.Range,
dm.people_who_send.RecordCount, dm.people_who_send.FieldCount);
Table:=MsWord.ActiveDocument.Tables.Item(1);
Table.Style:='Сетка таблицы';
dm.people_who_send.First;
for i:=0 to dm.people_who_send.RecordCount-1 do
begin
for j:=0 to dm.people_who_send.FieldCount-1 do
Table.Cell(i+1,j+1).Range.InsertBefore(dm.people_who_send.Fields[j].AsString);// здесь вылазит ошибка
dm.people_who_send.Next;
MsWord.Visible:=True;
исправить ошибку

Последний раз редактировалось kate158; 28.06.2012 в 13:56.
kate158 вне форума Ответить с цитированием
Старый 28.06.2012, 09:54   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
у меня затирается весь шаблон и таблица появляется в начале..
Ты мой пост внимательно читала?
Ты используешь:
Цитата:
MsWord.documents.open('C:\Temp\shab lon.doc');
Я использую:
Цитата:
WordDoc:=WordApp.documents.add('Шаб лон_КС2.dot');
Цитата:
то вылезает ошибка
На какой строке?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.06.2012, 09:56   #8
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
На какой строке?
исправила
Код:
MyRange:=MsWord.ActiveDocument.Range(MsWord.ActiveDocument.Range.End-1,
MsWord.ActiveDocument.Range.End-1);

Последний раз редактировалось kate158; 28.06.2012 в 10:49.
kate158 вне форума Ответить с цитированием
Старый 28.06.2012, 10:14   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
W.
Это что за переменка?
Есче раз внимательненько читай мой пост - WordApp.documents.add возвращает результат
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.06.2012, 10:44   #10
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

читаю.
теперь на строке
Код:
Table.Cell(i+1,j+1).Range
kate158 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
EhLib 2.5 -> 5.5 Yurk@ Компоненты Delphi 2 15.05.2012 00:29
Ehlib + *ico new player Компоненты Delphi 2 28.09.2010 14:56
EhLib проблемка sl963 БД в Delphi 1 01.06.2010 11:33
Компонент EhLib Михаил Юрьевич Компоненты Delphi 5 05.08.2009 11:40
Ehlib EdatabaseError Var17 БД в Delphi 1 21.07.2008 15:42