Re: Как сохранить в Word Document??
От: PsiH Казахстан  
Дата: 21.03.03 05:05
Оценка:
Спасибо всем за помощь!

С Вордом вроде получилось! только вот таблицу нарисавть не получается!!!
Я нашел в MSDN класс работы с вордом — msword8 и экселем — excel8!!!
Но не нашел описание этого класса может кто подскажит как используя excel8 для рисования таблиц и запуска макроса!??
Пример подключения и загрузки данных с лист контрола в EXCEL:

#include "excel8.h"

    // For optional arguments
    COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    
    // Instantiate Excel
    _Application oApp;
    oApp.CreateDispatch("Excel.Application");
    if (!oApp)
    {
        AfxMessageBox("Cannot start Excel.");
        return;
    }
    
    //Get the Workbooks collection so that you can add a new
    //workbook
    Workbooks oBooks = oApp.GetWorkbooks();
    _Workbook oBook = oBooks.Add(vOpt);
    
    //Get the Worksheets collection of the new Workbook so that
    //you can get the IDispatch for the first WorkSheet
    Worksheets oSheets = oBook.GetWorksheets();
    _Worksheet oSheet = oSheets.GetItem(COleVariant((short)1));
    
    //*** ADD DATA TO THE WORKSHEET
    CString csAlphabet = "A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z1";
    CStringArray Alphabet;
    Alphabet.SetSize(26,1);
    UINT j = 0,
         z = 0;
    while(j != 26)
    {
        CString a;
        a = csAlphabet.Mid(z, 2);
        Alphabet.SetAt(j,_T(a));
        z += 2;
        j++;
    }

    //Add Headers to Row 1 of the worksheet
    Range oRange;
    int nItemCount = m_report.GetItemCount();
    int nColumnCount = m_report.GetHeaderCtrl()->GetItemCount();
    for (int i=0;i < nColumnCount;i++)
    {
        char   szTitle[255];
        CString pszColTitleTable,
                colAlphabet;
        LVCOLUMN col;
        col.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_FMT;
        col.cchTextMax = sizeof(szTitle);
        col.pszText    = szTitle;
        if (!m_report.SendMessage(LVM_GETCOLUMN, (WPARAM)(int)i, (LPARAM)(LPLVCOLUMN)&col)) continue;
        
        pszColTitleTable = col.pszText;
        colAlphabet = Alphabet.GetAt(i);
        oRange = oSheet.GetRange(COleVariant(colAlphabet), vOpt);
        oRange.SetValue(COleVariant(pszColTitleTable));
    }
    //Create a safe array that is nItemCount x nColumnCount --
    COleSafeArray sa;
    DWORD dwElements[2];
    dwElements[0]= nItemCount;                //Number of rows
    dwElements[1]= nColumnCount;            //Number of columns
    sa.Create(VT_VARIANT, 2, dwElements);
    
    //Populate the safe array with the data
    long index[2];
    long lRow;
    COleVariant vTemp;
    CString s;
    
    for(lRow=0;lRow<nItemCount;lRow++)
    {
        index[0] = lRow;   
        int nCol;
        for(nCol = 0; nCol < nColumnCount; nCol++)
        {
            index[1] = nCol;
            s = m_report.GetItemText(lRow,nCol);
            vTemp = s;
            sa.PutElement(index, vTemp);
        }
    }
    
    //Fill a range, starting at A2 with the data in
    //the safe array
    oRange = oSheet.GetRange(COleVariant("A2"), vOpt);
    oRange = oRange.GetResize(COleVariant((short)nItemCount),COleVariant((short)nColumnCount));
    oRange.SetValue(sa);
    sa.Detach();
    
    //*** ADD FORMULAS TO THE WORKSHEET
    
    //Fill the fourth column with a formula to compute the
    //sales tax. Note that the formula uses a "relative"
    //cell reference so that it fills properly.
    
        //*** FORMAT THE WORKSHEET
    oRange = oSheet.GetRange(COleVariant("A1"), COleVariant("Z1"));
    Font oFont = oRange.GetFont();    
    oFont.SetBold(COleVariant((short)TRUE));//Apply Bold to Headers
    oRange = oRange.GetEntireColumn();
    oRange.AutoFit();                    //AutoFit the columns 1:4
    
    //Make Excel visible and give the user contro
    oApp.SetVisible(TRUE);
    oApp.SetUserControl(TRUE);
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.