怎样把Access中的数据保存到Exlce中里啊!程序怎么写啊?求各位大吓

jock_521 2003-08-05 11:45:59
怎样把Access中的数据保存到Exlce中里啊!程序怎么写啊?求各位大吓
...全文
81 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwell 2003-08-07
  • 打赏
  • 举报
回复
这个是我做的一个数据库管理软件的一部分,作用就是通过ADOQuery打开一个记录集,然后导出为EXCEL文件。有什么不懂再问吧!
void __fastcall TmainForm::EXCEL2Click(TObject *Sender)
{
AnsiString str1;
Variant ex,newxls,sh;
if(baseinfoForm->TogetherQuery->IsEmpty())
{
ShowMessage("没有数据导出!");
return;
}
try
{
ex=CreateOleObject("Excel.Application");//启动Excel
ex.OlePropertySet("Visible",(Variant)true); //使Excel启动后可见
newxls=(ex.OlePropertyGet("Workbooks")).OleFunction("Add");//新建一新工作薄
sh=newxls.OlePropertyGet("ActiveSheet");
}
catch(...)
{
ShowMessage("启动Excel出错,可能由于Excel沒有正确安裝");
return;
}

baseinfoForm->TogetherQuery->First();
sh.OlePropertyGet("Cells").OlePropertyGet("Font").OlePropertySet("Size",10);
for(int i=0;i<baseinfoForm->TogetherQuery->FieldCount;i++)
{
str1=baseinfoForm->TogetherQuery->Fields->Fields[i]->FieldName ;
sh.OlePropertyGet("Cells",1,i+1).OlePropertySet( "Value",str1.c_str());
sh.OlePropertyGet("Cells",1,i+1).OlePropertyGet("Font").OlePropertySet("Bold",true);
}
int RecCount=0;;
while(!baseinfoForm->TogetherQuery->Eof)
{
for(int i=0;i<baseinfoForm->TogetherQuery->FieldCount;i++)
{
str1=baseinfoForm->TogetherQuery->Fields->Fields[i]->AsString ;
sh.OlePropertyGet("Cells",RecCount+2,i+1).OlePropertySet("Value",str1.c_str() );

}
baseinfoForm->TogetherQuery->Next();
RecCount++;
}
ex.OleProcedure("Save");
ex.OlePropertyGet("ActiveWorkBook").OleProcedure("Close");
ex.OlePropertyGet("WorkBooks")=NULL;
ex.OleFunction("Quit");
baseinfoForm->TogetherQuery->First();
ShowMessage("完成操作!");

}
xthmpro_cn 2003-08-06
  • 打赏
  • 举报
回复
我告诉你吧:
这是我的程序(Delphi的Code,应用到C++Builder时你自己改):
procedure TForm_MainForm.SaveDataToExeclWorkBook(DataSet: TDataSet);
var i,j,Columi: integer;
Sheet: Variant;
begin
DataSet.DisableControls;

if varIsEmpty(MSExcel) then
MSExcel:=CreateOleObject('Excel.Application');

MSExcel.Visible:=True;

MSExcel.WorkBooks.Add();
MSExcel.WorkBooks[1].WorkSheets[1].Name:='Data';

Sheet:=MSExcel.WorkBooks[1].WorkSheets['Data'];

Sheet.Columns[8].NumberFormatLocal := '@';//设置单元格格式为'文本'
Sheet.Columns[11].NumberFormatLocal := '000000';//设置单元格的格式为'邮政编码'

//输出字段名称
Columi:=1;
for j := 0 to DataSet.FieldCount-1 do
if DataSet.Fields.Fields[j].Visible then
Sheet.Cells[1,j+Columi]:=DataSet.Fields.Fields[j].DisplayName
else
Dec(Columi);

//输出数据;忽略非可见字段
Columi:=1;
DataSet.First;
for i := 0 to DataSet.RecordCount-1 do
begin
for j := 0 to DataSet.FieldCount-1 do
if DataSet.Fields.Fields[j].Visible then
Sheet.Cells[i+2,j+Columi]:=DataSet.Fields.Fields[j].AsString
else
Dec(Columi);
Columi:=1;
DataSet.Next;
end;

DataSet.First;
DataSet.EnableControls;
end;
//------------------------------------------------------------------------------
weiguang 2003-08-06
  • 打赏
  • 举报
回复
用Variant试试
Janes001 2003-08-06
  • 打赏
  • 举报
回复
干嘛这么麻烦,直接用EXCEL打开MDB不就行了。
Santos 2003-08-06
  • 打赏
  • 举报
回复
建议你先用TQuery或TTable将Access数据库打开,读出数据,然后再写入Excel中
jock_521 2003-08-05
  • 打赏
  • 举报
回复
怎么会没有一个回答呢?^.^

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧