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

للحصول على إصدار 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 95 أو Microsoft Windows 98 أو Microsoft Windows Millennium Edition (me) على حد 64 كيلو بايت طلبات الواجهة. إذا كان لديك 64 كيلو بايت أو أكثر من طلبات واجهة ملقم الأتمتة (Excel) قد يتوقف عن الاستجابة، أو قد تتلقى رسائل خطأ تشير إلى انخفاض الذاكرة.
لمزيد من المعلومات، انقر فوق رقم المقالة التالية لعرضها في "قاعدة معارف Microsoft":

216400 يمكن تعليق التنفيذ التلقائي COM عبر عملية تطبيق العميل على Win95/98

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

لمزيد من المعلومات، وعلى سبيل مثال كيفية أتمتة Excel باستخدام Visual Basic.NET، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

كيفية أتمتة Microsoft Excel من Visual Basic.NET 301982

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

صفيف بيانات يمكن نقلها إلى نطاق خلايا متعددة في نفس الوقت، كما يلي.
        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
يمثل هذا السطر طلبي واجهة: واحد الكائن نطاق إرجاع الأسلوب ، والآخر لكائن نطاق إرجاع الأسلوب تغيير الحجم . وفي المقابل، نقل البيانات خلية بعد خلية يتطلب طلبات لثلاثمائة واجهة مجموعة الكائنات. كلما كان ذلك ممكناً، يمكنك الاستفادة من نقل البيانات بكميات كبيرة وتقليل عدد طلبات واجهة إجراء.

استخدام التنفيذ التلقائي لنقل مجموعة سجلات 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 مجموعة السجلات . لا يمكن استخدام مجموعة البيانات التي تقوم بإنشائها باستخدام 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. في هذه الحالة هو الجدول Sheet1.
       '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

كيفية تعبئة كائن بيانات من قاعدة بيانات باستخدام Visual Basic.NET 301216

كيفية تحديث قاعدة بيانات من كائن DataSet باستخدام Visual Basic.NET 301248

لمزيد من المعلومات حول كيفية استخدام موفر Jet OLE DB مع مصادر بيانات Excel، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

278973 اكسسيلادو يوضح كيفية استخدام ADO لقراءة وكتابه البيانات في المصنفات في Excel

كيفية استخدام ADO مع بيانات Excel من Visual Basic أو VBA 257819

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

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

لمزيد من المعلومات حول كيفية استخدام XML في Excel 2002، انقر فوق أرقام المقالات التالية لعرضها في "قاعدة المعارف ل Microsoft":

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

288215 Microsoft 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 توافق تجميعات الأساسية (PIAs).
      لمزيد من المعلومات حول Office XP PIAs، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف ل Microsoft":

      328912 Microsoft 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 مايكروسوفت أوفيس)، تغيير الثابت سنورثويند في نموذج التعليمات البرمجية لمطابقة مسار التثبيت الخاص بك Northwind.mdb.

  7. أضف التعليمات البرمجية التالية إلى أعلى Form1.vb.
    Imports Microsoft.Office.Interop
  8. اضغط F5 لإنشاء وتشغيل العينة.

المراجع

لمزيد من المعلومات، قم بزيارة موقع شبكة مطوري Microsoft (MSDN) التالي على الويب:لمزيد من المعلومات، انقر فوق رقم المقالة التالية لعرضها في "قاعدة معارف Microsoft":

أساليب 247412 لنقل البيانات إلى Excel من Visual Basic

خصائص

رقم الموضوع: 306022 - آخر مراجعة: 09‏/01‏/2017 - المراجعة: 1

تعليقات