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

OFFICE 2007 OLE 创建EXCEL文件,打不开。该怎么解决

2012-04-03 
OFFICE 2007 OLE 创建EXCEL文件,打不开。我的程序里用的是ExcelSheet.OleFunction(SaveAs, sFileName.c_s

OFFICE 2007 OLE 创建EXCEL文件,打不开。
我的程序里用的是ExcelSheet.OleFunction("SaveAs", sFileName.c_str());
现在问题是当用户机器装的是OFFICE2007的时候,就麻烦了。
存的文件OFFICE 2003根本打不开,用OFFICE 2007打开时提示文件后缀于文件格式不一致。
大家都知道OFFICE 2007里存的EXCEL 文件后缀是XLSX,以前的都是XLS,所以我的SAVEDIALOG里默认
后缀是XLS,表面看,后缀是XLS,实际存的应该后缀是XLSX也就是2007格式的。
请问,该如何解决这个矛盾。

[解决办法]
没有问题呀 我试过了,下面的是我的代码

int ret_code = 0;
//为了不影响别的路径,TSaveDialog 会改变当前路径
AnsiString asSaveCurrentPath = GetCurrentDir() ;

TSaveDialog *sdSaveDialog = new TSaveDialog(NULL);

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

//ShowMessage("Sucess!");
}
//不保存工作表
//else MSExcel.OlePropertyGet("ActiveWorkBook").OlePropertySet("Saved",true);
}
__finally { delete sdSaveDialog; SetCurrentDir(asSaveCurrentPath); }

if(blCloseFile && (0 == ret_code))
{
MSExcel.OlePropertyGet("ActiveWorkBook").OleProcedure("Close");
MSExcel.OleProcedure("Quit");
}
else MSExcel.OlePropertySet("Visible", true);

热点排行