كيفية استخدام MFC أتمتة Excel ثم تعبئة نطاق مع صفيف

ترجمات الموضوعات ترجمات الموضوعات
معرف المقالة: 186120 - عرض المنتجات التي تنطبق عليها هذه المقالة.
توسيع الكل | طي الكل

في هذه الصفحة

الموجز

توضح هذه المقالة كيفية أتمتة Microsoft Excel تعبئة نطاق multi-cell صفيف من القيم.

معلومات أخرى

تعبئة نطاق multi-cell دون ملء الخلايا واحداً تلو الآخر, يجب عليك إنشاء متغير ثنائي الأبعاد SAFEARRAY الذي تمرير إلى Excel بواسطة استدعاء دالة SetValue لكائن نطاق. توضح الخطوات التالية هذه العملية.

ملاحظات أتمتة Microsoft Excel 2000 و 2002

يستخدم نموذج التعليمة البرمجية في هذه المقالة wrappers الفئة التي تم إنشاؤها من مكتبة كائنات Excel 97 (8.olb Excel). مع تعديل بسيط يمكن تطبيق هذه التعليمة البرمجية إلى عميل التنفيذ يستخدم wrappers فئة Excel 2000 (Excel9.olb) أو Excel 2002 (Excel.olb). للحصول على معلومات إضافية حول استخدام نموذج التعليمة البرمجية الموضحة في هذه المقالة مع Microsoft Excel 2000 أو مكتبة أنواع 2002 انقر فوق رقم المقالة أدناه لعرضها في "قاعدة المعارف لـ Microsoft:
224925INFO: يجوز تغيير نوع مكتبات لـ Office باستخدام إصدار جديد

الخطوات التالية لإنشاء المشروع

  1. اتبع الخطوات من 1 إلى 12 في المقالة التالية في Microsoft Knowledge Base إلى إنشاء مشروع نموذج واجهات 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 الرجاء مراجعة المقالات التالية في "قاعدة معارف Microsoft:
186122كيفية استخدام MFC أتمتة Excel ثم الحصول على صفيف من نطاق

184663كيفية تضمين أتمتة ورقة عمل Microsoft Excel مع MFC

179706استخدام MFC أتمتة Excel "و" إنشاء/تنسيق مصنف جديد

178781كيف لأتمتة استخدام MFC و دالات ورقة عمل Excel

178783كيفية استخدام MFC لإنشاء تخطيط Microsoft Excel

الخصائص

معرف المقالة: 186120 - تاريخ آخر مراجعة: 04/محرم/1428 - مراجعة: 4.2
تنطبق على
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 97 Standard Edition
كلمات أساسية: 
kbmt kbautomation kbcode kbhowto kbinterop KB186120 KbMtar
ترجمة آلية
هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية
اضغط هنا لرابط المقالة باللغة الانجليزية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