Как можно сохранить информацию с CListCtrl в Вордовский документ,
При этом в ворде нарисовать сетку (Line Separator)?
Выставить параметры страницы и распечатать?
18.03.03 16:23: Перенесено модератором из 'C/C++' — ПК
Здравствуйте, PsiH, Вы писали:
PH>Как можно сохранить информацию с CListCtrl в Вордовский документ, PH>При этом в ворде нарисовать сетку (Line Separator)? PH>Выставить параметры страницы и распечатать?
Подрубить #import'ом соответствующие TLB/OLB и заюзать Word как automation server.
Здравствуйте, SchweinDeBurg, Вы писали:
SDB>Здравствуйте, PsiH, Вы писали:
PH>>Как можно сохранить информацию с CListCtrl в Вордовский документ, PH>>При этом в ворде нарисовать сетку (Line Separator)? PH>>Выставить параметры страницы и распечатать?
SDB>Подрубить #import'ом соответствующие TLB/OLB и заюзать Word как automation server.
Вариант — импорт ATL "и заюзать Word как automation server".
- Вы знаете — жаль, просто по-человечески жаль Памелу Андерсон, которая никогда не сможет сыграть на баяне...
Здравствуйте, PsiH, Вы писали:
PH>Помогите кто сможет!!!!
PH>Как можно сохранить информацию с CListCtrl в Вордовский документ, PH>При этом в ворде нарисовать сетку (Line Separator)? PH>Выставить параметры страницы и распечатать?
Хочется автоматизацию поюзать?.. Ну, не знаю...
А по-простому так: Берешь rich-edit, засовываешь в него твой текст ( EM_SETSEL, EM_REPLACESEL, EM_SETPARAFORMAT ), сохраняешь в rtf ( EM_STREAMOUT ), распечатываешь на принтер ( EM_FORMATRANGE ).
Здравствуйте, PsiH, Вы писали:
PH>Помогите кто сможет!!!!
PH>Как можно сохранить информацию с CListCtrl в Вордовский документ, PH>При этом в ворде нарисовать сетку (Line Separator)? PH>Выставить параметры страницы и распечатать?
Можно поюзать автоматизацию. По-моему неприятное занятие... без VB... Да и Ворд далеко не везде имеется
А можно так: создаешь rich edit, вставляешь в него какой надо текст ( EM_SETSEL, EM_REPLACESEL, EM_SETPARAFORMAT ), сохраняешь в rtf ( EM_STREAMOUT ) ( какие-то умельцы умудрялись и doc, как — не знаю ), печатаешь ( EM_FORMATRANGE )
Здравствуйте, 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();
}
С Вордом вроде получилось! только вот таблицу нарисавть не получается!!!
Я нашел в 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 datalong 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);