首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

你的一个想法,一句话或许就可以帮助一个快四的人,该怎么处理

2012-02-17 
你的一个想法,一句话或许就可以帮助一个快四的人SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsXL

你的一个想法,一句话或许就可以帮助一个快四的人
SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsXLS),FrmIntroduceAddView-> DbResult,SaveDialog1-> FileName+ ".xls ",false);
我现在用这个函数实现导出数据到Excel
遇到这样一个问题
在Acess数据库中有一个序号字段,是"自动编号"类型的
导出到Excel后"序号"列中的值和数据库中值一样
而不与网格中"序号"列的值对应;
网格中的值是经过翻译的.
有没有办法让Excel中"序号"列中的值与DBGrid中序号的值对应呀?

[解决办法]
SaveDBGridEhToExportFile 就是這樣的:忠實地把表的內容導出去。
如果要實現你所想的,
#define XlFileFormat -4143
#define OlePG OlePropertyGet
//---------------------------------------
#if __BORLANDC__ > 0x0582
#error "please test system::VarClear ";
#endif
#if (__BORLANDC__ > = 0x0580) && (__BORLANDC__ < 0x0583)
//取代system::VarClear , 因為 0x0580 這個版本無此函數
namespace System
{
inline void __fastcall VarClear(Variant &A)
{
Variant tmp ;
A = tmp ;
}
}
#endif
//將文件的內容導入excel中。。。
bool FileTransToExcel(char *HFile, char *sFileName,char *OpenCommand,SAFEARRAY *FieldArray)
{
bool OK = true ;
Variant vExcelApp, vWorkbook;
char *EFile = sFileName;
try
{
vExcelApp = Variant::CreateObject( "Excel.Application ");
}
catch(...)
{
MessageDlg( "異常:可能您的系統沒有正確安裝Excel ",mtError,TMsgDlgButtons() < <mbYes,0);
return false;
}
TVariant NoParam = TNoParam() ;
try{
if(strcmp(OpenCommand , "OpenText ") == 0 )
{

TVariant VArray ;
VArray.SetSAFEARRAY(FieldArray) ;
if(FieldArray)
vExcelApp.OlePG( "WorkBooks ").OleProcedure(OpenCommand, HFile,
NoParam,1,1,1,false,true,false,false,false,false, VArray);
else
vExcelApp.OlePG( "WorkBooks ").OleProcedure(OpenCommand, HFile,
NoParam,1,1,NoParam,false,true,false,false,false,false, NoParam);
}
else
vExcelApp.OlePropertyGet( "WorkBooks ").OleProcedure(OpenCommand, HFile);//打開文件

AnsiString str = "數據導出時間: " + Now().DateTimeString() ;
vExcelApp.OlePropertySet( "Caption ", "數據導出 ");
vExcelApp.OlePropertySet( "StatusBar ",str.c_str());
vWorkbook = vExcelApp.OlePG( "ActiveWorkbook ");
Variant vSheet = vExcelApp.OlePG( "ActiveSheet ");
vSheet.OlePG( "Columns ").OleProcedure( "AutoFit ");
VarClear(vSheet);
try
{//另存為Excel文件 : 如果文件已經存在會提示,
vWorkbook.OleProcedure( "SaveAs ", EFile, XlFileFormat,NoParam,NoParam,
NoParam,NoParam,NoParam,1);
}
catch(...)
{}
}
catch(Exception &E)
{
Application-> ShowException(&E);
OK = false ;
}
catch(...)
{
MessageDlg( "轉換失敗。 ",mtError,TMsgDlgButtons() < <mbYes,0);
// ::ShellExecute(NULL, OpenCommand, HFile, NULL, " ", SW_SHOW);
OK = false;
}
// vExcelApp.OlePropertySet( "Visible ",(Variant)true);
vWorkbook.OleProcedure( "Close ");
vExcelApp.OleProcedure( "Quit ");
VarClear(vWorkbook);
VarClear(vExcelApp);
return OK;
}
//---------------------------------------
1、可以先把DBGridEh 的內容導出為 HTML , 然後再轉入 xls 中去。
SaveDBGridEhToExportFile(__classid(TDBGridEhExportAsHTML), DBGridEh, FileName, true);
FileTransToExcel(FileName.c_str(),ExcelFile.c_str(), "Open ",NULL);
2、寫代碼一行行導出吧。

热点排行