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

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

В этой статье

Аннотация

В данной статье описывается способ автоматизации Microsoft Excel и возвращения значений из многоячеечного диапазона в массив.

Дополнительная информация

Для возвращения значения из многоячеечного диапазона без запросы по одной ячейки, следует использовать функцию-член GetValue Объект Range для возвращения значений типа VARIANT. Затем постройте SAFEARRAY в зависимости от типа VARIANT, возвращенного GetValue. После получения SAFEARRAY, можно использовать элементы с помощью GetElement. Следующие шаги демонстрируют Этот процесс и продемонстрировать, каким образом можно получить доступ строковые и числовые элементы.

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

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

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

  1. В Microsoft Excel создайте новую книгу. Заполнение ячеек A1:C8 с сочетанием строковые и числовые данные. Сохранить книгу как «c:\test.xls» и выход из Microsoft Excel.
  2. Выполните шаги 1-12 в следующей статье в Чтобы создать пример проекта, который использует интерфейс IDispatch знаний интерфейсы и функции элементов, определенных в библиотеке типов Excel8.olb:
    178749Создание проекта автоматизации с использованием MFC и библиотеки типов
  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 objRange;
          VARIANT ret;
    
          // Instantiate Excel and open an existing workbook.
          objApp.CreateDispatch("Excel.Application");
          objBooks = objApp.GetWorkbooks();
          objBook = objBooks.Open("C:\\Test.xls",
                    VOptional, VOptional, VOptional, VOptional,
                    VOptional, VOptional, VOptional, VOptional,
                    VOptional, VOptional, VOptional, VOptional);
          objSheets = objBook.GetWorksheets();
          objSheet = objSheets.GetItem(COleVariant((short)1));
    
          //Get the range object for which you wish to retrieve the
          //data and then retrieve the data (as a variant array, ret).
          objRange = objSheet.GetRange(COleVariant("A1"), COleVariant("C8"));
          ret = objRange.GetValue();
    
          //Create the SAFEARRAY from the VARIANT ret.
          COleSafeArray sa(ret);
    
          //Determine the array's dimensions.
          long lNumRows;
          long lNumCols;
          sa.GetUBound(1, &lNumRows);
          sa.GetUBound(2, &lNumCols);
    
          //Display the elements in the SAFEARRAY.
          long index[2];
          VARIANT val;
          int r, c;
          TRACE("Contents of SafeArray\n");
          TRACE("=====================\n\t");
          for(c=1;c<=lNumCols;c++)
          {
             TRACE("\t\tCol %d", c);
          }
          TRACE("\n");
          for(r=1;r<=lNumRows;r++)
          {
             TRACE("Row %d", r);
             for(c=1;c<=lNumCols;c++)
             {
                index[0]=r;
                index[1]=c;
                sa.GetElement(index, &val);
                switch(val.vt)
                {
                case VT_R8:
                   {
                      TRACE("\t\t%1.2f", val.dblVal);
                      break;
                   }
                case VT_BSTR:
                   {
                      TRACE("\t\t%s",(CString)val.bstrVal);
                      break;
                   }
    
                case VT_EMPTY:
                   {
                      TRACE("\t\t<empty>");
                      break;
                   }
                }
             }
             TRACE("\n");
          }
    
          //Close the workbook without saving changes
          //and quit Microsoft Excel.
          objBook.Close(COleVariant((short)FALSE), VOptional, VOptional);
          objApp.Quit();
    					
  5. Скомпилируйте проект и запустите его.
  6. Нажмите кнопку выполнить. Значения в ячейках A1:C8, отображаются в Окно вывода.

Ссылки

Для получения дополнительных сведений об автоматизации Microsoft Excel Использование MFC, щелкните следующий номер статьи для просмотра статьи в База знаний корпорации Майкрософт:
186120 Использование MFC для автоматизации Excel и заполнение диапазона ячеек с массивом
184663 Как внедрить и автоматизировать лист Microsoft Excel с MFC
179706 Использование MFC для автоматизации Excel и создания и форматирования новой книги
178781Методические УКАЗАНИЯ: Автоматизация Excel с помощью MFC и функции
178783Использование MFC для создания диаграммы Microsoft Excel
167668Способ передачи SafeArray строки в тип VARIANT *

Свойства

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

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

 

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