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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2010, 22:23   #1
RomanDemidov
 
Регистрация: 09.10.2010
Сообщений: 9
По умолчанию Экспорт двух или более таблиц Stringgrid в MS word

Нужно,экспортировать со Stringgrid в ворд. При этом есть обьект SpinEdit, в котором нужно выбрать количество таблиц(от 1 до 5).С одной таблицей всё получается.Но при 2 уже не работает.Точнее вторая таблица не создаётся, а перезаписывается в первую.Вот код для 2 таблиц:


Код:
var
     WordApp, NewDoc, WordTable: OLEVariant;
  W, Table,Table2,Table3,Table4,Table5: Variant;
  Row, Col, i, j: Integer;
begin
Form2.GetFormImage;
 Clipboard.Assign(form2.getformimage);

if k=1 then begin //k-это значение Spinedit
   try
  W := CreateOleObject('Word.Application');
   except
    Exception.Create('Error');
    end;

  W.Documents.Add;

  W.Selection.Font.Size := 12;
  W.Selection.TypeText('');
  W.Selection.Font.Bold := true;
  W.Selection.TypeText(#13#10'');
    W.selection.TypeParagraph;

  W.ActiveDocument.Tables.Add(W.ActiveDocument.Range,
  StringGrid5.RowCount, StringGrid5.ColCount);

  Table := W.ActiveDocument.Tables.Item(1);
  Table.Style := 'Сетка таблицы';
  for i := 0 to StringGrid5.RowCount - 1 do
    for j := 0 to StringGrid5.ColCount - 1 do
      Table.Cell(i +1, j+1 ).Range.Text := StringGrid5.Cells[j, i];
  W.Visible := True;
  w.selection.movedown(Unit:=wdline,Count:=4);
  W.selection.TypeParagraph;
    w.selection.paste;
  w.ActiveDocument.SaveAs('C:\Tranzistor.doc');
  end;
  if k=2 then begin
   try
  W := CreateOleObject('Word.Application');
   except
    Exception.Create('Error');
    end;

  W.Documents.Add;

  W.Selection.Font.Size := 12;
  W.Selection.TypeText('');
  W.Selection.Font.Bold := true;
  W.Selection.TypeText(#13#10'');
    W.selection.TypeParagraph;

  W.ActiveDocument.Tables.Add(W.ActiveDocument.Range,
  StringGrid5.RowCount, StringGrid5.ColCount);

  Table := W.ActiveDocument.Tables.Item(1);
  Table.Style := 'Сетка таблицы';
  for i := 0 to StringGrid5.RowCount - 1 do
    for j := 0 to StringGrid5.ColCount - 1 do
      Table.Cell(i +1, j+1 ).Range.Text := StringGrid5.Cells[j, i];
  W.Visible := True;
  w.selection.movedown(Unit:=wdline,Count:=4);
  W.selection.TypeParagraph;
    W.ActiveDocument.Tables.Add(W.ActiveDocument.Range,
  StringGrid2.RowCount, StringGrid2.ColCount);

  Table2 := W.ActiveDocument.Tables.Item(1);
  Table2.Style := 'Сетка таблицы';
  for i := 0 to StringGrid2.RowCount - 1 do
    for j := 0 to StringGrid2.ColCount - 1 do
      Table2.Cell(i +1, j+1 ).Range.Text := StringGrid2.Cells[j, i];
  W.Visible := True;
  w.selection.movedown(Unit:=wdline,Count:=4);
  W.selection.TypeParagraph;

    w.selection.paste;

  w.ActiveDocument.SaveAs('C:\Tranzistor.doc');
  end;
RomanDemidov вне форума Ответить с цитированием
Старый 14.11.2010, 01:10   #2
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Весь код не просматривал, но...
Код:
if k=1 then 
begin
//отправляем первую таблицу
end;
if k=2 then 
begin
//отправляем вторую таблицу
end;
Может быть так?
Код:
if (k = 1) or (k = 2) then //первую отправим в любом случае
if k=2 then // а вторую только если k=2
_SERGEYX_ вне форума Ответить с цитированием
Старый 14.11.2010, 06:00   #3
Alexei91
Заблокирован
Форумчанин
 
Аватар для Alexei91
 
Регистрация: 30.12.2009
Сообщений: 544
По умолчанию

По-моему что-то с Range. Примеры работы в справке Word есть + описание всего этого.
Темы для WordPress. Русские WordPress шаблоны
Alexei91 вне форума Ответить с цитированием
Старый 15.11.2010, 17:47   #4
krGorka
Пользователь
 
Регистрация: 26.04.2010
Сообщений: 35
По умолчанию

Здесь нужно , по моему, после добавления в документ второй таблицы W.ActiveDocument.Tables.Add(W.Activ eDocument.Range,
StringGrid2.RowCount, StringGrid2.ColCount); сделать
Table2 := W.ActiveDocument.Tables.Item(2); Т.е создается W.ActiveDocument.Tables.Add коллекция таблиц и к конкретной обращаешься по индексу
krGorka вне форума Ответить с цитированием
Старый 16.11.2010, 16:18   #5
RomanDemidov
 
Регистрация: 09.10.2010
Сообщений: 9
По умолчанию

Я так делал, не помогло.Дело действительно в свойстве range первой таблицы,но я не знаю как его задать.
RomanDemidov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт из StringGrid в Word Polotenchik Общие вопросы Delphi 12 23.09.2011 23:22
Экспорт со Stringgrid в Word (работа с несколькими табицами) RomanDemidov Помощь студентам 0 12.11.2010 23:28
Соединение 3 и более таблиц DBGrid Elena_Saygina БД в Delphi 26 08.11.2009 21:40
Встраивание таблиц Word или Excel yngwie Win Api 2 23.06.2009 20:55