Excel控件使用之怪现象,请DX们诊断诊断

xiaoleeflying 2003-07-29 06:19:58
小小程序:Form一个,上有TExcelApplication,TExcelWorkbook,TExcelWorksheet,TButton,TSaveDialog各一个,点击button候向ExcelWorksheet写记录,然后存盘, 代码如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
wchar_t pp[200];
if (SaveDialog1->Execute())
{ ExcelApplication1->Connect();
ExcelApplication1->Workbooks->Add(1,0);
ExcelWorkbook1->ConnectTo(ExcelApplication1->Workbooks->get_Item(1));
ExcelWorksheet1->ConnectTo(ExcelWorkbook1->Worksheets->get_Item(1));

ExcelWorksheet1->Cells->set_Item(1,1,"人命");
ExcelWorksheet1->Cells->set_Item(1,2,"成绩");

ExcelWorksheet1->SaveAs(StringToWideChar(SaveDialog1->FileName,pp,198));
ExcelWorksheet1->Disconnect();
ExcelWorkbook1->Disconnect();
ExcelApplication1->Disconnect();
ExcelApplication1->Quit();
};
}
现象:点击后弹出保存对话框,敲入文件名,点保存,结果又弹出一个对话框
询问workbook1已经更改,是否么保存,点击之后又弹出对话框(很明显是excel的)
这是保存才有效? 功能相同类似代码的在Delphi5下已经编译运行通过,可在Builder下死活不行,已经好几天了,还有不能多次保存,否则退出程序时报错:
“0x77a62aef”指令引用的“0x001585e8”内存。该内存不能为“read”
被折磨两天了,请DX们指点指点,50分送上
...全文
21 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoleeflying 2003-08-15
  • 打赏
  • 举报
回复
请DX们指点迷津啊
solee 2003-08-14
  • 打赏
  • 举报
回复
gz
xiaoleeflying 2003-08-14
  • 打赏
  • 举报
回复



会不会是编译器或者环境的问题呢?
xiaoleeflying 2003-07-31
  • 打赏
  • 举报
回复
楼上老大们,消除对话框倒是有方法解决:
1. 用set_DisplayAlerts()设置;
2. ExcelApplication1->Save();
但是不能多次保存问题依旧存在;只保存一次退出时没问题,
多次保存时,每次点击button都正常,但是退出程序时,
弹出:“0x77a62aef”指令引用的“0x001585e8”内存。该内存不能为“read”
这样的对话框。退出后Excel依旧在后台运行;
用Delphi写的几乎是一摸一样的代码根本没有这样的问题。
我觉得我的Builder代码没什么问题啊,真是十分头大,又过相同经历的DX们指点迷津吧
还有:Builder5编译速度十分不爽,跟Delphi5没法比。不知大家有同感否 ??
TR@SOE 2003-07-31
  • 打赏
  • 举报
回复
没有办法,控制OFFICE的话我推荐是用DELPHI。
TR@SOE 2003-07-30
  • 打赏
  • 举报
回复
今天心情好,顺大便给你个代码看看:

try
{
EA->Connect();
EA->set_Visible(0, true);
EA->set_DisplayAlerts(0, false);
EW->ConnectTo(EA->Workbooks->Add(EP, 0));
WS->ConnectTo(EW->Worksheets->get_Item(TVariant("Sheet1")));

WS->Activate();
}
catch(...)
{
... ...
}

//Now write in the data into Excel
//Write the data title first
WS->Cells->set_Item((TVariant)1, (TVariant)"A", (TVariant)"Date In");
WS->Cells->set_Item((TVariant)1, (TVariant)"B", (TVariant)"Time In");
WS->Cells->set_Item((TVariant)1, (TVariant)"C", (TVariant)"Result");


//Now iterate the dataset and write into the Excel sheet
SP->Last();
int Row=2; //Start writing at Row 2
String d, t;
float r;

while(!SP->Bof)
{
d=DateToStr(SP->FieldByName("datein")->AsDateTime);
t=TimeToStr(SP->FieldByName("timein")->AsDateTime);
r=SP->FieldByName("rresult")->AsFloat;

WS->Cells->set_Item((TVariant)Row, (TVariant)"A", (TVariant)d);
WS->Cells->set_Item((TVariant)Row, (TVariant)"B", (TVariant)t);
WS->Cells->set_Item((TVariant)Row, (TVariant)"C", (TVariant)r);

Row++;
SP->Prior();
}

if(EW->get_Saved(0)==false)
EA->Dialogs->get_Item(xlDialogSaveAs)->Show();

EA->Disconnect();
TR@SOE 2003-07-30
  • 打赏
  • 举报
回复
如果确信保存没有问题,可以设置set_DisplayAlert=false来关闭那个EXCEL弹出的对话框。
solee 2003-07-30
  • 打赏
  • 举报
回复
这个问题论坛上已经有人解答了,自己找找看看

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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