vms Postado Abril 10, 2008 Denunciar Share Postado Abril 10, 2008 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(); } Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
vms
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
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.