كيفية نقل البيانات إلى مصنف Excel باستخدام Visual Basic .NET

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

اضغط هنا لرابط المقالة باللغة الانجليزية306022
تمت أرشفة هذه المقالة. وتظهر "كما هي" ولن يتم تحديثها بعد الآن.
للحصول على إصدار Microsoft Visual C# .NET من هذه المقالة، راجع 306023.
الموجز
توضح هذه المقالة خطوة بخطوة العديد من الطرق لنقل البيانات إلى Excel 2002 من برنامج Visual Basic .NET. تقدم هذه المقالة أيضًا مزايا وعيوب كل أسلوب بحيث يمكنك تحديد الحل التي تتناسب بشكل أفضل مع الموقف لديك.

نظرة عامة حول

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

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

قد يتم استخدام الطرق التالية في نقل البيانات الخاصة بك بدون التنفيذ:
  • نقل البيانات الخاصة بك إلى ملف نصي التبويب أو بفواصل التي يمكن تحليل Excel لاحقًا إلى خلايا في ورقة عمل.
  • نقل البيانات الخاصة بك إلى ورقة عمل باستخدام ADO.NET.
  • نقل بيانات XML إلى (إصدار Excel 2002 فقط) لتوفير البيانات التي يتم تنسيقها ترتيب الصفوف والأعمدة.

التقنيات

استخدام "التنفيذ" نقل البيانات خلية بعد خلية

مع التنفيذ التلقائي، يمكنك نقل البيانات إلى خلية ورقة عمل واحدة في كل مرة، كما يلي.
        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        'Start a new workbook in Excel.        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        'Add data to cells of the first worksheet in the new workbook.        oSheet = oBook.Worksheets(1)        oSheet.Range("A1").Value = "Last Name"        oSheet.Range("B1").Value = "First Name"        oSheet.Range("A1:B1").Font.Bold = True        oSheet.Range("A2").Value = "Doe"        oSheet.Range("B2").Value = "John"        'Save the Workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book1.xls")        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()				
نقل البيانات خلية بعد خلية يمكن أن يكون هذا أسلوب مقبول إذا لم يكن هناك مقدار البيانات المراد نقلها. وجود المرونة في وضع بيانات في أي مكان في المصنف ثم يمكنك تنسيق الخلايا مشروط في وقت التشغيل. ومع ذلك، يعتبر هذا الأسلوب غير مستحسن إذا كان لديك كثير من البيانات لنقل إلى Excel المصنف. ينتج عن كل كائن نطاق الحصول على وقت التشغيل طلب واجهة. لذلك، نقل البيانات بهذه الطريقة يمكن أن تكون بطيئة.
بالإضافة إلى ذلك، Microsoft Windows Millennium Edition (Me) و Microsoft Windows 98 أو نظام التشغيل Microsoft Windows 95 يكون وجود قيود على 64 كيلوبايت على طلبات الواجهة. إذا كان لديك 64 كيلو بايت أو أكثر من طلبات واجهة ملقم الأتمتة (Excel) قد يتوقف عن الاستجابة أو قد تتلقى رسائل خطأ تشير إلى انخفاض الذاكرة. لمزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
216400يمكن أتمتة COM عبر عملية إنهاء تطبيق العميل على Win95/98
مرة أخرى، نقل البيانات خلية بعد خلية مقبولاً فقط من أجل مقدار صغير من البيانات. إذا كان يجب نقل مجموعات بيانات كبيرة إلى Excel "، يمكنك استخدام إحدى من الطرق الأخرى التي تمت مناقشتها في هذه المقالة نقل البيانات في كبيرة الحجم.

للحصول على مزيد من المعلومات وللحصول على مثال حول لأتمتة Excel مع Visual Basic .NET انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
301982كيفية أتمتة Microsoft Excel من Visual Basic .NET

استخدام أتمتة لنقل صفيف بيانات إلى نطاق في ورقة عمل

صفيف بيانات يمكن نقلها إلى نطاق خلايا متعددة في نفس الوقت كالتالي.
        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        'Start a new workbook in Excel.        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        'Create an array with 3 columns and 100 rows.        Dim DataArray(99, 2) As Object        Dim r As Integer        For r = 0 To 99            DataArray(r, 0) = "ORD" & Format(r + 1, "0000")            DataArray(r, 1) = Rnd() * 1000            DataArray(r, 2) = DataArray(r, 1) * 0.07        Next        'Add headers to the worksheet on row 1.        oSheet = oBook.Worksheets(1)        oSheet.Range("A1").Value = "Order ID"        oSheet.Range("B1").Value = "Amount"        oSheet.Range("C1").Value = "Tax"        'Transfer the array to the worksheet starting at cell A2.        oSheet.Range("A2").Resize(100, 3).Value = DataArray        'Save the Workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book2.xls")        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()				
يمكن تحقيق الربح أداء هائل مع كثير من البيانات عند نقل البيانات باستخدام صفيف بدلاً من خلية بخلية. خذ بعين الاعتبار هذا السطر من التعليمات البرمجية السابقة التي تنقل البيانات إلى 300 الخلايا في ورقة العمل.
        oSheet.Range("A2").Resize(100, 3).Value = DataArray				
يمثل هذا السطر طلبي واجهة: أحد الكائن نطاق إرجاع الأسلوب نطاق و آخر لكائن نطاق إرجاع الأسلوب تغيير الحجم. وعلى العكس، في نقل البيانات خلية بعد خلية يتطلب طلبات الواجهات 300 إلى كائنات نطاق. كلما أمكن ذلك يمكن أن تستفيد من نقل البيانات الخاصة بك في كبيرة وتقليل عدد طلبات واجهة إجراء.

استخدام أتمتة لنقل مجموعة سجلات ADO إلى نطاق ورقة العمل

يوفر طراز الكائن لـ Excel 2000 وExcel 2002 أسلوباً CopyFromRecordset لنقل مجموعة سجلات ADO إلى نطاق ورقة العمل. يوضح التعليمة البرمجية التالية كيفية أتمتة Excel نقل محتويات جدول "الطلبات" في نموذج قاعدة بيانات Northwind بواسطة استخدام الأسلوب CopyFromRecordset.
        'Create a Recordset from all the records in the Orders table.        Dim sNWind As String        Dim conn As New ADODB.Connection()        Dim rs As ADODB.Recordset        conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _            sNorthwind & ";")        conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient        rs = conn.Execute("Orders", , ADODB.CommandTypeEnum.adCmdTable)        'Create a new workbook in Excel.        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        oSheet = oBook.Worksheets(1)        'Transfer the field names to Row 1 of the worksheet:        'Note: CopyFromRecordset copies only the data and not the field        '      names, so you can transfer the fieldnames by traversing the        '      fields collection.        Dim n As Int32        For n = 1 To rs.Fields.Count            oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name        Next        'Transfer the data to Excel.        oSheet.Range("A2").CopyFromRecordset(rs)        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book3.xls")        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()        'Close the connection        rs.Close()        conn.Close()				
ملاحظةCopyFromRecordset يعمل فقط مع كائنات مجموعة سجلات ADO. لا يمكن استخدام DataSet التي تقوم بإنشائها باستخدام ADO.NET مع أسلوب CopyFromRecordset. شرح العديد من الأمثلة في المقاطع التالية كيفية نقل البيانات إلى Excel باستخدام ADO.NET.

استخدام أتمتة لإنشاء كائن جدول استعلام في ورقة عمل

يمثل كائن جدول الاستعلام جدول الذي تم إنشاؤه من البيانات التي يتم إرجاعها من مصدر بيانات خارجي. أثناء التنفيذ التلقائي "Excel" ، يمكنك إنشاء جدول الاستعلام عن طريق توفير سلسلة اتصال OLEDB "أو" مصدر بيانات ODBC "و" سلسلة SQL. Excel بإنشاء مجموعة السجلات و إدراج مجموعة السجلات في ورقة العمل في الموقع الذي تحدده. استخدام كائنات جدول الاستعلام يوفر الميزات التالية عبر أسلوب CopyFromRecordset:
  • Excel بمعالجة إنشاء مجموعة السجلات وموضع الخاص به إلى ورقة العمل.
  • يمكن أن يتم حفظ الاستعلام مع كائن جدول الاستعلام بحيث أنه يمكن تحديثه فيما بعد للحصول على مجموعة سجلات محدثة.
  • عندما تتم إضافة جديد جدول الاستعلام إلى ورقة العمل, يمكنك تحديد نقل البيانات الموجودة مسبقاً في الخلايا في ورقة العمل لملاءمة البيانات الجديدة (راجع الخاصية RefreshStyle للحصول على التفاصيل).
يوضح التعليمة البرمجية التالية كيفية أتمتة Excel 2000 أو 2002 لإنشاء جديد جدول الاستعلام في ورقة عمل Excel باستخدام بيانات من قاعدة بيانات نموذج Northwind.
        'Create a new workbook in Excel.        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        oSheet = oBook.Worksheets(1)        'Create the QueryTable object.        Dim oQryTable As Object        oQryTable = oSheet.QueryTables.Add( _        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _            sNorthwind & ";", oSheet.Range("A1"), _            "Select * from Orders")        oQryTable.RefreshStyle = 2 ' xlInsertEntireRows = 2        oQryTable.Refresh(False)        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book4.xls")        oQryTable = Nothing        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing				

استخدام "الحافظة"

يمكنك استخدام الحافظة لنقل البيانات إلى ورقة عمل. للصق البيانات في عدة خلايا في ورقة عمل، يمكنك نسخ سلسلة الذي يتم محددة الأعمدة بواسطة أحرف الجدولة فيه يتم محدد الصفوف بواسطة الإرجاع. توضح التعليمة البرمجية التالي كيفية استخدام Visual Basic .NET الحافظة لنقل البيانات إلى Excel.
        'Copy a string to the Clipboard.        Dim sData As String        sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _            & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _            & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"        System.Windows.Forms.Clipboard.SetDataObject(sData)        'Create a workbook in Excel.        Dim oExcel As Object        Dim oBook As Object        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        'Paste the data.        oBook.Worksheets(1).Range("A1").Select()        oBook.Worksheets(1).Paste()        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book5.xls")        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()				

إنشاء ملف نصي محدد يمكن تحليل Excel في صفوف وأعمدة

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

يوضح التعليمة البرمجية التالي كيفية إنشاء ملف نصي محدد بعلامات جدولة من البيانات للقراءة باستخدام ADO.NET.
        'Connect to the data source.        Dim objConn As New System.Data.OleDb.OleDbConnection( _            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";")        objConn.Open()        'Execute a command to retrieve all records from the Employees table.        Dim objCmd As New System.Data.OleDb.OleDbCommand( _            "Select * From Employees", objConn)        Dim objReader As System.Data.OleDb.OleDbDataReader        objReader = objCmd.ExecuteReader()        'Read the records in the dataset and write select fields to the         'output file.        FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output)        Dim i As Integer, s As String        While objReader.Read()            'Loop through first 6 fields and concatenate            'each field, separated by a tab, into s variable.            s = ""            For i = 0 To 5                If Not objReader.IsDBNull(i) Then                    If i = 0 Then 'field 1 is EmployeeId                        s = s & objReader.GetInt32(i).ToString                    ElseIf i = 5 Then 'field 6 is BirthDate                        s = s & objReader.GetDateTime(i)                    Else 'field is a text field                        s = s & objReader.GetString(i)                    End If                End If                s = s & Microsoft.VisualBasic.ControlChars.Tab            Next            PrintLine(1, s)        End While        FileClose(1)        'Close the reader and the connection.        objReader.Close()        objConn.Close()				
تم استخدام "عدم التنفيذ" في التعليمات البرمجية السابقة. ومع ذلك، يمكنك استخدام أتمتة الأدنى لفتح الملف النصي ثم حفظ الملف في Excel تنسيق المصنف كما يلي.
        'Create a new instance of Excel.        Dim oExcel As Object        oExcel = CreateObject("Excel.Application")        'Open the text file and save it in the Excel workbook format.        oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _            , , , -4142, , True) 'xlTextQualifierNone=-4142        oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _            -4143) 'xlWorkbookNormal = -4143        'Quit Excel.        oExcel.Quit()        oExcel = Nothing        GC.Collect()				

نقل البيانات إلى ورقة عمل باستخدام ADO.NET

يمكنك استخدام موفر Microsoft Jet OLE DB لإضافة سجلات إلى جدول في مصنف Excel موجود. "جدول" في Excel مجرد نطاق من الخلايا; النطاق قد يكون اسم معرف. عادةً ما يحتوي الصف الأول من النطاق على الرؤوس (أو أسماء الحقول) وتحتوي على كافة الصفوف اللاحقة في النطاق السجلات.

إضافة التعليمات البرمجية التالية اثنين من السجلات الجديدة إلى جدول في Book7.xls. في هذه الحالة هو الجدول الورقة1.
       'Establish a connection to the data source.        Dim sConnectionString As String        sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _            "Data Source=" & sSampleFolder & _            "Book7.xls;Extended Properties=Excel 8.0;"        Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)        objConn.Open()        'Add two records to the table.        Dim objCmd As New System.Data.OleDb.OleDbCommand()        objCmd.Connection = objConn        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _            " values ('Bill', 'Brown')"        objCmd.ExecuteNonQuery()        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _            " values ('Joe', 'Thomas')"        objCmd.ExecuteNonQuery()        'Close the connection.        objConn.Close()				
عند إضافة سجلات باستخدام ADO.NET كما هو موضح يتم الاحتفاظ التنسيق في المصنف. يستعير كل سجل تتم إضافته إلى صف التنسيق من الصف قبل. على سبيل المثال، يتم تنسيق الحقول الجديدة التي تمت إضافتها إلى العمود B مع محاذاة اليمين لأن الخلية B1 محاذاة إلى اليمين.

لاحظ إضافة سجل إلى خلية أو خلايا في ورقة العمل عليه فوق أية بيانات تلك الخلايا الموجودة مسبقاً. بمعنى آخر، الصفوف في ورقة العمل غير "دفع إلى الأسفل" عند إضافة سجلات جديدة. ضع ذلك في الاعتبار عند تصميم تخطيط البيانات على أوراق العمل إذا كنت ترغب في إدراج السجلات الجديدة باستخدام ADO.NET.

للحصول على مزيد من المعلومات حول كيفية استخدام ADO.NET انقر فوق أرقام المقالات التالية لعرضها في "قاعدة المعارف لـ Microsoft:
301075كيفية الاتصال بقاعدة بيانات ثم قم بتشغيل أمر باستخدام ADO.NET و Visual Basic .NET
301216كيفية تعبئة كائن DataSet من قاعدة بيانات باستخدام Visual Basic .NET
301248كيفية تحديث قاعدة بيانات من كائن DataSet باستخدام Visual Basic .NET
لمزيد من المعلومات حول كيفية استخدام موفر Jet OLE DB مع مصادر بيانات Excel انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
278973ExcelADO يوضح كيفية استخدام ADO لقراءة بيانات وكتابتها في مصنفات Excel
257819كيفية استخدام ADO مع بيانات Excel من Visual Basic أو VBA

نقل بيانات XML (Excel 2002 فقط)

يمكن لـ Excel 2002 فتح أي ملف XML جيد الإنشاء. يمكن فتح ملفات XML مباشرة من الأمر فتح في القائمة ملف أو برمجياً باستخدام أساليب إما فتح أو OpenXML لمجموعة مصنفات. إذا قمت بإنشاء ملفات XML للاستخدام في Excel، يمكنك أيضاً إنشاء أوراق الأنماط لتنسيق البيانات.

لمزيد من المعلومات حول كيفية استخدام XML مع Excel 2002 انقر فوق أرقام المقالات التالية لعرضها في "قاعدة المعارف لـ Microsoft:
307021كيفية نقل بيانات XML إلى Microsoft Excel 2002 باستخدام Visual Basic .NET
288215Microsoft Excel 2002 و XML

إنشاء مشروع Visual Basic .NET نموذج كاملة

  1. إنشاء مجلد جديد لاستيعاب مصنفات Excel أن يقوم النموذج بإنشاء لك ثم قم بتسمية المجلد C:\Exceldata\.
  2. اتبع الخطوات التالية لإنشاء مصنف جديد نموذج الكتابة إلى:
    1. بدء تشغيل مصنف جديد في Excel.
    2. على ورقة1 المصنف الجديد، اكتب الاسم الأول في الخلية A1 و اسم العائلة في الخلية A2.
    3. احفظ المصنف C:\Exceldata\Book7.xls.
  3. بدء تشغيل Visual Studio .NET. من القائمة ملف، انقر فوق جديد ثم انقر فوق المشروع. ضمن المشاريع Visual Basic ، حدد تطبيق Windows. افتراضياً، يتم إنشاء Form1.
  4. إضافة مرجع إلى مكتبة كائنات Excel. للقيام بذلك، اتبع الخطوات التالية:
    1. من القائمة المشروع انقر فوق إضافة مرجع.
    2. ضمن علامة التبويب COM تحديد موقع مكتبة كائنات Microsoft Excel 10.0 ثم انقر فوق تحديد.

      ملاحظة إذا لم تكن قد قمت بالفعل بتنفيذ ذلك ، توصي Microsoft تنزيل ثم قم بتثبيت في Microsoft Office XP الأساسية Interop التجميعات (PIAs). لمزيد من المعلومات حول Office XP PIAs انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
      328912Microsoft Office XP الأساسي إمكانية التشغيل المتداخل التجميعات (PIAs) المتوفرة للتحميل
    3. ضمن علامة التبويب COM تحديد موقع مكتبة 2.7 كائنات بيانات ActiveX Microsoft ثم انقر فوق تحديد.
    4. انقر فوق موافق في مربع الحوار إضافة مراجع لقبول التحديدات. إذا تلقيت موجه لإنشاء wrappers المكتبات التي حددتها انقر فوق "نعم".
  5. إضافة عنصر تحكم مربع تحرير وسرد وعنصر تحكم زر إلى Form1 ".
  6. إضافة التعليمات البرمجية التالية إلى Form1.
        Const sSampleFolder = "C:\ExcelData\"    Const sNorthwind = "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _      Handles MyBase.Load        ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList        Dim aList As String() = _            {"Use Automation to Transfer Data Cell by Cell ", _             "Use Automation to Transfer an Array of Data to a Range on a Worksheet ", _             "Use Automation to Transfer an ADO Recordset to a Worksheet Range ", _             "Use Automation to Create a QueryTable on a Worksheet", _             "Use the Clipboard", _             "Create a Delimited Text File that Excel Can Parse into Rows and Columns", _             "Transfer Data to a Worksheet Using ADO.NET "}        ComboBox1.Items.AddRange(aList)        ComboBox1.SelectedIndex = 0        Button1.Text = "Go!"    End Sub    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _      Handles Button1.Click        Select Case ComboBox1.SelectedIndex            Case 0 : Automation_CellByCell()            Case 1 : Automation_UseArray()            Case 2 : Automation_ADORecordset()            Case 3 : Automation_QueryTable()            Case 4 : Use_Clipboard()            Case 5 : Create_TextFile()            Case 6 : Use_ADONET()        End Select        GC.Collect()    End Sub    Private Function Automation_CellByCell()        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        'Start a new workbook in Excel.        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        'Add data to cells of the first worksheet in the new workbook.        oSheet = oBook.Worksheets(1)        oSheet.Range("A1").Value = "Last Name"        oSheet.Range("B1").Value = "First Name"        oSheet.Range("A1:B1").Font.Bold = True        oSheet.Range("A2").Value = "Doe"        oSheet.Range("B2").Value = "John"        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book1.xls")        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()    End Function    Private Function Automation_UseArray()        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        'Start a new workbook in Excel.        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        'Create an array with 3 columns and 100 rows.        Dim DataArray(99, 2) As Object        Dim r As Integer        For r = 0 To 99            DataArray(r, 0) = "ORD" & Format(r + 1, "0000")            DataArray(r, 1) = Rnd() * 1000            DataArray(r, 2) = DataArray(r, 1) * 0.07        Next        'Add headers to the worksheet on row 1.        oSheet = oBook.Worksheets(1)        oSheet.Range("A1").Value = "Order ID"        oSheet.Range("B1").Value = "Amount"        oSheet.Range("C1").Value = "Tax"        'Transfer the array to the worksheet starting at cell A2.        oSheet.Range("A2").Resize(100, 3).Value = DataArray        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book2.xls")        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()    End Function    Private Function Automation_ADORecordset()        'Create a Recordset from all the records in the Orders table.        Dim sNWind As String        Dim conn As New ADODB.Connection()        Dim rs As ADODB.Recordset        conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _            sNorthwind & ";")        conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient        rs = conn.Execute("Orders", , ADODB.CommandTypeEnum.adCmdTable)        'Create a new workbook in Excel.        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        oSheet = oBook.Worksheets(1)        'Transfer the field names to Row 1 of the worksheet:        'Note: CopyFromRecordset copies only the data and not the field        '      names, so you can transfer the fieldnames by traversing the        '      fields collection.        Dim n As Int32        For n = 1 To rs.Fields.Count            oSheet.Cells(1, n).Value = rs.Fields(n - 1).Name        Next        'Transfer the data to Excel.        oSheet.Range("A2").CopyFromRecordset(rs)        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book3.xls")        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()        'Close the connection.        rs.Close()        conn.Close()    End Function    Private Function Automation_QueryTable()        'Create a new workbook in Excel.        Dim oExcel As Object        Dim oBook As Object        Dim oSheet As Object        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        oSheet = oBook.Worksheets(1)        'Create the QueryTable object.        Dim oQryTable As Object        oQryTable = oSheet.QueryTables.Add( _        "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _            sNorthwind & ";", oSheet.Range("A1"), _            "Select * from Orders")        oQryTable.RefreshStyle = 2 ' xlInsertEntireRows = 2        oQryTable.Refresh(False)        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book4.xls")        oQryTable = Nothing        oSheet = Nothing        oBook = Nothing        oExcel.Quit()        oExcel = Nothing    End Function    Private Function Use_Clipboard()        'Copy a string to the clipboard.        Dim sData As String        sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _            & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _            & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"        System.Windows.Forms.Clipboard.SetDataObject(sData)        'Create a new workbook in Excel.        Dim oExcel As Object        Dim oBook As Object        oExcel = CreateObject("Excel.Application")        oBook = oExcel.Workbooks.Add        'Paste the data.        oBook.Worksheets(1).Range("A1").Select()        oBook.Worksheets(1).Paste()        'Save the workbook and quit Excel.        oBook.SaveAs(sSampleFolder & "Book5.xls")        oBook = Nothing        oExcel.Quit()        oExcel = Nothing        GC.Collect()    End Function    Private Function Create_TextFile()        'Connect to the data source.        Dim objConn As New System.Data.OleDb.OleDbConnection( _            "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNorthwind & ";")        objConn.Open()        'Run a command to retrieve all records from the Employees table.        Dim objCmd As New System.Data.OleDb.OleDbCommand( _            "Select * From Employees", objConn)        Dim objReader As System.Data.OleDb.OleDbDataReader        objReader = objCmd.ExecuteReader()        'Read the records in the dataset and write select fields to the         'output file.        FileOpen(1, sSampleFolder & "Book6.txt", OpenMode.Output)        Dim i As Integer, s As String        While objReader.Read()            'Loop through first 6 fields and concatenate            'each field, separated by a tab, into s variable.            s = ""            For i = 0 To 5                If Not objReader.IsDBNull(i) Then                    If i = 0 Then 'field 1 is EmployeeId                        s = s & objReader.GetInt32(i).ToString                    ElseIf i = 5 Then 'field 6 is BirthDate                        s = s & objReader.GetDateTime(i)                    Else 'field is a text field                        s = s & objReader.GetString(i)                    End If                End If                s = s & Microsoft.VisualBasic.ControlChars.Tab            Next            PrintLine(1, s)        End While        FileClose(1)        'Close the reader and the connection.        objReader.Close()        objConn.Close()        'Create a new instance of Excel.        Dim oExcel As Object        oExcel = CreateObject("Excel.Application")        'Open the text file and save it in the Excel workbook format.        oExcel.Workbooks.OpenText(sSampleFolder & "Book6.txt", _            , , , -4142, , True) 'xlTextQualifierNone=-4142        oExcel.ActiveWorkbook.SaveAs(sSampleFolder & "Book6.xls", _            -4143) 'xlWorkbookNormal = -4143        'Quit Excel.        oExcel.Quit()        oExcel = Nothing        GC.Collect()    End Function    Private Function Use_ADONET()        'Verify that the workbook to write to does exist.        Dim sFile As String = sSampleFolder & "Book7.xls"        If Dir(sFile) = "" Then            MsgBox("Please create the workbook Book7.xls and try again.")            Exit Function        End If        'Establish a connection to the data source.        Dim sConnectionString As String        sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _            "Data Source=" & sSampleFolder & _            "Book7.xls;Extended Properties=Excel 8.0;"        Dim objConn As New System.Data.OleDb.OleDbConnection(sConnectionString)        objConn.Open()        'Add two records to the table named 'MyTable'.        Dim objCmd As New System.Data.OleDb.OleDbCommand()        objCmd.Connection = objConn        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _            " values ('Bill', 'Brown')"        objCmd.ExecuteNonQuery()        objCmd.CommandText = "Insert into [Sheet1$] (FirstName, LastName)" & _            " values ('Joe', 'Thomas')"        objCmd.ExecuteNonQuery()        'Close the connection.        objConn.Close()    End Function					
    ملاحظة إذا لم يتم تثبيت Office إلى المجلد الافتراضي (C:\Program Files\Microsoft Office) ، تغيير ثابت sNorthwind في نموذج التعليمات البرمجية لمطابقة مسار تثبيت لـ Northwind.mdb.

  7. قم بإضافة التعليمات البرمجية التالية إلى أعلى Form1.vb.
    Imports Microsoft.Office.Interop					
  8. اضغط F5 لإنشاء النموذج وتشغيله ثم.
مراجع
لمزيد من المعلومات، قم بزيارة المطور Microsoft التالية موقع ويب Network (MSDN): لمزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
247412الأساليب لنقل البيانات إلى Excel من Visual Basic

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

خصائص

رقم الموضوع: 306022 - آخر مراجعة: 12/06/2015 04:50:01 - المراجعة: 6.3

Microsoft Excel 2002 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft ADO.NET (included with the .NET Framework)

  • kbnosurvey kbarchive kbmt kbautomation kbhowtomaster KB306022 KbMtar
تعليقات