Использование MFC для автоматизации Excel и создания и форматирования новой книги

ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.

Эта статья на английском языке:179706
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Аннотация
В этой статье показано, как автоматизировать с помощью Microsoft Excel библиотеки Microsoft Foundation Class (MFC), версия 4.2 (устанавливается вместе со Microsoft Visual C++ версии 5.0 и 6.0).

В статье описывается методика использования OLE-автоматизации для создания и форматирования книги Microsoft Excel. Он предлагает несколько методов или свойств (от типа Microsoft Excel Библиотека) для добавления данных в лист и форматирование лист.

Заметки по автоматизации Microsoft Excel 2000 и 2002

В примере кода в этой статье используется класс обертки создан из библиотеки объектов Excel 97 (Excel 8.olb). С незначительными изменениями это код может применяться для клиента автоматизации, использующего класс обертки для Excel 2000 (Excel9.olb) или Microsoft Excel 2002 (Excel.olb). Для получения дополнительных сведений о с помощью примеров, описанных в этой статье с Microsoft Excel 2000 или библиотеку типов 2002, щелкните следующий номер статьи для просмотра ее в База знаний корпорации Майкрософт:
224925 ИНФОРМАЦИЯ: Библиотеки типов для Office могут измениться с выпуском
Дополнительная информация
Скопируйте код в этой статье в сообщение функция обработчика событий, определенного в CPP-файле MFC. Однако цель код — проиллюстрировать процесс использования интерфейсов IDispatch и функции элементов, определенных в библиотеке типов Excel8.olb. Основным преимуществом в данной статье, взяты из чтение и понимание кода в пример, чтобы изменить пример или написать собственный код для автоматизации Microsoft Excel 97 с помощью MFC.

Действия по созданию проекта

  1. Выполните шаги 1-12 в следующем Microsoft Чтобы создать пример проекта, который использует интерфейс IDispatch статьи базы знаний интерфейсы и функции элементов, определенных в библиотеке типов Excel8.olb:
    178749Создание проекта автоматизации с использованием MFC и библиотеки типов
  2. В верхней части файла AutoProjectDlg.cpp, добавление Следующая строка:
          #include "excel8.h"					
  3. Добавьте следующий код к CAutoProjectDlg::OnRun() в Файл AutoProjectDLG.cpp:

    Пример кода

          // Commonly used OLE variants.      COleVariant                 covTrue((short)TRUE),                 covFalse((short)FALSE),                 covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);      _Application app;      Workbooks books;      _Workbook book;      Worksheets sheets;      _Worksheet sheet;      Range range;      Font font;      Range cols;      // Start Excel and get Application object.      if(!app.CreateDispatch("Excel.Application"))      {       AfxMessageBox("Couldn't start Excel and get Application object.");       return;      }      //Get a new workbook.      books = app.GetWorkbooks();      book = books.Add (covOptional);      //Get the first sheet.      sheets =book.GetSheets();      sheet = sheets.GetItem(COleVariant((short)1));      //Fill cells A1, B1, C1, and D1 one cell at a time with "headers".      range = sheet.GetRange(COleVariant("A1"),COleVariant("A1"));      range.SetValue(COleVariant("First Name"));      range = sheet.GetRange(COleVariant("B1"),COleVariant("B1"));      range.SetValue(COleVariant("Last Name"));      range = sheet.GetRange(COleVariant("C1"),COleVariant("C1"));      range.SetValue(COleVariant("Full Name"));      range = sheet.GetRange(COleVariant("D1"),COleVariant("D1"));      range.SetValue(COleVariant("Salary"));      //Format A1:D1 as bold, vertical alignment = center.      range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));      font = range.GetFont();      font.SetBold(covTrue);      range.SetVerticalAlignment(               COleVariant((short)-4108));   //xlVAlignCenter = -4108      //Fill A2:B6 with an array of values (First & Last Names).      {         COleSafeArray saRet;         DWORD numElements[]={5,2};   //5x2 element array         saRet.Create(VT_BSTR, 2, numElements);         //Fill the 5x2 SafeArray with the following data:         //   John      Smith         //   Tom       Brown         //   Sue       Thomas         //   Jane      Jones         //   Adam      Johnson         FillSafeArray(L"John", 0, 0, &saRet);         FillSafeArray(L"Smith", 0, 1, &saRet);         FillSafeArray(L"Tom", 1, 0, &saRet);         FillSafeArray(L"Brown", 1, 1, &saRet);         FillSafeArray(L"Sue", 2, 0, &saRet);         FillSafeArray(L"Thomas", 2, 1, &saRet);         FillSafeArray(L"Jane", 3, 0, &saRet);         FillSafeArray(L"Jones", 3, 1, &saRet);         FillSafeArray(L"Adam", 4, 0, &saRet);         FillSafeArray(L"Johnson", 4, 1, &saRet);         range = sheet.GetRange(COleVariant("A2"), COleVariant("B6"));         range.SetValue(COleVariant(saRet));         saRet.Detach();      }      //Fill C2:C6 with a relative formula (=A2 & " " & B2).      range = sheet.GetRange(COleVariant("C2"), COleVariant("C6"));      range.SetFormula(COleVariant("=A2 & \" \" & B2"));      //Fill D2:D6 with a formula(=RAND()*100000) and apply a number      //format.      range = sheet.GetRange(COleVariant("D2"), COleVariant("D6"));      range.SetFormula(COleVariant("=RAND()*100000"));      range.SetNumberFormat(COleVariant("$0.00"));      //AutoFit columns A:D.      range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));      cols = range.GetEntireColumn();      cols.AutoFit();      //Manipulate a variable number of columns for Quarterly Sales Data.      {         short NumQtrs;         CString msg;         Range resizedrange;         Interior interior;         Borders borders;         //Determine how many quarters to display data for.         for(NumQtrs=1;NumQtrs<=3;NumQtrs++)         {            msg.Format("Enter sales data for %d quarter(s)?", NumQtrs);            if(AfxMessageBox(msg,MB_YESNO)==IDYES)            {               break;            }         }         msg.Format("Displaying data for %d quarters.", NumQtrs);         AfxMessageBox(msg);         //Starting at E1, fill headers for the number of columns selected.         range = sheet.GetRange(COleVariant("E1"), COleVariant("E1"));         resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));         resizedrange.SetFormula(                COleVariant("=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\""));         //Change the Orientation and WrapText properties for the headers.         resizedrange.SetOrientation(COleVariant((short)38));         resizedrange.SetWrapText(covTrue);         //Fill the interior color of the headers.         interior = resizedrange.GetInterior();         interior.SetColorIndex(COleVariant((short)36));         //Fill the columns with a formula and apply a number format.         range = sheet.GetRange(COleVariant("E2"), COleVariant("E6"));         resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));         resizedrange.SetFormula(COleVariant("=RAND()*100"));         resizedrange.SetNumberFormat(COleVariant("$0.00"));         //Apply borders to the Sales data and headers.         range = sheet.GetRange(COleVariant("E1"), COleVariant("E6"));         resizedrange= range.GetResize(covOptional, COleVariant(NumQtrs));         borders = resizedrange.GetBorders();         borders.SetWeight(COleVariant((short)2));   //xlThin = 2         //Add a Totals formula for the Quarterly sales data and apply a         //border.         range = sheet.GetRange(COleVariant("E8"), COleVariant("E8"));         resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));         resizedrange.SetFormula(COleVariant("=SUM(E2:E6)"));         borders = resizedrange.GetBorders();         {            Border bottomborder;            bottomborder = borders.GetItem((long)9);            bottomborder.SetLineStyle(                           COleVariant((short)-4119));   //xlDouble = -4119            bottomborder.SetWeight(                           COleVariant((short)4));       //xlThick = 4         }      }      //Make the application visible and give the user control of      //Microsoft Excel.      app.SetVisible(TRUE);      app.SetUserControl(TRUE);					
  4. Добавьте следующую функцию AutoProjectDLG.cpp, поиск он куда-нибудь перед CAutoProjectDlg::OnRun():

    Пример кода

          void FillSafeArray(OLECHAR FAR* sz, int iRow, int iCol,                         COleSafeArray* sa)      {         VARIANT v;         long index[2];         index[0] = iRow;         index[1] = iCol;         VariantInit(&v);         v.vt = VT_BSTR;         v.bstrVal = SysAllocString(sz);         sa->PutElement(index, v.bstrVal);         SysFreeString(v.bstrVal);         VariantClear(&v);      }					
  5. В Developer Studio запускается приложение. Когда диалоговое окно Появится окно (в примере создается на базе диалогового окна приложения), нажмите кнопку Запуск Нажатие кнопки.
Excel 8.0 8 XL97 XL8

Внимание! Эта статья переведена автоматически

Свойства

Номер статьи: 179706 — последний просмотр: 12/05/2015 08:19:06 — редакция: 5.0

Microsoft Excel 2000 Standard Edition, Microsoft Visual C++ 5.0 Enterprise Edition, Microsoft Visual C++ 5.0 Professional Edition, Microsoft Foundation Class Library 4.2, Microsoft Office XP Developer Edition, Microsoft Office 2000 Developer Edition, Microsoft Excel 2002 Standard Edition, Microsoft Excel 97 Standard Edition

  • kbnosurvey kbarchive kbnewfile kbfunctions kbprogramming kbautomation kbhowto kbinterop kbmt KB179706 KbMtru
Отзывы и предложения