Office中国论坛/Access中国论坛
标题:
Excel编程版本不兼容问题!??
[打印本页]
作者:
llaoer
时间:
2005-8-23 18:08
标题:
Excel编程版本不兼容问题!??
用VC对Excel编程,遇到版本不兼容的问题,恳求各位能够指点一下!
机器1是XP操作系统,officeXP,用以下代码打开Excel文件,本机编译(其它代码略),然后进行读写,没有问题。
机器2是XP操作系统,office2003,同样用以下代码打开Excel文件,本机编译(其它代码略),然后进行读写,没有问题。
问题是:
如果在机器1(officeXP)上编译后的.exe文件拿到机器2上运行(office2003),在运行到CreateDispatch(_T("Excel.Application"), NULL)时就会抛出一个异常,进入到代码中的“catch(...)”分支。
如果在机器2(office2003)上编译后的.exe文件拿到机器1(officeXP)上运行,在运行到CreateDispatch(_T("Excel.Application"), NULL)时就会返回失败。
为了避免版本的兼容问题,我使用的是Excel9来访问Excel,但还是有问题,
后来发现,即使两台机器都是OfficeXP,如果版本不同,问题也同样存在。
请问高手这个问题的原因是什么,如何解决?
万分感谢!
附代码:
BOOL CMLCExcelSheet::OpenExcelFile(CString strExcelFile)
{
try
{
m_pExcelApp = new _Application;
if (!m_pExcelApp)
{
AfxMessageBox("new _Application; Failed!", MB_OK);
return FALSE;
}
if (!m_pExcelApp->CreateDispatch(_T("Excel.Application"), NULL))
{
AfxMessageBox("Create Excel Service failed!", MB_OK);
return FALSE;
}
m_pExcelApp->SetVisible(FALSE);
m_ExcelBooks = m_pExcelApp->GetWorkbooks();
m_ExcelBooks.Open(strExcelFile,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);
m_WorkBook.AttachDispatch(m_pExcelApp->GetApplication());
m_ExcelSheets = m_WorkBook.GetSheets();
m_WorkSheet = m_ExcelSheets.GetItem(COleVariant((short)m_nSheetNum));
m_WorkSheet.Activate();
}
//Catch control-specific exceptions.
catch (COleDispatchException * e)
{
CString cStr;
if (!e->m_strSource.IsEmpty())
cStr = e->m_strSource + " - ";
if (!e->m_strDescription.IsEmpty())
cStr += e->m_strDescription;
else
cStr += _T("unknown error");
AfxMessageBox(cStr, MB_OK);
e->Delete();
return FALSE;
}
//Catch all MFC exceptions, including COleExceptions.
// OS exceptions will not be caught.
catch (CException *e)
{
CString cStr;
cStr.Format(_T("%s(%d): OLE Execption caught: SCODE = %x"),
__FILE__, __LINE__, COleException:
rocess(e));
AfxMessageBox(cStr, MB_OK);
e->Delete();
return FALSE;
}
catch(...)
{
AfxMessageBox("CMLCExcelSheet::OpenExcelFile(CString strExcelFile) Exception", MB_OK);
return FALSE;
}
return TRUE;
}
作者:
xlonger
时间:
2005-8-24 21:50
采用后引用方式,先判断版本,再根据情况后引用。
作者:
llaoer
时间:
2005-8-29 23:17
谢谢
xlonger,这个问题已经困扰我很长时间了,能说的具体点吗?非常感谢!!!
作者:
xlonger
时间:
2005-9-2 00:16
声明对象变量,可以创建一个能包含任何类型对象引用的变量。不过,该变量访问对象是后期绑定的,也就是说,绑定在程序运行时才进行。要创建一个使用前期绑定方式的对象变量,也就是说,在程序编译时就完成绑定,则对象变量在声明时应指定类 ID。
作者:
llaoer
时间:
2005-9-5 18:28
xlonger,非常感谢您的回复!不过实在不好意思,我还是没能没白具体该怎样操作,能否麻烦您在我代码的基础上稍稍做点改动,示范一下,衷心感谢!
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3