使用COleSafeArray型变量来输出Excel,创建时声明为二维数组,二维中每一项对应sheet页中的一个单元格,想在一个单元格中写入多行数据,但是测试发现写入14行还好用,但是15行的时候程序就发生错误了,弹出一个错误消息框,哪位高人知道如何在COleSafeArray的某一项中写入大量数据来输出excel。以下为程序源代码需要倒入excel.cpp,excel.h才能运行 COleSafeArray saRet[2];
    int m_iNumRows;
    int m_iNumCols;
    CString m_sStartingCell;
    bool m_bFillWithStrings;
    DWORD numElements[2]; m_iNumRows = 5;
   m_iNumCols = 3;
    m_sStartingCell = _T("A3");
    m_bFillWithStrings = true;
    numElements[0]= m_iNumRows;   //Number of rows in the range.
    numElements[1]= m_iNumCols;   //Number of columns in the range. _Application     m_appExcel;  

if( !m_appExcel.CreateDispatch("Excel.Application") )
{
   this->MessageBox("can't create Excel");
   return;
}
 Workbooks  books;                                           // excel exit
    _Workbook  book;                                             // excel save
    Worksheets sheets;                                           // excel sheets
    _Worksheet sheet_Seq;                                        // Excel_Sequencen sheet
    _Worksheet sheet_Od;                                         // Excel_Sequence sheet
    _Worksheet sheet;                                            // other sheet
    CString sText = _T("");                                      // comment
    Range m_ExlRge;                                              // excel range
    LineFormat olineformat;                                      // line format
    COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);      // sheet
LPDISPATCH lpDisp;
    books = m_appExcel.GetWorkbooks();
    book = books.Add(vOpt);    // set name
sheets = book.GetSheets();
    sheet_Seq = sheets.GetItem(COleVariant((short)1));
    sheet_Seq.SetName(_T("Excel_Sequence"));
    m_ExlRge = sheet_Seq.GetCells();
    Range row = m_ExlRge.GetEntireColumn();                      // set line height
    row.SetColumnWidth(COleVariant((double)15));
    row = m_ExlRge.GetEntireRow();
    row.SetRowHeight(COleVariant((double)11.25));

m_ExlRge = sheet_Seq.GetCells();
    int nCol = 6;                                                   // current column
    int nRow = 2;  
CString sRType = _T("aaa");
    if(m_bFillWithStrings)
    {
        saRet[0].Create(VT_BSTR, 2, numElements);    }
    else
    {
    }    //Fill the SAFEARRAY.
    long index[2];
    long iRow;
    long iCol;       range = sheet_Seq.GetRange(COleVariant(m_sStartingCell), COleVariant(m_sStartingCell));
    range = range.GetResize(COleVariant((short)(m_iNumRows)), COleVariant((short)(m_iNumCols)));    //*** Fill the range with an array of values.
    for(iRow=0;iRow<=m_iNumRows-1;iRow++)
    {
        for(iCol=0;iCol<=m_iNumCols-1;iCol++)
        {
            index[0] = iRow;
            index[1] = iCol;
            VARIANT v;
            CString s;
            VariantInit(&v);
            v.vt = VT_BSTR;
            s = _T("");
            v.bstrVal = s.AllocSysString();
            saRet[0].PutElement(index, v.bstrVal);
            SysFreeString(v.bstrVal);
            VariantClear(&v);
        }
    }
         CString s = _T("   TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n\
TTTTTTT:Security Mode Command                      TTTTTTT: 56\n");    for(iRow=0;iRow<=m_iNumRows-1;iRow++)
    {
        for(iCol=0;iCol<=m_iNumCols-1;iCol++)
        {
            index[0] = iRow;
            index[1] = iCol;
            VARIANT v;
            VariantInit(&v);
            v.bstrVal = s.AllocSysString();
            saRet[0].PutElement(index, v.bstrVal);
            SysFreeString(v.bstrVal);
            VariantClear(&v);
        }
    }
    //Set the range value to the SAFEARRAY.
    
    range.SetValue2(COleVariant(saRet[0]));
    range.SetValue2(COleVariant(saRet2));*/
    
    saRet[0].Detach();
book.SaveAs(COleVariant(_T("f:\\a.xls")), vOpt, vOpt, vOpt, vOpt, vOpt, 0, vOpt, vOpt, vOpt, vOpt, vOpt);
    book.Close(vOpt, COleVariant(vOpt), vOpt);
    books.Close();  
m_appExcel.Quit();
    m_appExcel.SetIgnoreRemoteRequests(FALSE);
    m_ExlRge.ReleaseDispatch();
    row.ReleaseDispatch();
    sheet_Seq.ReleaseDispatch();
    sheet_Od.ReleaseDispatch();
    sheet.ReleaseDispatch();
    sheets.ReleaseDispatch();
    book.ReleaseDispatch();
    books.ReleaseDispatch();
    m_appExcel.ReleaseDispatch();
AfxMessageBox(_T("OK!"));