请老妖接分: http://community.csdn.net/Expert/topic/4794/4794374.xml?temp=.396908

fengread 2006-06-02 08:16:45
请教问题: DBGrid 数据倒出为 Execl文件
在妖哥网站 http://www.ccrun.com/article/go.asp?i=635&d=g75jbn 得到答案。
感谢daydayup234(关中刀客)指路。
希望妖哥看到后来收分!
...全文
395 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
truelove7283159 2006-07-28
  • 打赏
  • 举报
回复
up
老之 2006-06-17
  • 打赏
  • 举报
回复
蹭分
wxch 2006-06-17
  • 打赏
  • 举报
回复
接分!
daydayup234 2006-06-13
  • 打赏
  • 举报
回复
妖帮主硬被“黄袍加身”啊,
应该去收分
却之不恭 哈
海嵌 2006-06-13
  • 打赏
  • 举报
回复
接分!

C++ Builder 数据库及相关技术
http://community.csdn.net/Expert/topic/4794/4794374.xml?temp=.396908 还是留给老妖...
stevenjscn 2006-06-13
  • 打赏
  • 举报
回复
接分。
BlueDeepOcean 2006-06-13
  • 打赏
  • 举报
回复
那我也来凑凑热闹。接分了!
ccrun.com 2006-06-12
  • 打赏
  • 举报
回复
茶馆的分,请大家随便接。呵呵。
hellolongbin 2006-06-12
  • 打赏
  • 举报
回复
老妖说让我替他接分^_^
BlueDeepOcean 2006-06-12
  • 打赏
  • 举报
回复
晕。
fengread 2006-06-12
  • 打赏
  • 举报
回复
谢谢了!
daydayup234 2006-06-02
  • 打赏
  • 举报
回复
别吵醒大斑竹了。我给你,应该可以直接用:

//代码整理自ccrun.com
void Tmain_::DBGrid2Excel(TDBGrid *dbg, AnsiString strXlsFile)
{
if(!dbg->DataSource->DataSet->Active)return;//数据集没有打开就返回
Variant vExcelApp, vSheet;
try{vExcelApp = Variant::CreateObject("Excel.Application");}
catch(...)
{
MessageBox(0, "启动 Excel 出错, 可能是没有安装Excel.",
"DBGrid2Excel", MB_OK | MB_ICONERROR);
return;
}
// 隐藏Excel界面
vExcelApp.OlePropertySet("Visible", false);
// 新建一个工作表
vExcelApp.OlePropertyGet("Workbooks").OleFunction("Add", 1); // 工作表
// 操作这个工作表
vSheet = vExcelApp.OlePropertyGet("ActiveWorkbook").OlePropertyGet("Sheets",1);
// 设置Excel文档的字体
vSheet.OleProcedure("Select");
AnsiString dbgName(dbg->Name);
vSheet.OlePropertySet("Name",dbgName.c_str());
vSheet.OlePropertyGet("Cells").OleProcedure("Select");
vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("Size",dbg->Font->Size);
vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("Name",dbg->Font->Name.c_str());
vExcelApp.OlePropertyGet("Selection").OlePropertyGet("Font").OlePropertySet("FontStyle", "常规");
vSheet.OlePropertyGet("Cells",1,1).OleProcedure("Select");
// 表格的行数
DMOD_->IBDataSet1->FetchAll();
int nRowCount(dbg->DataSource->DataSet->RecordCount);
nRowCount=nRowCount<2?2:nRowCount;
// 表格的列数
int nColCount(dbg->Columns->Count);
nColCount=nColCount < 1? 1: nColCount;
// 设置单元格的宽度
for(int i=0; i<nColCount;i++)
{
int nColWidth = dbg->Columns->Items[i]->Width;
vExcelApp.OlePropertyGet("Columns", i + 1)
.OlePropertySet("ColumnWidth", nColWidth / 7);
}
// 先将列名写入Excel表格
for(int j=0; j<dbg->Columns->Count; j++)
{
// 标题行的行高
vExcelApp.OlePropertyGet("Rows", 1).OlePropertySet("RowHeight",20); //dbg->Columns->Items[j]->FieldName.c_str()
//
vSheet.OlePropertyGet("Cells",1,j+1).OlePropertySet("Value",dbg->DataSource->DataSet->Fields->Fields[j]->DisplayLabel.c_str());
// 设置列名单元格的背景色
Variant vInter=vSheet.OlePropertyGet("Cells",1,j+1).OlePropertyGet("Interior");
vInter.OlePropertySet("ColorIndex",15); // 灰色
vInter.OlePropertySet("Pattern",1); // xlSolid
vInter.OlePropertySet("PatternColorIndex",-4105); // xlAutomatic
}
// 将DBGrid中的数据写入Excel表格
dbg->DataSource->DataSet->First();
for(int i=0; i<nRowCount; i++)
{
// 普通数据行的行高16
vExcelApp.OlePropertyGet("Rows", i + 2).OlePropertySet("RowHeight", 16);
// 63 63 72 75 6E 2E 63 6F 6D
DMOD_->IBDataSet1->FetchAll();
for(int j=0; j<dbg->Columns->Count; j++)
{
vSheet.OlePropertyGet("Cells",i+2,j+1)
.OlePropertySet("Value",
dbg->DataSource->DataSet->FieldByName(
dbg->Columns->Items[j]->FieldName)->AsString.c_str());
}
dbg->DataSource->DataSet->Next();
}
// 保存Excel文档并退出
vExcelApp.OlePropertyGet("ActiveWorkbook").OleFunction("SaveAs",strXlsFile.c_str());
vExcelApp.OleFunction("Quit");
vSheet=Unassigned;
vExcelApp=Unassigned;
// 工作结束
AnsiString s;
s=ExtractFileName(strXlsFile);
s="Excel文件“"+s+"”生成,数据转换备份结束!";
MessageBox(0,s.c_str(),"数据备份保存", MB_OK|MB_ICONINFORMATION);
}

552

社区成员

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

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