1、c+builder编数据库中的记录导出到excel我正在用c+builder编写一个程序,想将数据库中的记录导出到excel中。请问用c+builder中的什么控件?代码如何写?首先把Excel报表文件保存到一个指定目录下,最好放在可执行程序的子目录下,作为模板文件。可以把报表标题、表头等设置好。这里是保存在trpt子目录下。然后建一个report目录,作为报表目标文件夹,存放填好数据的报表,可以由用户直接操作。首先确定在你的机器中装有Office。这里一Office2000为例。在C+Builder中新建一个工程,在窗体Form1上面放一个两个按钮SaveButton和ReadButton,
2、分别用来保存数据到Excel表和显示刚刚保存的Excel表。在SaveButton按钮的单击事件中把从数据库中取到的数据放入到指定的Excel表中并将改文件拷贝到report目录下。在ReadButto按钮的单击事件中显示report目录下的报表文件,方便用户修改和另外保存。在Form1.h头文件中定义几个变量:private:Variant Ex,Wb,Sheet,ERange,EBorders;并在文件头中包含如下语句:#include Excel_2K_SRVR.h#include 在Form1.cpp的文件头中加入#pragma link Excel_2K_SRVR主要代码如下:voi
3、d _fastcall TForm1: SaveButtonClick(TObject *Sender)trySaveButton-Enabled = false;ReadButton-Enabled = false;/使两个按钮无效file:/取报表文件CardSend.xls的完整目录名AnsiString ExcelFileName = GetCurrentDir()+trpttable.xls;if(!FileExists(ExcelFileName)Application-MessageBox(报表模板文件不存在,无法打开!,错误,MB_ICONSTOP|MB_OK);return;
4、file:/建立Excel的Ole对象ExtryEx = Variant:CreateObject(Excel.Application);catch(.)Application-MessageBox(无法启动Excel,错误,MB_ICONSTOP|MB_OK);return;file:/设置Excel为不可见Ex.OlePropertySet(Visible,false);file:/打开指定的Excel报表文件。报表文件中最好设定只有一个Sheet。Ex.OlePropertyGet(WorkBooks).OleProcedure(Open,ExcelFileName.c_str();Wb
5、 = Ex.OlePropertyGet(ActiveWorkBook);Sheet = Wb.OlePropertyGet(ActiveSheet);/获得当前默认的Sheetfile:/清空Excel表,这里是用循环清空到第300行。对于一般的表格已经足够了。AnsiString strRowTemp;AnsiString strRange;int iCols,iRows;/记录列数和行数/*从第三行开始,到第300行止。一般第一行是表标题,第二行是副标题或者制表日期。*/for(iRows=3;iRows300;iRows+) file:/假设只有6列。for (iCols = 1;iC
6、ols Open();/打开数据集file:/循环取数while(!Query1-Eof)file:/循环取字段的数据放到Excel表对应的行列中for(iCols=1;iColsFields-FieldsiCols-1-AsString;Sheet.OlePropertyGet(Cells,iRows,iCols).OlePropertySet(Value,strRowTemp.c_str();file:/画该行的表格边框strRange = A+IntToStr(iRows)+:F+IntToStr(iRows);ERange = Sheet.OlePropertyGet(Range,st
7、rRange.c_str();EBorders = ERange.OlePropertyGet(Borders);EBorders.OlePropertySet(linestyle,xlContinuous);EBorders.OlePropertySet(weight,xlThin);EBorders.OlePropertySet(colorindex,xlAutomatic);iRows+;Query1-Next();/while结束Wb.OleProcedure(Save);/保存表格Wb.OleProcedure(Close);关闭表格Ex.OleFunction(Quit);退出Ex
8、celfile:/定义目标文件名AnsiString DestinationFile =GetCurrentDir()+reporttable.xls;file:/将刚刚修改的Excel表格文件table.xls拷贝到report目录下if(!CopyFile(ExcelFileName.c_str(),DestinationFile.c_str(),false)Application-MessageBox(复制文件操作失败,Excel文件可能正在使用中!,错误,MB_ICONSTOP|MB_OK);return;Application-MessageBox(成功完成报表保存!n可以按打开Ex
9、cel文件按钮进行报表工作,提示,MB_ICONINFORMATION|MB_OK);SaveButton -Enabled = true;ReadButton -Enabled=true;/try结束catch(.)Application-MessageBox(操作Excel表格失败!,错误,MB_ICONSTOP|MB_OK);Wb.OleProcedure(Close);Ex.OleFunction(Quit);SaveButton -Enabled = true;ReadButton -Enabled=false;至此,完成报表数据的写入工作。如果要对完成的Excel表进行操作,可以点
10、击打开Excel表文件按钮(ReadButton),进行修改,保存,打印等操作。ReadButton的单击事件如下实现:void _fastcall TForm1: ReadButtonClick(TObject *Sender)tryfile:/指定report目录下的报表文件用于用户操作AnsiString ExcelFileName =GetCurrentDir();+reporttable.xls;if(!FileExists(ExcelFileName)Application-MessageBox(Excel表文件不存在,无法打开!,错误,MB_ICONSTOP|MB_OK);ret
11、urn;tryEx = Variant:CreateObject(Excel.Application);catch(.)Application-MessageBox(无法启动Excel,错误,MB_ICONSTOP|MB_OK);return;file:/使Excel可见Ex.OlePropertySet(Visible,true);file:/打开Excel表格文件Table.xlsEx.OlePropertyGet(WorkBooks).OleProcedure(Open,ExcelFileName.c_str();catch(.)Application-MessageBox(操作Exce
12、l表格错误!,错误,MB_ICONSTOP|MB_OK);Ex.OleFunction(Quit);本文来自CSDN博客,转载请标明出处:*/-把数据导出到Excel表中- try BitBtn10-Enabled=false; String filename1,filename2,strXlsFile; int pagenum; filename1=; /SaveD-FileEditStyle=; if(SaveD-Execute() filename1=SaveD-FileName;/+.xls; else filename1=d:daw50报表.xls; if(filename1!=);
13、 if(!DBGrid4-DataSource-DataSet-Active) / 数据集没有打开就返回 return; / 表格的行数 DBGrid4-DataSource-DataSet-Last(); int nRowCount(DBGrid4-DataSource-DataSet-RecordCount + 1); nRowCount = nRowCount 2? 2: nRowCount; / 表格的列数 int nColCount(39); nColCount = nColCount DataSource-DataSet-First(); for(int hlpnum=1;hlpn
14、um=filenum;hlpnum+) if(hlpnumfilenum) pagenum=pnum; else pagenum=nRowCount-(hlpnum-1)*pnum-1; /- filename2=filename1+0+IntToStr(hlpnum); strXlsFile=filename2; /= FILE * ofp; TStringList *HTMList; int FieldType10=0,0,0,0,2,0,0,0; bool ret; char *sFileName; char FileName200; sFileName=filename2.c_str(
15、);/./mytest.csv; sprintf(FileName,%s.xls0, sFileName); ofp=fopen(FileName,a+); if(ofp=NULL) ShowMessage(文件无法创建!); return; fputs(n, ofp);fflush(ofp);fputs(n, ofp);/ss=路段名称;/ fprintf(ofp, %sn, ss.c_str();ss=路段名称:;fprintf(ofp, %sn, ss.c_str();fputs(n, ofp);fflush(ofp);fputs(n, ofp); for(int j=0; j10; j
16、+) / 标题行的行高 /String ss; switch(j) case 0: ss=编号; break; case 1: ss=时间; break; case 2: ss=车牌号码; break; case 3: ss=总重; break; case 4: ss=限重; break; case 5: ss=超重; break; case 6: ss=速度; break; case 7: ss=人工车型; break; case 8: ss=自动车型; break; case 9: ss=轴数; break; case 10: ss=行使里程; break; case 11: ss=实际收
17、费; break; fprintf(ofp, %sn, ss.c_str(); fputs(n, ofp); for(int i=0; iDataSource -DataSet-FieldByName(vehNo)-AsInteger; Dtime=DBGrid4-DataSource -DataSet-FieldByName(datetime)-AsString; vehid=DBGrid4-DataSource -DataSet-FieldByName(vehid)-AsString; axlenum=DBGrid4-DataSource -DataSet-FieldByName(Tota
18、lNum)-AsInteger; /grnum=DBGrid4-DataSource -DataSet-FieldByName(AXleNum)-AsInteger; Totalweight=DBGrid4-DataSource -DataSet-FieldByName(Totalweigh)-AsInteger; / overld=DBGrid4-DataSource -DataSet-FieldByName(overld)-AsInteger; speed=DBGrid4-DataSource -DataSet-FieldByName(speed)-AsInteger; autotype=
19、DBGrid4-DataSource-DataSet-FieldByName(autotype)-AsString; handtype=DBGrid4-DataSource-DataSet-FieldByName(handtype)-AsString; / ts=DBGrid4-DataSource -DataSet-FieldByName(VEHTYPE)-AsString; if(axlenum=2&axlenumlimitweight) overld=Totalweight-limitweight; /- fflush(ofp); fputs(n, ofp); /- ss=IntToStr(vehno); fprintf(ofp, %sn, ss.c_str(); ss=Trim(Dtime); fprintf(ofp, %sn, ss.c_str(); ss=Trim(vehid); fprintf(ofp, %sn, ss.c_str(); ss=IntToStr(Totalweight); fprintf(ofp, %sn, ss.c_str(); ss=IntToStr(limitweight); fprintf(ofp, %sn, ss.c_str(); ss=IntToStr(overld); fprintf(ofp
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1