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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2009, 16:42   #1
Polotenchik
Форумчанин
 
Аватар для Polotenchik
 
Регистрация: 04.12.2008
Сообщений: 260
По умолчанию Экспорт из StringGrid в Word

Люди помогите, уже замучился. Вот я нашел код:

Код:
uses

ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var
WordApp, NewDoc, WordTable: OLEVariant;
iRows, iCols, iGridRows, jGridCols: Integer;

begin

try
   // Create a Word Instance
   // Word Instanz erzeugen
   WordApp := CreateOleObject('Word.Application');
except
   // Error...
   // Fehler....
   Exit;
end;

// Show Word
// Word anzeigen

WordApp.Visible := True;

// Add a new Doc
// Neues Dok einfugen

NewDoc := WordApp.Documents.Add;

// Get number of columns, rows
// Spalten, Reihen ermitteln

iCols := StringGrid1.ColCount;
iRows := StringGrid1.RowCount;

// Add a Table
// Tabelle einfugen

WordTable := NewDoc.Tables.Add(WordApp.Selection.Range, iCols, iRows);

// Fill up the word table with the Stringgrid contents
// Tabelle ausfullen mit Stringgrid Daten

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

// Here you might want to Save the Doc, quit Word...
// Hier evtl Word Doc speichern, beenden...
// Cleanup...

WordApp := Unassigned;
NewDoc := Unassigned;
WordTable := Unassigned;

end;
он рабочий, но экспортируется только текст, а как сделать, чтобы и поля таблицы отображались в ворде, а так же экспортировалось в том шрифте, какой указан в grid ну или в таком какой мне нужно? Цвета желательно что бы были.

Перепробовал уже куча гридов разных и у всех с этим проблема. Посоветуйте что нибудь?!
Я бы изменил мир, но Бог не дает исходники...
Polotenchik вне форума Ответить с цитированием
Старый 10.07.2009, 18:32   #2
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Меня в экселе часто выручает макросы... так сказать если не знаю как сделать в делфях =\ ставлю на запись макрос... делаю все что нужно... потом смотрю код в VBA пытаюсь провести || с Delphi и методом проб и ошибок получаеться =)))... Должно получиться.
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 10.07.2009, 19:05   #3
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Для Excel:
Экспортировать TStringGrid в Excel-файл
Экспортировать TStringGrid в Excel-файл 2
Экспортировать TStringGrid в Excel-файл 3

Для Word:
Управление Word-ом из Delphi
Насчёт шрифтов, где-то видел, но не вспоминается где.

Последний раз редактировалось Alter; 10.07.2009 в 19:12.
Alter вне форума Ответить с цитированием
Старый 12.07.2009, 12:48   #4
Polotenchik
Форумчанин
 
Аватар для Polotenchik
 
Регистрация: 04.12.2008
Сообщений: 260
По умолчанию

Блин народ помогите а?! Уже сил нет! Alter, Управление Word-ом из Delphi прочитал но как это связать с StringGrid и как это применять так и не понял и не смог.
Черт с этими шрифтами, помогите, как хотяб экспортировать так, чтобы в ворде отображались поля (линии) ?
Помогите пожалуйста! Очень прошу!

Забыл сказать, у меня ведь вообще после этого:

Цитата:
Далее для работы с Word-ом нам потребуется библиотека типов Word-а, это делается так:
Project, Import Type Library, Add, далее переходим в папку, где стоит Word ( у меня это - "c:\program files\microsoft office) , заходим в папку Office и выбираем файл - msword8.olb (цифра -? версии Word-а - у Вас может отличаться ) или excel8.olb (для Excel).Нажимаем Оk. Delphi создаст 2 файла - Word_tlb.pas и Office_tlb.pas, их надо включить в раздел uses модуля Main нашего проекта:
говорит что это все уже есть и ссылкается на компонент WordApplication. А если прописать в uses Office_Tlb, word_tlb то ругается.
Я бы изменил мир, но Бог не дает исходники...

Последний раз редактировалось Stilet; 13.07.2009 в 11:17.
Polotenchik вне форума Ответить с цитированием
Старый 12.07.2009, 14:11   #5
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Глянь пример.
Вложения
Тип файла: rar Word.rar (240.5 Кб, 401 просмотров)
Evgeniy26 вне форума Ответить с цитированием
Старый 12.07.2009, 14:28   #6
Polotenchik
Форумчанин
 
Аватар для Polotenchik
 
Регистрация: 04.12.2008
Сообщений: 260
По умолчанию

Цитата:
Сообщение от Evgeniy26 Посмотреть сообщение
Глянь пример.
Ничего себе! Громадное спасибо!

Теперь пытаюсь понять:

Код:
var
  W, Table: Variant;
  Row, Col, i, j: Integer;
begin

//создаем документ

  W := CreateOleObject('Word.Application');
  W.Documents.Add;

//создаем таблицу в документе. Count-ми указываем сколько столбцов и строк.

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

//не понятно
  Table := W.ActiveDocument.Tables.Item(1);
//тоже не ясно! Что еще за сетка таблицы?
  Table.Style := 'Сетка таблицы';

//дальше ясно. заносим в ячейки данные.

  for i := 0 to StringGrid1.RowCount - 1 do
    for j := 0 to StringGrid1.ColCount - 1 do
      Table.Cell(i + 1, j + 1).Range.Text := StringGrid1.Cells[j, i];
  W.Visible := True;
Объясните пожалуйста не понятные мне моменты. И может заодно подскажите, как сделать, чтобы и с определенным шрифтом экспорт произошел. Например пусть в переменной font будет название шрифта и надо, чтобы все экспортировалось с этим шрифтом.

Так же хотелось бы, что бы определенную строку можно было выделить жирным.

Если не сложно так же допишите пример или сюда подкиньте код! Большое Вам спасибо! А то я уже было сломался =) Хотел все на время забросить...
Я бы изменил мир, но Бог не дает исходники...
Polotenchik вне форума Ответить с цитированием
Старый 12.07.2009, 14:31   #7
Evgeniy26
Форумчанин
 
Аватар для Evgeniy26
 
Регистрация: 29.05.2009
Сообщений: 384
По умолчанию

Шрифт и Цвет:
Для яцейки:
Код:
for i := 0 to StringGrid1.RowCount - 1 do
    for j := 0 to StringGrid1.ColCount - 1 do
    begin
      Table.Cell(i + 1, j + 1).Range.Text := StringGrid1.Cells[j, i];
      Table.Cell(i + 1, j + 1).Range.Font.Color :=
      ColorToRGB(StringGrid1.Font.Color);
      Table.Cell(i + 1, j + 1).Range.Font.Name := StringGrid1.Font.Name;
    end;
//Выбираем таблицу которую будем использовать. Можно так W.ActiveDocument.Tables.Item(1).Sty le := 'Сетка таблицы';
Table := W.ActiveDocument.Tables.Item(1);
//У меня в 2007 почему-то когда я создаю таблицу, сетка не прорисовывается. Пришлось самому задавать стиль сетки.
Table.Style := 'Сетка таблицы';

Стиль ячейки:
Код:
Table.Cell(i + 1, j + 1).Range.Font.Bold := 2;

Последний раз редактировалось Evgeniy26; 12.07.2009 в 14:53.
Evgeniy26 вне форума Ответить с цитированием
Старый 12.07.2009, 15:05   #8
Polotenchik
Форумчанин
 
Аватар для Polotenchik
 
Регистрация: 04.12.2008
Сообщений: 260
По умолчанию

И вновь примного благодарен! Буду пробовать! А еще вопрос такой: можно ли как-то в определенные ячейки ввести свой текст. смысл такой: надо что бы в 1-ой строке (заголовках) был текст типа x в степени 2, т.е с учетом регистров верхних и нижних. Вот я и хочу в первую строку самому присвоить текст (а не брать его из грида), а дальше как и идет по коду, только не

or i := 0 to StringGrid1.RowCount - 1 do

а

or i := 1 to StringGrid1.RowCount - 1 do

С такой задачей поможете?

Так же хотелось бы, чтобы перед таблицей была надпись: Таблица 1. Бла бла бла. И интересует, каким образом можно управлять шириной колонок!?

Цитата:
//У меня в 2007 почему-то когда я создаю таблицу, сетка не прорисовывается. Пришлось самому задавать стиль сетки.
Table.Style := 'Сетка таблицы';
на этой почве и возникла эта тема! Как Вы только до этого догадались мне интересно =)
Я бы изменил мир, но Бог не дает исходники...

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

Цитата:
Так же хотелось бы, чтобы перед таблицей была надпись: Таблица 1. Бла бла бла.
Ну поставь таблицу в GroupBox и задай этому боксу Caption. Будет похоже на название таблицы
Цитата:
каким образом можно управлять шириной колонок!?
Есть свойство ColWidth[]. Это массив. Вот указывай номер колонки и ее размер.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.06.2011, 14:52   #10
krik556
Новичок
Джуниор
 
Регистрация: 07.06.2011
Сообщений: 1
По умолчанию

а как дать название таблице в word'е?
krik556 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт в Word из Memo Jene4ka Общие вопросы Delphi 5 20.10.2016 10:42
экспорт набора данных из бд в word kate158 Общие вопросы Delphi 9 22.11.2013 15:27
Экспорт из StringGrid в MS Office Excel Kamikadze_666 Общие вопросы C/C++ 0 26.03.2009 08:53
экспорт в word AD_min Общие вопросы Delphi 4 05.12.2008 14:17
Экспорт в Word Constellation БД в Delphi 5 15.04.2008 18:47