Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> таблицы в Делфи =>таблицы в word, Извините, что повторяюсь, но ОЧЕНЬ надо 
:(
    Опции темы
Аня
Дата 29.12.2003, 01:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Здравствуйте. Понимаю, что эта тема наверняка уже обсуждалась, но я не нашла необходимого. Я почти не работала с Делфи, так что если можно объясните на пальцах как можно сделать следующее:
по мере работы программы сохранять в одном и том же вордовском
документе таблицу stringgrid'a, добавляя текущую таблицу после всех
предыдущих версий этой же таблицы, но чтобы при этом окно ворда не было видно на экране, а появлялось после нажатия определенной кнопки( и содержало все записаные туда таблицы). И как предусмотреть: если пользователь выйдет из программы, не нажав на ту кнопку.
  Вверх
<Spawn>
Дата 29.12.2003, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Вот примерчик:

Код
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   StringGrid1: TStringGrid;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   procedure SaveGridToWord;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function ActivateOLEObject(AppProgId:string):OleVariant;
var
hRes:HRESULT;
Unknown:IUnknown;
Reg:TRegistry;
begin
Result:=UnAssigned;

try
Reg:=TRegistry.Create;
with Reg do
begin
  RootKey:=HKEY_CLASSES_ROOT;
  if not KeyExists(AppProgId) then
    Exit;
end;
finally
FreeAndNil(Reg);
end;

hRes:=GetActiveObject(ProgIDToClassID(AppProgID),nil,Unknown);
if hRes=MK_E_UNAVAILABLE then
Result:=CreateOleObject(AppProgID)
else
Result:=GetActiveOleObject(AppProgID);
end;

procedure TForm1.SaveGridToWord;
var
 NewTableText: array of string;
 InsertStr: string;
 Word, Document, StartRange: OleVariant;
 i, j: integer;
begin
 // Заполняем динамический массив значениями из StringGrid - а
 for i:= StringGrid1.FixedRows to StringGrid1.RowCount do
 begin
   SetLength(NewTableText, i);
   NewTableText[i - 1]:= '';
   for j:= StringGrid1.FixedCols to StringGrid1.ColCount do
   begin
     if Length(StringGrid1.Cells[j, i]) = 0 then
       InsertStr:= ' '
     else
       InsertStr:= StringGrid1.Cells[j, i];
     //Разделитель ";"  необходим для преобразования в таблицу(в Ворде)
     NewTableText[i - 1]:= NewTableText[i - 1] + InsertStr + ';';
   end;
   //Удаляем заключительный разделитель ";"
   Delete(NewTableText[i - 1], Length(NewTableText[i - 1]), 1);
 end;

 try
   // Создаем экземпляр Word -а методом позднего связывания
   Word:= ActivateOleObject('Word.Application');
   //Открываем заранее созданный пустой документ, находящийся в каталоге с программой('Test.doc')
   Document:= Word.Documents.Open(ExtractFilePath(ParamStr(0)) + 'Test.doc');

   //Сохраняем последнюю позицию в документе
   StartRange:= Document.Range.End;
   for i:= 0 to High(NewTableText) do
   begin
     //Добавляем новый параграф
     Document.Range(Document.Range.end - 1).InsertParagraphAfter;
     //И заполняем его подготовленным текстом
     Document.Paragraphs.Item(Document.Paragraphs.Count).Range := NewTableText[i];
   end;

   //Преобразуем текст в таблицу
   Document.Range(StartRange,
                  Document.Paragraphs.Item(Document.Paragraphs.Count).Range.End).ConvertToTable(';',
                  1, StringGrid1.Col - StringGrid1.FixedCols + 1);

   //Ну тут уже понятно что к чему
   Document.Save;
 finally
   Word.Quit;
   Word:= UnAssigned;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SaveGridToWord;
end;

end.


При закрытии же приложения можно в событии OnCloseQuery вызвать SaveGridToWord.

Это сообщение отредактировал(а) <Spawn> - 29.12.2003, 07:58


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Paradox
Дата 29.12.2003, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1





--------------------
---
PM MAIL WWW   Вверх
Аня
Дата 29.12.2003, 13:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











to <Spawn>
Спасибо. Только он у меня не работает.
Я правильно поняла, ваш пример должен был выводить таблицу в Ворде? В вордовском файле.
А у меня выводиться таблица в 25 строк и 1 колонкой. Может это как-то связано с тем что у меня Делфи 5?
Как это можно исправить?
  Вверх
<Spawn>
Дата 29.12.2003, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Да, тут маленькая ошибочка есть. Нужно вот это исправить(поставить StringGrid1.ColCount за место StringGrid1.Col):

Код
   Document.Range(StartRange,
                  Document.Paragraphs.Item(Document.Paragraphs.Count).Range.End).ConvertToTable(';',
                  1, StringGrid1.ColCount - StringGrid1.FixedCols + 1);


Это сообщение отредактировал(а) <Spawn> - 29.12.2003, 13:12


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
<Spawn>
Дата 29.12.2003, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Если же нужно что бы выводились еще заголовки таблицы, то нужно из всего кода убрать StringGrid1.FixedCols и StringGrid1.FixedRows


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Аня
Дата 29.12.2003, 13:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Предыдущее сообщение рассматрвать как временное помешатьльство.
Сейчас другой глюк( скорее всего у меня). Таблица выводиться, но между заполненными строками добавляется пустая строка, а в конце их целых 3 шт.
  Вверх
Paradox
Дата 29.12.2003, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1135
Регистрация: 18.11.2002
Где: Россия

Репутация: нет
Всего: 1



Аня зайди на сайт по ссылке выше там работоспособный пример, без всяких глюков


--------------------
---
PM MAIL WWW   Вверх
аня
Дата 29.12.2003, 14:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Paradox
Спасибо за совет. Но я уже разобралась с тем примером.
<Spawn>
В тексте надо исправить еще несколько строк, чтобы не выдавала лишний столбец и строку:
for i:= StringGrid1.FixedRows to StringGrid1.RowCount-1 do
for j:= StringGrid1.FixedCols to StringGrid1.ColCount-1 do
Document.Range(StartRange,
Document.Paragraphs.Item(Document.Paragraphs.Count).Range.End).ConvertToTable(';',
1, StringGrid1.Colcount - StringGrid1.FixedCols);
  Вверх
аня
Дата 29.12.2003, 14:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











2 <Spawn>
еще раз спасибо.
  Вверх
<Spawn>
Дата 29.12.2003, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



аня У меня так в коде и зделано, я просто забыл, что когда правил код на форуме не учел -1.
PS. Всегда пожалста smile.gif


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Аня
Дата 30.12.2003, 04:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











to <Spawn>
А можно сразу безобразнейшим образом воспользоваться вашим " Всегда пожалста"?
Возможно вы подскажите, где можно найти курсовой по базам данных.
Желательно программа"помощник экзаменатора", но за не имением оной сойдет любой дркгой курсовой.
  Вверх
<Spawn>
Дата 30.12.2003, 05:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Вряд и что смогу сказать по этому поводу - я ни разу пока не интересавался готовыми курсовыми, да и вряд ли буду, т.к. сам все курсачи в инсте буду делать smile.gif

Это сообщение отредактировал(а) <Spawn> - 30.12.2003, 14:22


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Аня
Дата 30.12.2003, 14:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











<Spawn>
Очень провильная позиция. Я тоже так думаю( курсовой нужен не мне, мой готовsmile.gif - вам спасибо).
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0755 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.