Ir para conteúdo
Fórum Script Brasil
  • 0

como usar essa função no builder c++


vms

Pergunta

encontrei essa função em um site japones que exporta dbgrid para excel, eu consigo compilar, mas não sei como usar, alguém pode dar uma ajuda ai.

as messagens e comentarios estao assim porque não tenho fontes japonesas

//---------------------------------------------------------------------------   
  #include   "ComObj.hpp"   
  #define       PG       OlePropertyGet   
  #define       PS       OlePropertySet   
  #define       FN       OleFunction   
  #define       PR       OleProcedure   
  //----------------------------   
  void     DBGridToExcel(TDBGrid   *DBGrid,AnsiString   strPath)   
  {   
    
  Screen->Cursor=crHourGlass;   
  //???????DBGrid??????Excel??   
    
  TDataSet   *dsDS=DBGrid->DataSource->DataSet;   
  if(dsDS->RecordCount==0)   
  {   
  Application->MessageBox("?????????!\r\n?????????????","??",IDOK);   
      Screen->Cursor=crDefault;   
  return;   
  }   
  AnsiString   strMessage="??????:\n\r"+strPath+"\r\n???,????";   
  if(!FileExists(strPath))   
  {   
      Application->MessageBox(strMessage.c_str(),"??",MB_ICONSTOP|MB_OK);   
      Screen->Cursor=crDefault;   
  return;   
  }   
  //Application->MessageBoxA("????????????,????","??",0);   
  Variant   Ex,Wb,Sh1,Range1;   
  AnsiString   EReport=ExtractFilePath(Application->ExeName)+"EReport\\AReport"+FormatDateTime("yyyymmddhhnnsszzz",Now())+".xls";   
  if(FileExists(EReport))   
  {   
      AnsiString   strT="????:\r\n"+(AnsiString)EReport+"\r\n???,?????";   
      Application->MessageBox(strT.c_str(),"??",MB_ICONINFORMATION|MB_OK);   
  //??OLE??????????.   
      try   
      {   
          HWND   hPrevApp   =   ::FindWindow(NULL,"Microsoft   Excel");   
          if(!hPrevApp)   
          {   
              Ex=Variant::CreateObject("Excel.Application");   
          }   
          else   
  {   
              Ex=Variant::GetActiveObject("Excel.Application");   
          }   
      }   
  catch(...)   
  {   
  Application->MessageBox("????Excel,????????MS   OFFICE!","??",MB_ICONSTOP|MB_OK);   
          Screen->Cursor=crDefault;   
  return;   
  }//End   try   
  // Ex.OlePropertySet("Visible",true);   
  Ex.OlePropertyGet("WorkBooks").PR("Open",EReport.c_str());   
  }   //End   Opend   exists   file   
  else   //?????,???????????.   
  {   
      if(CopyFile(strPath.c_str(),EReport.c_str(),1)==0)   //????   
          {   
              ShowMessage("??????,???.");   
  Screen->Cursor=crDefault;   
              return;   
          }   
      try   
      {   
          HWND   hPrevApp   =   ::FindWindow(NULL,"Microsoft   Excel");   
          if(!hPrevApp)   
          {   
  Ex=Variant::CreateObject("Excel.Application");   
  }   
  else   
  {   
  Ex=Variant::GetActiveObject("Excel.Application");   
  }   
  }   
  catch(...)   
  {   
  Application->MessageBox("????Excel,????????MS   OFFICE!","??",MB_ICONSTOP|MB_OK);   
  Screen->Cursor=crDefault;   
  return;   
  }//End   try   
  Ex.OlePropertyGet("WorkBooks").PR("Open",EReport.c_str());   
  Wb=Ex.PG("ActiveWorkBook");     //   ??????   
      Sh1=Wb.PG("ActiveSheet");   
      int   columns=DBGrid->DataSource->DataSet->FieldCount;   
      int   iRow=10,iCol=0;   
      for(;iCol<columns;iCol++)                                     //?????   
  {   
          Sh1.PG("Cells",iRow,iCol+1).PS("Value",DBGrid->Columns->Items[iCol]->Title->Caption.c_str());   
      }   
      DBGrid->DataSource->DataSet->DisableControls();   
      iRow=11;   //????????Excel.   
      try   
      {   
          int   RecCount=1;   
  /*         WProgress->Show();   
  WProgress->ProgressBar1->Position=0;*/   
          for(dsDS->First();!dsDS->Eof;dsDS->Next(),iRow++)     //???????????????.   
          {   
              for(iCol=0;iCol<columns;iCol++)   
              {   
                  Sh1.PG("Cells",iRow,iCol+1).PS("Value",dsDS->Fields->Fields[iCol]->AsString.c_str());   
  /*                 WProgress->ProgressBar1->Position=int(RecCount*100/dsDS->RecordCount);   
  WProgress->Label1->Caption=IntToStr(WProgress->ProgressBar1->Position);*/   
                  Application->ProcessMessages();   
  }   
              RecCount++;   
  }   
    //       WProgress->Close();   
    
  /*   
  Sh1.OlePropertyGet("Range",   "A12:C10").OleProcedure("Select");   
  Range1   =   Ex.OlePropertyGet("Selection");   
  //Range1   =   Sh1.OlePropertyGet("Selection");   
  Range1.OlePropertySet("Borders","xlEdgeLeft");   
  Range1.OlePropertySet("LineStyle","xlThin");   
  Range1.OlePropertySet("ColorIndex","xlAutomatic");*/   
  }   
  catch(...)   
  {   
          Application->MessageBox("????????!????????????????\n\r????????,????????","????",MB_ICONSTOP|MB_OK);   
  DBGrid->DataSource->DataSet->EnableControls();   
  Ex=Unassigned;   
  Wb=Unassigned;   
  Sh1=Unassigned;   
  Screen->Cursor=crDefault;   
  DBGrid->DataSource->DataSet->EnableControls();   
  return;   
      }   
  Wb.PR("Save");   
  Ex.OlePropertySet("Visible",(Variant)true);   
  }//end   else   
  Screen->Cursor=crDefault;   
  DBGrid->DataSource->DataSet->EnableControls();   
  }

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...