BCB中如何设置保存的Excel文件名,最好是保存和另存为都有!

leotam 2003-01-17 10:48:44
有很多讲述打开Excel文件的帖子,但就没有说明如何更改保存名的帖子!不要默认的Book1。xls的保存名!大虾帮忙!测试通过马上给分!
...全文
136 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Behard 2003-03-17
  • 打赏
  • 举报
回复
/*******************************************************************************
* Function Name : SaveExcel
* Description : 保存工作表
* Return : -
* Parameters : -
* Author : Behard
* Date : 2002/09/02
*******************************************************************************/
extern "C" void __declspec(dllexport) __stdcall SaveExcel(void)
{
//为了不影响别的路径,TSaveDialog 会改变当前路径
AnsiString asSaveCurrentPath = GetCurrentDir() ;

TSaveDialog *sdSaveDialog = new TSaveDialog(NULL);

sdSaveDialog->Filter = "Microsoft Excel 工作表 (*.xls)|*.XLS" ;
sdSaveDialog->FileName = FormatDateTime("yyyymm", Now())+ ".xls" ;
try
{
//不保存工作表
MSExcel.OlePropertyGet("ActiveWorkBook").OlePropertySet("Saved",true);
if( sdSaveDialog->Execute() )
{
//应该加上询问是否覆盖保存
if ( FileExists(sdSaveDialog->FileName) ) //MessageBox
{
//int iReSave =
if ( Application->MessageBox("文件已经存在,是否覆盖保存 ?", "操作提示", MB_YESNO) == IDYES )
{
DeleteFile( sdSaveDialog->FileName );
MSExcel.OlePropertyGet("ActiveWorkBook").OleProcedure("SaveAs",sdSaveDialog->FileName);
}
}
else MSExcel.OlePropertyGet("ActiveWorkBook").OleProcedure("SaveAs",sdSaveDialog->FileName);

//ShowMessage("Sucess!");
}
//不保存工作表
//else MSExcel.OlePropertyGet("ActiveWorkBook").OlePropertySet("Saved",true);
}
__finally { delete sdSaveDialog; SetCurrentDir(asSaveCurrentPath); }
//MSExcel.OlePropertyGet("ActiveWorkBook").OleProcedure("SaveAs","D:\\1.xls");
MSExcel.OlePropertyGet("ActiveWorkBook").OleProcedure("Close");
MSExcel.OleProcedure("Quit");
//ShowMessage("SaveExcel!") ;
}

Behard 2003-03-17
  • 打赏
  • 举报
回复
一般使用 SaveAs 过程就可以了
不过最好自己处理覆盖原来文件
否则会出来一个很不好的提示
chongyiren 2003-03-17
  • 打赏
  • 举报
回复
study
wlei007 2003-03-16
  • 打赏
  • 举报
回复
其实很简单的,看看office的帮助了,我用的是XP所以帮助是vbaxl10.chm。
用cbc的Variant类的Oleprocedure("SaveAS",想存的文件名)...
下面是我的code
AnsiString SaveFile2;
SaveFile2 = "d:\\报表\\";
SaveFile2 += ReportDate; //ReportDate为存放报表日期的AnsiString变量
SaveFile2 += "政策问答统计汇总表.xls";
if(!FileExists(Template2))//Template2为要写的Excel表模板
{
Application->MessageBox("报表模板不存在!","错误",
MB_ICONSTOP|MB_OK);
return ;
}
try
{
Ex = Variant::CreateObject("Excel.Application");
}
catch(...)
{
Application->MessageBox("无法启动Excel,请检查系统\
是否安装了Excel!","错误",MB_ICONSTOP|MB_OK);
return;
}
try
{
Ex.OlePropertySet("Visible",false);
Ex.OlePropertyGet("WorkBooks").OleProcedure ("Open",Template2.c_str());
Wb = Ex.OlePropertyGet("ActiveWorkBook");
Sheet = Wb.OlePropertyGet("ActiveSheet");
//开始写表
//写Time标题
Sheet.OlePropertyGet("Cells",3,2).OlePropertySet(\
"Value",(TVariant)ReportDate.c_str());
Sheet.OlePropertyGet("Cells",16,9).OlePropertySet(\
"Value",(TVariant)PutDate.c_str());

for(int i=5,j=0; i<13 && j<QSum.RecordCount; i++,j++)
{


if(i<=12 && j<8)
{
Sheet.OlePropertyGet("Cells",i,3).OlePropertySet(\
"Value",(TVariant)DBInfo2[j].TargetName.c_str());
Sheet.OlePropertyGet("Cells",i,4).OlePropertySet(\
"Value",(TVariant)(IntToStr(DBInfo2[j].SelNum)).c_str());
Sheet.OlePropertyGet("Cells",i,5).OlePropertySet(\
"Value",(TVariant)(IntToStr(DBInfo2[j].prc)).c_str());
if( i==12 )
{
i = 4;
}

}
else
{
Sheet.OlePropertyGet("Cells",i,8).OlePropertySet(\
"Value",(TVariant)DBInfo2[j].TargetName.c_str());
Sheet.OlePropertyGet("Cells",i,9).OlePropertySet(\
"Value",(TVariant)(IntToStr(DBInfo2[j].SelNum)).c_str());
Sheet.OlePropertyGet("Cells",i,10).OlePropertySet(\
"Value",(TVariant)(IntToStr(DBInfo2[j].prc)).c_str());
}

}
//注意下面就是你们要的了SaveAs
Wb.OleProcedure("SaveAs",(TVariant)SaveFile2.c_str());
Wb.OleProcedure("Close");
Ex.OleFunction("Quit");

}
catch(...)
{
Application->MessageBox("报表生成失败!","错误",
MB_ICONSTOP|MB_OK);
return false;
}
zhendema2325 2003-03-15
  • 打赏
  • 举报
回复
我也想问的阿
halibut 2003-01-19
  • 打赏
  • 举报
回复
UP!

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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