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

怎么保存表格控件的内容到打开的Excel里去

2012-02-08 
如何保存表格控件的内容到打开的Excel里去?如题,在表格中已经存在一些内容了。现在,要实现单击一个按钮后:1

如何保存表格控件的内容到打开的Excel里去?
如题,在表格中已经存在一些内容了。

现在,要实现单击一个按钮后:

1.自动打开Excel应用程序,里面的文档中已经存好了表格中的数据(保存与否要用户自己点Excel的保存来决定)

2.这个功能能不能作成dll方便以后调用?

怎样实现啊,谢谢各位了。

[解决办法]
void __fastcall RegComm::DBGrid2Excel(TDBGrid *dbg, String strXlsFile)
{
if(!dbg-> DataSource-> DataSet-> Active) // 数据集没有打开就返回
return;
Variant vExcelApp, vSheet;
try
{
vExcelApp = Variant::CreateObject( "Excel.Application ");
}
catch(Exception &E)
{
ShowMessage( "DBGrid2Excel()! 启动 Excel 出错, 可能是没有安装Excel. " + E.Message ) ;
return;
}
try
{
// 隐藏Excel界面
vExcelApp.OlePropertySet( "Visible ", false);
// 新建一个工作表
vExcelApp.OlePropertyGet( "Workbooks ").OleFunction( "Add ", 1); // 工作表
// 操作这个工作表
vSheet = vExcelApp.OlePropertyGet( "ActiveWorkbook ")
.OlePropertyGet( "Sheets ", 1);
// 设置Excel文档的字体
vSheet.OleProcedure( "Select ");
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 ");
// 表格的行数
int nRowCount(dbg-> DataSource-> DataSet-> RecordCount + 1);
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);
//
vSheet.OlePropertyGet( "Cells ", 1, j + 1).OlePropertySet( "Value ",dbg-> Columns-> Items[j]-> FieldName.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);
//
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;
// 工作结束
MessageBox(0, "DBGrid2Excel 转换结束! ", "导出记录 ", MB_OK | MB_ICONINFORMATION);
}
catch(Exception &E)
{
ShowMessage( "RegComm::DBGrid2Excel(TDBGrid *dbg, String strXlsFile) 错误信息 " + E.Message );
}
}

热点排行