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

数据导出到excel,该如何解决

2012-02-23 
数据导出到excel用户选择需要的数据后导入到excel.由于数据不能一次同时选择,所以想先把需要导入的数据全

数据导出到excel
用户选择需要的数据后导入到excel.
由于数据不能一次同时选择,所以想先把需要导入的数据全部放到内存(或者有其他更好的方式!),最后选择好了以后一起导入到excel。
导入格式如下:

  字段1 字段2 字段3 字段4 。。  
  0.77 0.67 0.68 0.89 。。。

由于导入的字段数目不确定,所以写数据的时候应该怎么写! 并且还需要以数据连同表格的形式一起导入到excel,数据导入了那表格线怎么自动画!
  望指教!!!


[解决办法]
使用ole
[解决办法]
使用写文件的方法也可以,一条一条写
写×.cvs文件。如下
字段1, 字段2 , 字段3 , 字段4 。。
0.77 , 0.67, 0.68, 0.89 。。。

比用OLE快100倍
[解决办法]
#define PG OlePropertyGet
#define PS OlePropertySet
#define OP OleProcedure
#define OF OleFunction

AnsiString ExcelFileName = GetCurrentDir()+"\\SqlOpt\\CuStyle.xls";
try
{
Ex = Variant::CreateObject("Excel.Application");
}
catch(...)
{
Application->MessageBox("无法启动Excel","错误",MB_ICONSTOP|MB_OK);
return;
}
Ex.PS("Visible",false);
Ex.PG("WorkBooks").OP("Open",ExcelFileName.c_str());
Wb = Ex.PG("ActiveWorkBook");
Sheet = Wb.PG("ActiveSheet");
Sheet.PG("Range","A2:I3000").OP("Clear");
int iRows, LI;
LI = SP1->RecordCount;
SP1->First();
for(iRows=2;iRows<LI+2;iRows++)
{
dmy=SP1->Fields->Fields[3]->AsString + "-"+SP1->Fields->Fields[4]->AsString+"-"+SP1->Fields->Fields[5]->AsString;
Sheet.PG("Cells",iRows,1).PS("Value",SP1->Fields->Fields[0]->AsInteger);
Sheet.PG("Cells",iRows,2).PS("Value",SP1->Fields->Fields[1]->AsString.c_str());
Sheet.PG("Cells",iRows,3).PS("Value",SP1->Fields->Fields[2]->AsString.c_str());
Sheet.PG("Cells",iRows,4).PS("Value",dmy.c_str());
Sheet.PG("Cells",iRows,5).PS("Value",SP1->Fields->Fields[6]->AsFloat);
Sheet.PG("Cells",iRows,6).PS("Value",SP1->Fields->Fields[7]->AsString.c_str());
Sheet.PG("Cells",iRows,7).PS("Value",SP1->Fields->Fields[8]->AsString.c_str());
Sheet.PG("Cells",iRows,8).PS("Value",SP1->Fields->Fields[9]->AsString.c_str());
Sheet.PG("Cells",iRows,9).PS("Value",SP1->Fields->Fields[10]->AsInteger);
SP1->Next();
}
Wb.OP("Save");
Wb.OP("Close");
Ex.OF("Quit");
Ex = Unassigned;
Wb = Unassigned;
Sheet = Unassigned;

导出到Excel,再把没用的删除就可以了. 


[解决办法]
AnsiString __fastcall Tfm_aesc_fyjs::Convert_String(double pp)
{
if(pp==0) return "";
else return FormatFloat("0.00",pp);
}
//---------------------------------------
void __fastcall Tfm_aesc_fyjs::SetFont(Variant ExcelApp,AnsiString value,AnsiString font_name,AnsiString font_style,int font_size,int prow,int pcol)
{ //设置字体并写入
ExcelApp.OlePropertyGet("Rows",prow).OlePropertySet("RowHeight",20);
ExcelApp.OlePropertyGet("Cells",prow,pcol).OlePropertySet("Value",value.c_str());


ExcelApp.OlePropertyGet("Cells",prow,pcol).OlePropertyGet("Font").OlePropertySet("Name",font_name.c_str()); //黑体
ExcelApp.OlePropertyGet("Cells",prow,pcol).OlePropertyGet("Font").OlePropertySet("FontStyle",font_style.c_str());
ExcelApp.OlePropertyGet("Cells",prow,pcol).OlePropertyGet("Font").OlePropertySet("Size",font_size);

}

//写入CELL中
void __fastcall Tfm_aesc_fyjs::SetCell(Variant ExcelApp,AnsiString value,int row,int col,int width,int pos)
{
ExcelApp.OlePropertyGet("Columns",col).OlePropertySet("ColumnWidth",width);
ExcelApp.OlePropertyGet("Cells",row,col).OlePropertySet("Value",value.c_str());
ExcelApp.OlePropertyGet("Cells",row,col).OlePropertyGet("Font").OlePropertySet("FontStyle","粗体");
ExcelApp.OlePropertyGet("Cells",row,col).OlePropertySet("HorizontalAlignment",pos); //居中
ExcelApp.OlePropertyGet("Rows",row).OlePropertySet("RowHeight",20);
}


//画框
void __fastcall Tfm_aesc_fyjs::SetBorder(Variant ExcelApp,int row,int colcount)
{ //设置选中区域边框
AnsiString tmp;
char chr;
chr='A'+colcount-1;
tmp="A"+IntToStr(row)+":"+AnsiString(chr)+IntToStr(row);
ExcelApp.OlePropertyGet("Range",tmp.c_str()).OleProcedure("Select");
ExcelApp.OlePropertyGet("Selection").OlePropertyGet("Borders",1).OlePropertySet("LineStyle",1);
ExcelApp.OlePropertyGet("Selection").OlePropertyGet("Borders",2).OlePropertySet("LineStyle",1);
ExcelApp.OlePropertyGet("Selection").OlePropertyGet("Borders",3).OlePropertySet("LineStyle",1);
ExcelApp.OlePropertyGet("Selection").OlePropertyGet("Borders",4).OlePropertySet("LineStyle",1);
}

//合并格
void __fastcall Tfm_aesc_fyjs::MergeCell(Variant ExcelApp,int row_begin,int row_end,int col_begin,int col_end,bool iscenter)
{ //合并单元格及输入报表标题
AnsiString tmp;
char chr_begin,chr_end;
chr_begin='A'+col_begin-1;
chr_end='A'+col_end-1;
tmp=AnsiString(chr_begin)+IntToStr(row_begin)+":"+AnsiString(chr_end)+IntToStr(row_end);
// ShowMessage("chr["+AnsiString(chr)+"="+int(chr)+"]>>>"+tmp);
ExcelApp.OlePropertyGet("Range",tmp.c_str()).OleFunction("Merge" , false);
if(iscenter==true)
ExcelApp.OlePropertyGet("Range",tmp.c_str()).OlePropertySet("HorizontalAlignment",3);//居中
}
//---------------------------------------
AnsiString __fastcall Tfm_aesc_fyjs::Conver_Col(int col)
{
char Col_Str;
Col_Str='A'+col-1;
return AnsiString(Col_Str);
}

热点排行