Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как данные из выборки в БД передать в Ексель? [D7, Win2k]


Megabyte ©   (2005-02-14 01:07:00) 

Т.е. мне надо передать в Ексель данные, полученные по запросу. Допустим, я в начале могу данные записать в DBGrid. Как оттуда их передать в Ексель?


GanibalLector   (2005-02-14 02:28:00) [1]

Вообще-то поиск еще рулит
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1108027449&n=1


iskatel   (2005-02-14 01:22:00) [2]

юзать можно двумя путями - через смарт поинтеры - быстро, но геморно и иногда глючит (в одном месте мне выдавало ошибку о несоответствии типов хотя вроде все правильно, все перепробовал)
второй путь - VARIANT обертки интерфейсов - проще, работает наверняка, но медленнее, на тебе пример, нарыл однажды, только он на сях, но принцип думаю поймеш

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "GetExcel.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm_GetExcel *Form_GetExcel;
//---------------------------------------------------------------------------
__fastcall TForm_GetExcel::TForm_GetExcel(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
/*
||
|| Launch Excel
||
*/
void __fastcall TForm_GetExcel::Button_LaunchExcelClick(TObject *Sender)
{
try
{
 my_excel = Variant::GetActiveObject("excel.application");
}
catch (...)
{
 try
 {
  my_excel = Variant::CreateObject("excel.application");
 }
 catch (...)
 {
  ShowMessage("GetExcel failed.");
  return;
 }
}
my_excel.OlePropertySet("Visible",(Variant)true);
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
/*
||
||
||
*/
void __fastcall TForm_GetExcel::Button_WorkbookClick(TObject *Sender)
{
Variant my_workbook;
Variant my_worksheet;
Variant my_range;

   PropertyGet     Range("Range");
   PropertySet     SetValue("Value");
   PropertySet     SetFormula("Formula");
   PropertyGet     GetValue("Value");
   PropertyGet     GetFormula("Formula");
                     
my_workbook  = my_excel.OlePropertyGet("ActiveWorkbook");
my_worksheet = my_workbook.OlePropertyGet("ActiveSheet");

   Range.ClearArgs();
   SetValue.ClearArgs();
   my_range    = my_worksheet.Exec(Range << "A1");
   my_range.Exec(SetValue << "My Excel Worksheet");

   Range.ClearArgs();
   my_range    = my_worksheet.Exec(Range << "B1:B5");
   my_range.Exec(SetFormula << "=rand()");

   Range.ClearArgs();
   SetFormula.ClearArgs();
   my_range    = my_worksheet.Exec(Range << "A2");
   my_range.Exec(SetFormula << "=sum(b1:b5)");

ShowMessage(my_range.OlePropertyGet("Value"));
ShowMessage(my_range.OlePropertyGet("Formula"));
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
/*
||
|| Add New Workbook
||
*/
void __fastcall TForm_GetExcel::Button_NewWorkbookClick(TObject *Sender)
{
Variant all_workbooks;
Variant my_workbook;

//-- Get workbooks collection
all_workbooks = my_excel.OlePropertyGet("Workbooks");

//-- Set number of worksheets to 1
my_excel.OlePropertySet("SheetsInNewWorkbook",(Variant)1);

//-- Create a new workbook
my_workbook  = all_workbooks.OleFunction("Add");
}
//---------------------------------------------------------------------------

void __fastcall TForm_GetExcel::Button_SaveClick(TObject *Sender)
{
Variant my_workbook = my_excel.OlePropertyGet("ActiveWorkbook");

my_workbook.OleProcedure("Save");
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
/*
||
||
||
*/
void __fastcall TForm_GetExcel::Button_SaveAsClick(TObject *Sender)
{
   Procedure SaveAs("SaveAs");
Variant my_workbook = my_excel.OlePropertyGet("ActiveWorkbook");
   
   my_workbook.Exec(SaveAs << "c:\\my_file.xls");
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
/*
||
||
||
*/
void __fastcall TForm_GetExcel::Button_OpenClick(TObject *Sender)
{
Variant all_workbooks = my_excel.OlePropertyGet("workbooks");
   Procedure Open("Open");

if (OpenDialog1->Execute())
{
       all_workbooks.Exec(Open << OpenDialog1->FileName);
}
}
//---------------------------------------------------------------------------


iskatel   (2005-02-14 01:10:00) [3]

если руками то в экселе все есть - хрень называется "внешние данные" в меню "данные", а если из проги то юзай его как ком сервер и передавай...


Наверх

Титульная страница Поиск, карта сайта Написать письмо