请教如何保存excel文档而不弹出保存对话框,谢谢

wumy_ld 2007-03-30 04:31:19
小弟使用的代码如下:
bool __fastcall TWMain::PaintExcelImage(AnsiString strFile)
{
Variant ExcelApp, WorkBook1, Sheet1, Range1, Chart1;
int iCount;
String strInfo;

try
{
ExcelApp = Variant::CreateObject("Excel.Application");
}
catch (...)
{
strInfo = "无法创建excel对象,请确认本机已正确安装excel。";
MessageBox(this->Handle, strInfo.c_str(), "警告", MB_OK + MB_ICONWARNING);
return false;
}

ExcelApp.PS("Visible", (Variant)false);
WorkBook1 = ExcelApp.PG("workbooks").FN("open", strFile);
Sheet1 = WorkBook1.PG("ActiveSheet");
// 读取行数
iCount = Sheet1.PG("UsedRange").PG("Rows").PG("Count");
// 选择数据区
strInfo = "A1:B" + String(iCount);
Range1 = Sheet1.PG("Range", strInfo.c_str());
//Range1 = Sheet1.Exec(PropertyGet("Range")<<strInfo);
// 插入Chart对象
Chart1 = ExcelApp.Exec(PropertyGet("Charts")).Exec(Function("Add"));
// 显示到当前Sheet上
Chart1.FN("Location", 2, Sheet1.PG("Name")); // ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2"

Chart1 = ExcelApp.PG("ActiveChart");
Chart1.PS("ChartType", 65);
//Chart1.FN("SetSourceData", Range1, 0);
Chart1.Exec(Function("SetSourceData")<<Range1<<2);
// 保存工作簿
WorkBook1.FN("Save");
// 退出excel
ExcelApp.Exec(Procedure("Quit"));
//ExcelApp.FN ("Quit");
//ExcelApp = Unassigned;

return true;
}

在执行退出excel的语句(ExcelApp.Exec(Procedure("Quit")))后,软件弹出了是否保存excel的提示框,我上面已经调用了save方法,为什么还会提示保存呢?
请高人指点,不胜感激。
...全文
818 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wumy_ld 2007-03-30
  • 打赏
  • 举报
回复
太感谢老妖了,呵呵,实在是感谢!佩服!!!
我机子上测试成功用的是:
WorkBook1.FN("SaveAs", strFile.c_str(), -4143); //xlExcel8
很奇怪,用56报错。
ccrun.com 2007-03-30
  • 打赏
  • 举报
回复
我又来了。
用这一句就行了:

WorkBook1.FN("SaveAs", strFile.c_str(), 56); //xlExcel8
wumy_ld 2007-03-30
  • 打赏
  • 举报
回复
看了下vba,应该是可以保存的:
ActiveWorkbook.SaveAs Filename:="E:\test\wzyww 2004.12.06 (17.05).xls", _
FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False
似乎关键在于在保存时设置FileFormat,但是不知道该怎么设,呵呵。
ccrun.com 2007-03-30
  • 打赏
  • 举报
回复
汗。刚看见你的回复。当然有关系了。你那个文件充其量只是.csv文件,根本不是真正意义上的.xls。所以不能保存除了文本以外的OLE对象(这是二进制的)。
ccrun.com 2007-03-30
  • 打赏
  • 举报
回复
我刚测试了一下,没问题。Chart可以保存。检查一下你的代码是否完全编译了。

#define PG OlePropertyGet
#define PS OlePropertySet
#define FN OleFunction
#define PR OleProcedure

void __fastcall TForm1::Button1Click(TObject *Sender)
{
AnsiString strFile = "C:\\ccrun\\123.xls";

Variant ExcelApp, WorkBook1, Sheet1, Range1, Chart1;
int iCount;
String strInfo;

try
{
ExcelApp = Variant::CreateObject("Excel.Application");
}
catch (...)
{
strInfo = "无法创建excel对象,请确认本机已正确安装excel。";
MessageBox(this->Handle, strInfo.c_str(), "警告", MB_OK + MB_ICONWARNING);
return;
}

ExcelApp.PS("Visible", (Variant)false);
WorkBook1 = ExcelApp.PG("workbooks").FN("open", strFile.c_str());
ExcelApp.OlePropertySet("DisplayAlerts", false);

Sheet1 = WorkBook1.PG("ActiveSheet");
// 读取行数
iCount = Sheet1.PG("UsedRange").PG("Rows").PG("Count");
// 选择数据区
strInfo = "A1:B" + String(iCount);
Range1 = Sheet1.PG("Range", strInfo.c_str());
//Range1 = Sheet1.Exec(PropertyGet("Range")<<strInfo);
// 插入Chart对象
Chart1 = ExcelApp.Exec(PropertyGet("Charts")).Exec(Function("Add"));
// 显示到当前Sheet上
Chart1.FN("Location", 2, Sheet1.PG("Name")); // ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2"

Chart1 = ExcelApp.PG("ActiveChart");
Chart1.PS("ChartType", 65);
//Chart1.FN("SetSourceData", Range1, 0);
Chart1.Exec(Function("SetSourceData")<<Range1<<2);
// 保存工作簿
WorkBook1.FN("SaveAs", strFile.c_str());
// 退出excel
ExcelApp.Exec(Procedure("Quit"));
//ExcelApp.FN ("Quit");
//ExcelApp = Unassigned;

ShowMessage("搞定");
}
wumy_ld 2007-03-30
  • 打赏
  • 举报
回复
这个excel文件其实是一个用tab键分隔的文本文件,只是后缀改成了xls,会不会跟这有关?
示例:
0.08 6494
0.1 8454
0.12 10696
0.14 12942
0.16 15457
0.18 17659
wumy_ld 2007-03-30
  • 打赏
  • 举报
回复
还是不行哦,难道chart单独要save一下?
ccrun.com 2007-03-30
  • 打赏
  • 举报
回复
把保存的语句换成这个试试:
WorkBook1.FN("SaveAs", strFile.c_str());
wumy_ld 2007-03-30
  • 打赏
  • 举报
回复
关掉提示之后,chart没有保存下来,呵呵,请老妖再度出手,谢谢
ccrun.com 2007-03-30
  • 打赏
  • 举报
回复
OLE专业户来也!!!


// 关掉警告提示就可以了。
ExcelApp.OlePropertySet("DisplayAlerts", false);

13,826

社区成员

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

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