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

Переводы статьи Переводы статьи
Код статьи: 186120 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В данной статье описывается способ автоматизации 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 - Последний отзыв: 4 июня 2011 г. - Revision: 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
Ключевые слова: 
kbautomation kbcode kbhowto kbinterop kbmt KB186120 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:186120

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com