Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача данных в MS Word, из приложения созданных в БИЛДЕРЕ 
:(
    Опции темы
Зомби
Дата 20.5.2003, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Есть компонент для создания *.rtf файлов. А надо чтобы DOC. Можно ли как-то передать информацию в MS WORD с сохранением форматирования. Ну например, типа QuikReport нужно сделать и в *.doc сохраниить. Поможите. thumbs-up.gif
PM MAIL   Вверх
vickr
Дата 20.5.2003, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
Есть компонент для создания *.rtf файлов. А надо чтобы DOC. Можно ли как-то передать информацию в MS WORD с сохранением форматирования. Ну например, типа QuikReport нужно сделать и в *.doc сохраниить

В Ворде ты сам можешь вручную задать любое форматирование, какое хочешь (не совсем понятна фраза "с сохранением форматирования"). Если выбираешь инфу из БД, пожалуйста - вручную анализируй набор данных и передавай их в Ворд хоть с помощью компонентов - серверов VCL (если в Дельфи или Билдере), хоть совсем уж "вручную" - с помощью интефейса IDispatch и методов GetIDsOfNames и Revoke. Простор для выбора просто огромен. Передал данные в Ворд, сохранил док, отобразил юзеру для просмотра - вот тебе и отчетище smile.gif
--------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:)
PM MAIL   Вверх
Зомби
Дата 21.5.2003, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а можно примерчик про серверы VCL? или хотя бы описание, чтоб долго самому не мучиться исследованиями.
PM MAIL   Вверх
vickr
Дата 21.5.2003, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



В поисковик заходишь и находишь кучу интересной инфы по этому вопросу. На всякий случай держи рабочую процедуру, можешь изменить ее под свои нужды (она работает с сеткой TdxDbGrid).
Код

void TFTMenu::SaveGridWord(char* header, TdxDBGrid* Grid, AnsiString* sumfoot, char* footer)
{
OleVariant Template = EmptyParam;
Variant NewTemplate = False;
OleVariant SaveChanges = wdDoNotSaveChanges;
OleVariant OriginalFormat = Unassigned;
OleVariant RouteDocument = Unassigned;
OleVariant format  = wdFormatRTF;
OleVariant ndoc = 1;
OleVariant fa =False;
OleVariant tr =True;
try
{
 try
 {
  WordA->Connect();
 }
 catch (Exception &exception)
 {
  MessageDlg("Word97 не установлен", mtError, TMsgDlgButtons() << mbYes, 0);
  Abort;
 }
 SaveDialog1->Execute();
 filedoc = SaveDialog1->FileName;
 Grid->Parent->Repaint();
 OleVariant filename = StringToOleStr(filedoc);
 WordA->Visible = false;
 //WordA->Caption = StringToOleStr(filedoc);
 //Создание нового документа
 WordA->Documents->Add(Template, NewTemplate);
 WordD->ConnectTo(WordA->Documents->Item(ndoc) );
 WordA->Options->CheckSpellingAsYouType = False;
 WordA->Options->CheckGrammarAsYouType = True;
 WordD->PageSetup->Orientation =  wdOrientLandscape;  //wdOrientPortrait;
 WordD->PageSetup->LeftMargin = 36.855;
 WordD->PageSetup->RightMargin =  36.855;
 WordD->PageSetup->TopMargin =   70.875;
 WordD->PageSetup->BottomMargin = 42.525;
 //Вставка информации
 p = WordD->Get_Paragraphs()->First;
 r =p->get_Range();
 r->ParagraphFormat->Alignment = wdAlignParagraphCenter;
 // par->Range->Font->Bold = 1;
 r->Font->Name = StringToOleStr("Times New Roman");
 //  par->Range->Font->Italic = 1;
 //  par->Range->Font->Underline = wdUnderlineWords;
 r->Font->Size = 10;
 work = strtok(header,"$");
 while (work)
 {
  stroka =work;
  p =WordD->Get_Paragraphs()->Add();
  r = p->get_Range();
  r->Start = r->End;
  r->InsertBefore(StringToOleStr(stroka));
  work = strtok(NULL,"$");
 }
 p =WordD->Get_Paragraphs()->Add();
 r =p->get_Range();
 r->Start = r->End;
 p =WordD->Get_Paragraphs()->Add();
 r =p->get_Range();
 r->Start = r->End;
 ncol=0;
 for (i=0; i<Grid->ColumnCount; i++)
 {
  if (Grid->Columns[i]->Visible) ncol++;
 }
 ncoltabl = ncol;
 //формирование таблицы
 t = WordD->Get_Tables()->Add(r, 1, ncol);
 t->Rows->SpaceBetweenColumns = 5.7;   // 5.7 это =  0.2 мм
 t->Rows->SetLeftIndent(30.75, wdAdjustProportional);  // отступ слева таблицы
 t->Range->Font->Size = 12;
 t->Range->Cells->VerticalAlignment = wdCellAlignVerticalCenter;
 // заголовок
 ncol=0;
 for (i=0; i<Grid->ColumnCount; i++)
 {
  if (Grid->Columns[i]->Visible)
  {
   ncol++;
   t->Cell(1, ncol)->Range->Text = StringToOleStr(Grid->Columns[i]->Caption);
   t->Columns->Item(ncol)->SetWidth(Grid->Columns[i]->Width * 0.67, wdAdjustSameWidth);
  }
 }
 t->Range->ParagraphFormat->Alignment = wdAlignParagraphCenter;
 nrow = 1; //номер строки в таблице
 Grid->DataSource->DataSet->First();
 while ( !Grid->DataSource->DataSet->Eof)
 {
 ncol = 0;
 t->Rows->Add();
 nrow++;
 for (i=0; i<Grid->ColumnCount; i++)
  if (Grid->Columns[i]->Visible)
  {
   ncol++;
   switch (Grid->DataSource->DataSet->Fields->Fields[i]->DataType)
   {
   case 1:
    t->Cell(nrow, ncol)->Range->Text = StringToOleStr(Grid->DataSource->DataSet->Fields->Fields[i]->AsString);
    t->Cell(nrow, ncol)->Range->ParagraphFormat->Alignment =  wdAlignParagraphLeft;
    break;
   case 3:
    if (Grid->DataSource->DataSet->Fields->Fields[i]->AsInteger == 0)
     t->Cell(nrow, ncol)->Range->Text = StringToOleStr("-");
    else
     t->Cell(nrow, ncol)->Range->Text = StringToOleStr(FormatFloat("#####", Grid->DataSource->DataSet->Fields->Fields[i]->AsInteger) );
    t->Cell(nrow, ncol)->Range->ParagraphFormat->Alignment =  wdAlignParagraphRight;
    break;
   case 6:
    if (Grid->DataSource->DataSet->Fields->Fields[i]->AsFloat == 0)
     t->Cell(nrow, ncol)->Range->Text = StringToOleStr("-");
    else
     t->Cell(nrow, ncol)->Range->Text = StringToOleStr(FormatFloat("####0.00", Grid->DataSource->DataSet->Fields->Fields[i]->AsFloat) );
    t->Cell(nrow, ncol)->Range->ParagraphFormat->Alignment =  wdAlignParagraphRight;
    break;
   case 11: //DateTime
    t->Cell(nrow, ncol)->Range->Text = StringToOleStr(Grid->DataSource->DataSet->Fields->Fields[i]->AsDateTime.DateString());  //
    t->Cell(nrow, ncol)->Range->ParagraphFormat->Alignment =  wdAlignParagraphRight;
    break;
   default:
    t->Cell(nrow, ncol)->Range->Text = StringToOleStr(AnsiString(Grid->DataSource->DataSet->Fields->Fields[i]->AsFloat));
    t->Cell(nrow, ncol)->Range->ParagraphFormat->Alignment =  wdAlignParagraphRight;
    break;
   }
  } // if (Grid->Columns[i]->Visible)
  Grid->DataSource->DataSet->Next();
 } //  while ( !Grid->DataSource->DataSet->Eof)
 Grid->DataSource->DataSet->First();
 if ( sumfoot )      // последняя строка таблицы с итогами
 {
  t->Rows->Add();
  nrow++;
  for (i=0; i < ncoltabl; i++)
  {
   t->Columns->Item(i+1)->Cells->AutoFit(); //автоширина
   if (sumfoot[i] != "")
   {
    t->Cell(nrow, i+1)->Range->Text = StringToOleStr( sumfoot[i] );
    if (sumfoot[i] == "Итого" )
     t->Cell(nrow, i+1)->Range->ParagraphFormat->Alignment = wdAlignParagraphRight;
   }
  }
 }
 WordA->Visible = true;
 WordD->SaveAs(filename,format);
}
catch (Exception &exception)
{
 Application->ShowException(&exception);
 WordA->Disconnect();
}
}

--------------------
Каждую секунду, тыкая в клавиши, мы давим насмерть не менее 1000 микробов =:)
PM MAIL   Вверх
Vyacheslav
Дата 21.5.2003, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 9
Всего: 59



C:\Program Files\Borland\CBuilder5\Examples\PWordDemo




--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Зомби
Дата 22.5.2003, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



очень большое спасибоvickr
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

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


 




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


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

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