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

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

Эта статья на английском языке:186120
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Аннотация
В данной статье описывается способ автоматизации Microsoft Excel и заливкимногоячеечного диапазона с помощью массива значений.
Дополнительная информация
Для заполнения многоячеечного диапазона без заполнения ячеек одну за другой, тонеобходимо создать двухмерный вариант SAFEARRAY, передаваемой в Excelвызов функции SetValue для объекта Range. Следующие шагииллюстрируют этот процесс.

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

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

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

  1. Выполните шаги 1-12 в следующей статье Microsoft Знаний, чтобы создать пример проекта, который использует интерфейс IDispatch интерфейсы и функции элементов, определенных в библиотеке типов Excel8.olb:
    178749 Создание проекта автоматизации с использованием MFC и библиотеки типов
  2. В диалоговом окне созданную 4 и 5 родительской статьи 178749, добавьте следующие элементы управления со свойствами, как указано. Также Добавьте соответствующие переменные-члены:
                                      Member                Member      Control   Name              Variable Type         Variable Name      -----------------------------------------------------------------      Edit      IDC_STARTINGCELL  m_sStartingCell       CString      Edit      IDC_NUMROWS       m_iNumRows            short      Edit      IDC_NUMCOLS       m_iNumCols            short      CheckBox  IDC_STRING        m_bFillWithStrings    BOOL					
  3. В верхней части файла AutoProjectDlg.cpp добавьте следующую строку:
          #include "excel8.h"					
  4. Добавьте следующий код к CAutoProjectDlg::OnRun() в Файл AutoProjectDlg.cpp.

    Пример кода

          // OLE Variant for Optional.      COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);      _Application objApp;      _Workbook objBook;      Workbooks objBooks;      Worksheets objSheets;      _Worksheet objSheet;      Range range;      if(!UpdateData(TRUE))      {         return;      }      // Instantiate Excel and start a new workbook.      objApp.CreateDispatch("Excel.Application");      objBooks = objApp.GetWorkbooks();      objBook = objBooks.Add(VOptional);      objSheets = objBook.GetWorksheets();      objSheet = objSheets.GetItem(COleVariant((short)1));      //Get the range where the starting cell has the address      //m_sStartingCell and it's dimensions are m_iNumRows x m_iNumCols.      range = objSheet.GetRange(COleVariant(m_sStartingCell),                                COleVariant(m_sStartingCell));      range = range.GetResize(COleVariant(m_iNumRows),                              COleVariant(m_iNumCols));      //*** Fill the range with an array of values.      //Create the SAFEARRAY.      COleSafeArray saRet;      DWORD numElements[2];      numElements[0]= m_iNumRows;   //Number of rows in the range.      numElements[1]= m_iNumCols;   //Number of columns in the range.      if(m_bFillWithStrings)      {         saRet.Create(VT_BSTR, 2, numElements);      }      else      {         saRet.Create(VT_R8, 2, numElements);      }      //Fill the SAFEARRAY.      long index[2];      long iRow;      long iCol;      for(iRow=0;iRow<=m_iNumRows-1;iRow++)      {         for(iCol=0;iCol<=m_iNumCols-1;iCol++)         {            index[0] = iRow;            index[1] = iCol;            if(m_bFillWithStrings)      //Fill with Strings.            {               VARIANT v;               CString s;               VariantInit(&v);               v.vt = VT_BSTR;               s.Format("r%dc%d", iRow, iCol);               v.bstrVal = s.AllocSysString();               saRet.PutElement(index, v.bstrVal);               SysFreeString(v.bstrVal);               VariantClear(&v);            }            else                     //Fill with Numbers.            {               double d;               d = (iRow*1000) + iCol;               saRet.PutElement(index, &d);            }         }      }      //Set the range value to the SAFEARRAY.      range.SetValue(COleVariant(saRet));      saRet.Detach();      //Return control of Excel to the user.      objApp.SetVisible(TRUE);      objApp.SetUserControl(TRUE);					
  5. Скомпилируйте и запустите проект.
  6. Укажите следующие значения для элементов управления в диалоговом окне:
          Control               Contents      ------------------------------      IDC_STARTINGCELL      A1      IDC_NUMROWS           10      IDC_NUMCOLS           5      IDC_STRING            True						
    Нажмите кнопку ОК.

    Результаты: Новая книга создается и ячейкам A1:E10 первый лист, заполняются строковых значений.
  7. Укажите следующие значения для элементов управления в диалоговом окне:
          Control               Contents      ------------------------------      IDC_STARTINGCELL      C3      IDC_NUMROWS           2      IDC_NUMCOLS           9      IDC_STRING            False						
    Нажмите кнопку ОК.

    Результаты: Новая книга создается и ячейкам C3:K4 первый лист, заполняются числовых значений.
Ссылки
Для получения дополнительных сведений об автоматизации Microsoft Excel с помощью MFC смследующие статьи базы знаний Майкрософт:
186122 Использование MFC для автоматизации Excel и извлечение данных из диапазона

184663 Как внедрить и автоматизировать лист Microsoft Excel с MFC

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

178781 Автоматизация Excel с помощью MFC и функции

178783 Использование MFC для создания диаграммы Microsoft Excel

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

Свойства

Номер статьи: 186120 — последний просмотр: 12/05/2015 08:42:03 — редакция: 4.0

Microsoft Excel 2000 Standard Edition, Microsoft Visual C++ 5.0 Enterprise Edition, Microsoft Visual C++ 5.0 Professional Edition, Microsoft Excel 2002 Standard Edition, Microsoft Excel 97 Standard Edition

  • kbnosurvey kbarchive kbautomation kbcode kbhowto kbinterop kbmt KB186120 KbMtru
Отзывы и предложения