C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
TStringGrid, как отправить в excel
HeliCOPter
Отправлено: 25.05.2006, 22:14


Ученик-кочегар

Группа: Участник
Сообщений: 14



Подскажите как отправить содержимое StringGrida в Excel?
Aptem
Отправлено: 26.05.2006, 05:49


Мастер участка

Группа: Участник
Сообщений: 349



Ищите в поиске. Такие вопросы уже много раз разбирались.
Лена
Отправлено: 26.05.2006, 09:22


Мастер участка

Группа: Участник
Сообщений: 501



Для этих целей очень хорош компонент от TMS TAdvStringGrid c адаптером. Делает сохранение в exel одной строкой кода.

Lizard
Отправлено: 26.05.2006, 11:17


Ученик-кочегар

Группа: Участник
Сообщений: 20



CODE

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "ProgressUnit.h"
#include "Unit1.h"
#include <utilcls.h>

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CGAUGES"
#pragma resource "*.dfm"
TProgressForm *ProgressForm;
//---------------------------------------------------------------------------
__fastcall TProgressForm::TProgressForm(TComponent* Owner)
       : TForm(Owner)
{
}
//---------------------------------------------------------------------------
bool x = 0;

void __fastcall TProgressForm::FormActivate(TObject *Sender)
{
int i, I;
Variant XL, v0, v1;
Label2->Caption = "результаты расчета";
try
 {
  XL = CreateOleObject("Excel.Application");
 }
catch(...)
 {
  MessageDlg("Результаты расчета сохранить не возможно из-за отсутствия Microsoft Office Excel на вашем компьютере!\n"
             "Для сохранения результатов расчета установите Microsoft Office Excel.",
             mtWarning, TMsgDlgButtons() << mbOK, 0);
  x = 1;  
 }

if (!x)
   {
    XL.OlePropertySet("Visible",0);
    v0 = XL.OlePropertyGet("Workbooks");
    XL.OlePropertySet("SheetsInNewWorkbook",(Variant)2);
    v0.OleProcedure("Add");
    v1 = v0.OlePropertyGet("Item",1);
    v0 = v1.OlePropertyGet("Worksheets");
    v0.OlePropertyGet("Item",1).OlePropertySet("Name","Результаты расчета");
    v0.OlePropertyGet("Item",2).OlePropertySet("Name","Основные показатели и ТЭПы");

    CGauge1->MaxValue = StrToFloat(Form1->StringGridResults->RowCount) + StrToFloat(Form1->StringGridTEP->RowCount);

    v1 = v0.OlePropertyGet("Item",1);
    for (i = 0; i < Form1->StringGridResults->RowCount; i++)
        {
         Application->ProcessMessages();
         CGauge1->Progress = i + 1;

         v1.OlePropertyGet("Cells").OlePropertyGet("Item",i + 1, 1).OlePropertySet("Value", Form1->StringGridResults->Cells[0][i].c_str() );
         v1.OlePropertyGet("Cells").OlePropertyGet("Item",i + 1, 2).OlePropertySet("Value", Form1->StringGridResults->Cells[1][i].c_str() );
         v1.OlePropertyGet("Cells").OlePropertyGet("Item",i + 1, 3).OlePropertySet("Value", Form1->StringGridResults->Cells[2][i].c_str() );
         v1.OlePropertyGet("Cells").OlePropertyGet("Item",i + 1, 4).OlePropertySet("Value", Form1->StringGridResults->Cells[3][i].c_str() );
         v1.OlePropertyGet("Cells").OlePropertyGet("Item",i + 1, 5).OlePropertySet("Value", Form1->StringGridResults->Cells[4][i].c_str() );
         v1.OlePropertyGet("Cells").OlePropertyGet("Item",i + 1, 6).OlePropertySet("Value", Form1->StringGridResults->Cells[5][i].c_str() );
         v1.OlePropertyGet("Cells").OlePropertyGet("Item",i + 1, 7).OlePropertySet("Value", Form1->StringGridResults->Cells[6][i].c_str() );
        }

    Label2->Caption = "основные показатели и ТЭПы";
    I = i;

    v1 = v0.OlePropertyGet("Item",2);
    for (i = 0; i < Form1->StringGridTEP->RowCount; i++)
        {
         Application->ProcessMessages();
         CGauge1->Progress = I + i + 1;

         v1.OlePropertyGet("Cells").OlePropertyGet("Item",i + 1, 1).OlePropertySet("Value", Form1->StringGridTEP->Cells[0][i].c_str() );
         v1.OlePropertyGet("Cells").OlePropertyGet("Item",i + 1, 2).OlePropertySet("Value", Form1->StringGridTEP->Cells[1][i].c_str() );
        }

    XL.OlePropertySet("Visible",1);
    x = 1;
   }
}
//---------------------------------------------------------------------------
void __fastcall TProgressForm::Timer1Timer(TObject *Sender)
{
if (x) ProgressForm->Close();
x = 0;
}
//---------------------------------------------------------------------------



Вернуться в Вопросы программирования в C++Builder