أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية نقل البيانات من مجموعة سجلات ADO إلى برنامج Excel باستخدام التنفيذ التلقائي

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

اضغط هنا لرابط المقالة باللغة الانجليزية246335
الموجز
يمكنك نقل محتويات مجموعة سجلات ADO إلى ورقة عمل Microsoft Excel عن طريق أتمتة Excel. تعتمد الطريقة التي يمكن استخدامها على إصدار Excel يتم أتمتة. Excel 2002 و Excel 2000 أو Excel 97 يتوفر أسلوب CopyFromRecordset التي يمكنك استخدامها لنقل مجموعة سجلات إلى نطاق. يمكن استخدام CopyFromRecordset في Excel 2000 و 2002 لنسخ DAO أو مجموعة سجلات ADO. على الرغم من ذلك، يدعم CopyFromRecordset في Excel 97 مجموعات سجلات DAO فقط. لنقل مجموعة سجلات ADO إلى Excel 97 يمكن إنشاء صفيف من مجموعة السجلات ومن ثم نشر أي نطاق محتويات هذا الصفيف.

تتناول هذه المقالة الطرق كلا. يوضح نموذج التعليمة البرمجية تقديم كيف يمكنك نقل مجموعة سجلات ADO إلى Excel 97 أو Excel 2000 وExcel 2002 Excel 2003 أو Excel 2007.
معلومات أخرى
يبين نموذج التعليمات البرمجية المتوفرة أدناه كيفية نسخ ADO مجموعة السجلات إلى ورقة عمل Microsoft Excel باستخدام التنفيذ التلقائي من Microsoft Visual Basic. التعليمات البرمجية أولاً بفحص الإصدار من Excel. إذا تم الكشف عن Excel 2000 أو 2002 يتم استخدام الأسلوب CopyFromRecordset لأنه فعالية وتم يتطلب تعليمة برمجية أقل. ومع ذلك، إذا تم الكشف عن Excel 97 أو أقل أولاً يتم نسخ مجموعة السجلات إلى صفيف باستخدام أسلوب GetRows كائن مجموعة السجلات ADO. يتم تحويل الصفيف ثم بحيث تكون السجلات في البعد الأول (في صفوف) وتكون الحقول في البعد الثاني (في الأعمدة). ثم يتم نسخ الصفيف إلى ورقة عمل Excel من خلال تعيين الصفيف إلى نطاق من الخلايا. (الصفيف المنسوخة في خطوة واحدة بدلاً من looping خلال كل خلية في ورقة العمل.)

نموذج التعليمات البرمجية يستخدم قاعدة بيانات نموذج Northwind مضمّن مع Microsoft Office. إذا قمت بتحديد المجلد الافتراضي عند تثبيت Microsoft Office ، يوجد قاعدة البيانات في:

\Program Files\Microsoft Office\Office\Samples\Northwind.mdb

إذا كان Northwind قاعدة البيانات الموجود في مجلد آخر على الكمبيوتر, تحتاج إلى تحرير مسار قاعدة البيانات في التعليمات البرمجية المتوفرة أدناه.

إذا لم يكن لديك قاعدة بيانات Northwind تثبيتها على النظام، يمكنك استخدام خيار "إضافة/إزالة" برنامج إعداد Microsoft Office لتثبيت نماذج قواعد البيانات.

ملاحظة لم يتم تثبيت قاعدة البيانات Northwind عند تثبيت 2007 Microsoft Office. للحصول على 2007 Northwind قم بزيارة موقع Microsoft التالي على الويب:

الخطوات التالية لإنشاء نموذج

  1. قم بتشغيل Visual Basic ثم إنشاء مشروع EXE قياسي جديد. يتم إنشاء Form1 بشكل افتراضي.
  2. إضافة CommandButton Form1.
  3. انقر "مراجع" من القائمة المشروع. إضافة مرجع إلى مكتبة 2.1 كائنات بيانات ActiveX Microsoft.
  4. لصق التعليمات البرمجية التالية إلى المقطع في التعليمات البرمجية "Form1:
    Private Sub Command1_Click()    Dim cnt As New ADODB.Connection    Dim rst As New ADODB.Recordset        Dim xlApp As Object    Dim xlWb As Object    Dim xlWs As Object        Dim recArray As Variant        Dim strDB As String    Dim fldCount As Integer    Dim recCount As Long    Dim iCol As Integer    Dim iRow As Integer        ' Set the string to the path of your Northwind database    strDB ="c:\program files\Microsoft office\office11\samples\Northwind.mdb"      ' Open connection to the database    cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _        "Data Source=" & strDB & ";"        ''When using the Access 2007 Northwind database    ''comment the previous code and uncomment the following code.    'cnt.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _    '    "Data Source=" & strDB & ";"            ' Open recordset based on Orders table    rst.Open "Select * From Orders", cnt        ' Create an instance of Excel and add a workbook    Set xlApp = CreateObject("Excel.Application")    Set xlWb = xlApp.Workbooks.Add    Set xlWs = xlWb.Worksheets("Sheet1")      ' Display Excel and give user control of Excel's lifetime    xlApp.Visible = True    xlApp.UserControl = True        ' Copy field names to the first row of the worksheet    fldCount = rst.Fields.Count    For iCol = 1 To fldCount        xlWs.Cells(1, iCol).Value = rst.Fields(iCol - 1).Name    Next            ' Check version of Excel    If Val(Mid(xlApp.Version, 1, InStr(1, xlApp.Version, ".") - 1)) > 8 Then        'EXCEL 2000,2002,2003, or 2007: Use CopyFromRecordset                 ' Copy the recordset to the worksheet, starting in cell A2        xlWs.Cells(2, 1).CopyFromRecordset rst        'Note: CopyFromRecordset will fail if the recordset        'contains an OLE object field or array data such        'as hierarchical recordsets            Else        'EXCEL 97 or earlier: Use GetRows then copy array to Excel            ' Copy recordset to an array        recArray = rst.GetRows        'Note: GetRows returns a 0-based array where the first        'dimension contains fields and the second dimension        'contains records. We will transpose this array so that        'the first dimension contains records, allowing the        'data to appears properly when copied to Excel                ' Determine number of records        recCount = UBound(recArray, 2) + 1 '+ 1 since 0-based array                ' Check the array for contents that are not valid when        ' copying the array to an Excel worksheet        For iCol = 0 To fldCount - 1            For iRow = 0 To recCount - 1                ' Take care of Date fields                If IsDate(recArray(iCol, iRow)) Then                    recArray(iCol, iRow) = Format(recArray(iCol, iRow))                ' Take care of OLE object fields or array fields                ElseIf IsArray(recArray(iCol, iRow)) Then                    recArray(iCol, iRow) = "Array Field"                End If            Next iRow 'next record        Next iCol 'next field                    ' Transpose and Copy the array to the worksheet,        ' starting in cell A2        xlWs.Cells(2, 1).Resize(recCount, fldCount).Value = _            TransposeDim(recArray)    End If    ' Auto-fit the column widths and row heights    xlApp.Selection.CurrentRegion.Columns.AutoFit    xlApp.Selection.CurrentRegion.Rows.AutoFit    ' Close ADO objects    rst.Close    cnt.Close    Set rst = Nothing    Set cnt = Nothing        ' Release Excel references    Set xlWs = Nothing    Set xlWb = Nothing    Set xlApp = NothingEnd SubFunction TransposeDim(v As Variant) As Variant' Custom Function to Transpose a 0-based array (v)        Dim X As Long, Y As Long, Xupper As Long, Yupper As Long    Dim tempArray As Variant        Xupper = UBound(v, 2)    Yupper = UBound(v, 1)        ReDim tempArray(Xupper, Yupper)    For X = 0 To Xupper        For Y = 0 To Yupper            tempArray(X, Y) = v(Y, X)        Next Y    Next X        TransposeDim = tempArrayEnd Function
  5. اضغط المفتاح F5 لتشغيل المشروع. يظهر "Form1".
  6. انقر فوق CommandButton على Form1 ولاحظ عرض محتويات الجدول Orders (الطلبيات) في مصنف جديد في Excel.
باستخدام CopyFromRecordset

للحصول على كفاءة وأداء CopyFromRecordset هي الطريقة المفضلة. لأن Excel 97 تعتمد مجموعات فقط DAO السجلات مع CopyFromRecordset, إذا كنت تحاول تمرير مجموعة سجلات ADO إلى CopyFromRecordset مع Excel 97, تظهر رسالة الخطأ التالية:
خطأ وقت التشغيل 430:
الفئة لا تعتمد الأتمتة أو لا تعتمد الواجهة المتوقعة.
في نموذج التعليمات البرمجية يمكنك تجنب هذا الخطأ عن طريق التحقق في Excel الإصدار بحيث لا تستخدم CopyFromRecordset لإصدار 97.

ملاحظة عند استخدام CopyFromRecordset ، يجب عليك أن تدرك أن لا تتضمن مجموعة سجلات ADO أو DAO استخدام حقول كائن OLE أو بيانات صفيف مثل مجموعات السجلات ذات تسلسل هرمي. في حالة تضمين حقول من النوع إما في مجموعة سجلات يفشل الأسلوب CopyFromRecordset بسبب الخطأ التالي:
خطأ وقت التشغيل-2147467259:
أسلوب فشل CopyFromRecordset نطاق الكائن.
باستخدام GetRows

إذا تم الكشف عن Excel 97 استخدام أسلوب GetRows سجلات ADO لنسخ مجموعة السجلات في صفيف. إذا قمت بتعيين صفيف تم إرجاعها بواسطة GetRows إلى نطاق من الخلايا في ورقة العمل ينتقل البيانات عبر الأعمدة بدلاً من أسفل الصفوف. على سبيل المثال، إذا كانت مجموعة السجلات حقلين والصفوف 10 ، الصفيف يظهر صفين والأعمدة 10. لذلك، يجب تبديل موضع الصفيف باستخدام الدالة TransposeDim() قبل تعيين الصفيف إلى النطاق من الخلايا. عند تعيين صفيف إلى نطاق من الخلايا ، توجد بعض القيود أن تكون على علم:

تنطبق القيود التالية عند تعيين صفيف كائن نطاق Excel:
  • لا يمكن أن يحتوي الصفيف على حقول كائن OLE أو صفيف بيانات، مثل مجموعات السجلات ذات تسلسل هرمي. لاحظ أنه نموذج التعليمات البرمجية يتحقق هذا الشرط يعرض "صفيف حقل" بحيث يتم إجراء المستخدم علم لا يمكن عرض الحقل في Excel.

  • لا يمكن أن يحتوي الصفيف على حقول "التاريخ" التي لها تاريخ قبل إلى سنة 1900. (راجع قسم "المراجع" للحصول على ارتباط مقالة أساسي قاعدة Microsoft.) لاحظ نموذج التعليمات البرمجية بتنسيق حقول التاريخ كسلاسل متغير لتجنب هذه المشكلة المحتملة.
ملاحظة يتم استخدام الدالة TransposeDim() تبديل موضع الصفيف قبل الصفيف نسخ إلى ورقة عمل Excel. يمكنك استخدام Excel بدلاً من الدالة الخاصة بك تبديل موضع الصفيف تبديل الدالة بواسطة تعديل نموذج التعليمة البرمجية لتعيين الصفيف إلى الخلايا كما هو موضح أدناه:
   xlWs.Cells(2, 1).Resize(recCount, fldCount).Value = _      xlApp.WorksheetFunction.Transpose(recArray)				
إذا قررت استخدام الأسلوب تبديل في Excel بدلاً من الدالة TransposeDim() تبديل موضع الصفيف الذي يجب أن يكونوا على علم القيود التالية مع أسلوب تبديل:
  • لا يمكن أن يحتوي الصفيف على عنصر أكبر من 255 حرفاً.
  • لا يمكن أن يحتوي الصفيف على القيم الخالية.
  • لا يمكن أن يتجاوز عدد العناصر في الصفيف 5461.
إذا لم يتم أخذ قيود أعلاه بعين الاعتبار عند نسخ أحد الصفائف إلى ورقة عمل Excel ، قد يحدث أحد أخطاء وقت التشغيل التالية:
خطأ وقت التشغيل 13: عدم تطابق نوع
5 خطأ وقت التشغيل: استدعاء إجراء غير صالح أو وسيطة
تعريف التطبيق 1004 خطأ وقت التشغيل: أو تعريف الكائن خطأ
مراجع
للحصول على معلومات إضافية حول قيود على صفائف التمرير إلى الإصدارات المختلفة من Excel، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
177991XL: القيود تنطبق من تمرير الصفيف إلى Excel باستخدام التنفيذ
للحصول على معلومات إضافية، انقر فوق رقمي المقالتين التاليتين لعرضهما في "قاعدة المعارف لـ Microsoft:
146406XL: كيفية استرداد جدول من Access إلى Excel باستخدام DAO
215965XL2000: 12: 00: 00 ص المعروضة على تواريخ سابقة 1900
243394كيفية استخدام MFC نسخ مجموعة سجلات DAO إلى Excel باستخدام التنفيذ
247412INFO: طرق نقل البيانات إلى Excel من Visual Basic
تبديل موضع XL2007 عدم تطابق

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 246335 - آخر مراجعة: 03/28/2007 23:17:43 - المراجعة: 5.1

Microsoft Office Excel 2007, Microsoft Office Excel 2003, Microsoft Excel 2002 Standard Edition, Microsoft Excel 2000 Standard Edition, Microsoft Excel 97 Standard Edition, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0, Microsoft ActiveX Data Objects 2.0, Microsoft ActiveX Data Objects 2.1, Microsoft ActiveX Data Objects 2.5

  • kbmt kbexpertiseinter kbautomation kbhowto KB246335 KbMtar
تعليقات
e="text/javascript"> Asimov.clickstreamTracker.init(); l>