程序实现如下1. 打开Excel
Application  m_app;
Range         m_range;
_Worksheet    m_worksheet;
Workbooks     m_workbooks;
Sheets        m_worksheets;

  CWnd *pExelWnd = CWnd::FindWindow("XLMAIN", NULL);
  if (pExelWnd )
  {
  pExelWnd->ShowWindow(SW_SHOWNORMAL);
  pExelWnd->UpdateWindow();
  pExelWnd->BringWindowToTop();
  } else if(!m_app.CreateDispatch("Excel.Application")) 
{
AfxMessageBox("No Excel");
return;
} LPDISPATCH pRange, pWorkbooks;

VERIFY(pWorkbooks = m_app.GetWorkbooks());
m_workbooks.AttachDispatch(pWorkbooks);


LPDISPATCH pWorkbook = NULL;

int nSheets=0;
m_app.SetSheetsInNewWorkbook(50);
CComVariant Template(true);  //文件名 pWorkbook = m_workbooks.Add(Template);  //  如果已有Excel启动,则程序执行到这出错
        //  前面语句调用后 pExcelWnd=CWnd::FindWindow("Xlmain", NULL);
         //  如果pExcelWnd!= NULL 则程序执行到上面红色行的语句出错

if (m_workbooks.GetCount() == 0 || nSheets==50)
{
nSheets=0;
m_app.SetSheetsInNewWorkbook(50);
pWorkbook = m_workbooks.Add(Template); // Save the pointer for
//  later release
}
LPDISPATCH pWorksheets = m_app.GetWorksheets();
ASSERT(pWorksheets != NULL);
m_worksheets.AttachDispatch(pWorksheets);
// 得到sheet1 
LPDISPATCH pWorksheet = m_worksheets.GetItem(COleVariant((short)1));

m_worksheet.AttachDispatch(pWorksheet);
m_worksheet.Select(Template);

//  得到sheet中所有行和列的对象
pRange  = m_worksheet.GetCells();
m_range.AttachDispatch(pRange); 2. 添加数据
m_range.SetItem(COleVariant((long)(1)),COleVariant((long)(1)),COleVariant(""));
m_range.SetItem(COleVariant((long)(1)),COleVariant((long)(2)),COleVariant(“No.1”));3. 关闭Excel
m_app.SetVisible(TRUE);

// m_workbooks.Save
m_range.ReleaseDispatch();
m_worksheet.ReleaseDispatch();
m_worksheets.ReleaseDispatch();
m_workbooks.ReleaseDispatch();
m_app.ReleaseDispatch();当已经有一个Excel程序在执行时,为什么在下面的行会出错
CComVariant Template(true); // (false); //文件名
pWorkbook = m_workbooks.Add(Template);请教高手帮忙,先谢谢了!