Как сохранить в Word Document??
От: PsiH Казахстан  
Дата: 18.03.03 12:16
Оценка:
Помогите кто сможет!!!!

Как можно сохранить информацию с CListCtrl в Вордовский документ,
При этом в ворде нарисовать сетку (Line Separator)?
Выставить параметры страницы и распечатать?

18.03.03 16:23: Перенесено модератором из 'C/C++' — ПК
Re: Как сохранить в Word Document??
От: SchweinDeBurg Россия https://zarezky.spb.ru/
Дата: 18.03.03 12:26
Оценка:
Здравствуйте, PsiH, Вы писали:

PH>Как можно сохранить информацию с CListCtrl в Вордовский документ,

PH>При этом в ворде нарисовать сетку (Line Separator)?
PH>Выставить параметры страницы и распечатать?

Подрубить #import'ом соответствующие TLB/OLB и заюзать Word как automation server.
- Искренне ваш, Поросенок Пафнутий
Re[2]: Как сохранить в Word Document??
От: Saddam Россия http://saddam.narod.ru
Дата: 19.03.03 07:27
Оценка:
Здравствуйте, SchweinDeBurg, Вы писали:

SDB>Здравствуйте, PsiH, Вы писали:


PH>>Как можно сохранить информацию с CListCtrl в Вордовский документ,

PH>>При этом в ворде нарисовать сетку (Line Separator)?
PH>>Выставить параметры страницы и распечатать?

SDB>Подрубить #import'ом соответствующие TLB/OLB и заюзать Word как automation server.

Вариант — импорт ATL "и заюзать Word как automation server".
- Вы знаете — жаль, просто по-человечески жаль Памелу Андерсон, которая никогда не сможет сыграть на баяне...
Re: Как сохранить в Word Document??
От: Рома Мик Россия http://romamik.com
Дата: 19.03.03 09:17
Оценка:
Здравствуйте, PsiH, Вы писали:

PH>Помогите кто сможет!!!!


PH>Как можно сохранить информацию с CListCtrl в Вордовский документ,

PH>При этом в ворде нарисовать сетку (Line Separator)?
PH>Выставить параметры страницы и распечатать?
Хочется автоматизацию поюзать?.. Ну, не знаю...
А по-простому так: Берешь rich-edit, засовываешь в него твой текст ( EM_SETSEL, EM_REPLACESEL, EM_SETPARAFORMAT ), сохраняешь в rtf ( EM_STREAMOUT ), распечатываешь на принтер ( EM_FORMATRANGE ).

Где-то слышал, что можно и в doc сохранять.

ps А вообще вопрос в другой форум.
... << RSDN@Home 1.0 beta 6a >>
Re: Как сохранить в Word Document??
От: Рома Мик Россия http://romamik.com
Дата: 19.03.03 16:54
Оценка:
Здравствуйте, PsiH, Вы писали:

PH>Помогите кто сможет!!!!


PH>Как можно сохранить информацию с CListCtrl в Вордовский документ,

PH>При этом в ворде нарисовать сетку (Line Separator)?
PH>Выставить параметры страницы и распечатать?

Можно поюзать автоматизацию. По-моему неприятное занятие... без VB... Да и Ворд далеко не везде имеется

А можно так: создаешь rich edit, вставляешь в него какой надо текст ( EM_SETSEL, EM_REPLACESEL, EM_SETPARAFORMAT ), сохраняешь в rtf ( EM_STREAMOUT ) ( какие-то умельцы умудрялись и doc, как — не знаю ), печатаешь ( EM_FORMATRANGE )
... << RSDN@Home 1.0 beta 6a >>
Re: Как сохранить в Word Document??
От: nap2k Верблюд есть
Дата: 20.03.03 07:25
Оценка:
Здравствуйте, PsiH, Вы писали:

PH>Помогите кто сможет!!!!


PH>Как можно сохранить информацию с CListCtrl в Вордовский документ,

PH>При этом в ворде нарисовать сетку (Line Separator)?
PH>Выставить параметры страницы и распечатать?

Вот как подключиться к ворду, дальше открываешь сам ворд, включаешь автозапись макроса, делаешь что нужно, полученный текст вставляешь в программу на С++, корректируя синтаксис.

// for MS Office 2000
#import "C:\Program Files\Microsoft Office\Office\MSO9.DLL"
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
#import "C:\Program Files\Microsoft Office\Office\MSWORD9.OLB" \
        rename("ExitWindows","_ExitWindows")

#include "stdafx.h"
#include <stdio.h>

void main()
{
  ::CoInitialize(NULL);
  try
  {
    using namespace Word;
    _ApplicationPtr word(L"Word.Application");
    word->Visible = true;
    word->Activate();

    // создаём новый документ
    _DocumentPtr wdoc1 = word->Documents->Add();

    // пишем пару слов
    RangePtr range = wdoc1->Content;
    range->LanguageID = wdRussian;
    range->InsertAfter("Пара слов");

    // сохраняем как HTML
    wdoc1->SaveAs(&_variant_t("C:\\MyDoc\\test.htm"),
                  &_variant_t(long(wdFormatHTML)));
               // иногда придется прибегать к явному преобразованию типов,
               // т.к. оператор преобразования char* в VARIANT* не определён

    // открывает документ test.doc
    _DocumentPtr wdoc2 = word->Documents->Open(&_variant_t("C:\\MyDoc\\test.doc"));
    // вызываем макрос
    word->Run("Macro1");

  }
  catch(_com_error& er) 
  {
    char buf[1024];
    sprintf(buf,"_com_error:\n"
                "Error       : %08lX\n"
                "ErrorMessage: %s\n"
                "Description : %s\n"
                "Source      : %s\n",
                er.Error(),
                (LPCTSTR)_bstr_t(er.ErrorMessage()),
                (LPCTSTR)_bstr_t(er.Description()),
                (LPCTSTR)_bstr_t(er.Source()));

    CharToOem(buf,buf); // только для косольных приложений
    printf(buf);
  }
  ::CoUninitialize();
}
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...
Пока на собственное сообщение не было ответов, его можно удалить.