التنبيهات التالية ظهرت :
Warning [2] count(): Parameter must be an array or an object that implements Countable - Line: 864 - File: showthread.php PHP 7.4.33 (Linux)
File Line Function
/showthread.php 864 errorHandler->error



تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
أتمتة وورد 2007 باستخدام فيجول بايزيك دوت نيت
#1
كاتب الموضوع : samerselo


سأغطي في هذه العجالة بعض المفاهيم التي ستساعدك على القيام بالعملية ولك أن تتعمق بعد ذلك في الموضوع كما تريد

حتى نستطيع العمل نحتاج لبعض الخطوات الابتدائية
1 - من خصائص المشروع ومن صفحة References اضغط الزر ADD ثم انتقل لصفحة Com وأضف مرجع للمكتبة Microsoft Word 12.0 Object Library
2 - من أسفل الصفحة ومن القائمة أسفل Imported References انتقل إلى Microsoft.Office.Interop وضع اشارة اختيار بجانبها حتى تكون متوفرة للمشروع بأكمله وإلا ستضطر لاستخدام Imports التالية في بداية كل ملف ستستخدم أتمتة وورد فيه
كودImports Microsoft.Office.Interop
3 - إن كنت ستستخدم أشياء Object لوثائق أو التطبيق الخاصة بوورد في عدة اجرائيات يفضل تعريفها كعناصر في النموذج الحاوي لتلك الإجرائيات - متغيرات عامة على مستوى النموذج - حتى لاتفقد اتصالك مع وورد

بدء وإنهاء وورد
عرف متغير عام على مستوى النموذج كما يلي

كود :
Private axWord As Word.Application
لبدء وورد نستخدم الكود التالي

كود :
axWord = New Word.Application
axWord.Visible = True
و لإنهاء وورد نستخدم الكود التالي

كود :
axWord.Quit()
إنشاء وفتح الوثائق
لإنشاء وثيقة جديدة ابدأ وورد أولا ثم استخدم الأمر Application.Documents.Add

كود :
Dim axDoc As Word.Document
axDoc = axWord.Documents.Add
لفتح وثيقة موجودة

كود :
Dim axDoc As Word.Document
axDoc = axWord.Documents.Open("c:\MyDocument.docx")
لحفظ الوثيقة

كود :
axDoc.SaveAs("C:\MyDocument.docx")
قراءة وإدراج النصوص
عندما تقوم بأتمتتة وورد ستجد العديد من الطرائق التي تقوم بنفس الوظيفة وعملية قراءة وإدراج النصوص مثال جيد على ذلك حيث يمكنك عمل ذلك باستخدام العديد من الأشياء Objects ولكن أكثرها استخداما هو Paragraph و Selection

أولا - paragraph object
تتكون وثيقة وورد من مجموعة من الفقرات وهي مرتبة بالتسلسل بدءا من 1 وهي تتضمن كامل النص حتى محارف الارجاع ويمكن الحصول على نص الفقرة الأولى

كود :
Dim strText As String
strText = axDoc.Paragraphs(1).Range.Text
ولتغيير نص الفقرة نستخدم

كود :
axDoc.Paragraphs(1).Range.Text = "Hello from Visual Basic 2005"
ثانيا - Selection object
وهو الطريقة الأكثر مرونة لإدراج النصوص وهو شبيه باستخدامك لوورد عند كتابتك لوثيقة فتستخدم أولا Selection object لنقل نقطة الإدراج للمكان المطلوب ضمن الوثيقة ثم تقوم بإدراج النص المطلوب والكود التالي يقوم بإدراج نص في آخر الوثيقة وفي بدايتها ثم يبحث عن كلمة ويدخل نص مباشرة بعدها

كود :
'Activate the document first
axDoc.Activate()
'Move to the end and add text
axWord.Selection.EndKey(Word.WdUnits.wdStory)
axWord.Selection.TypeText("This is the end")
'Move to the beginning and add text
axWord.Selection.HomeKey(Word.WdUnits.wdStory)
axWord.Selection.TypeText("This is the beginning")
axWord.Selection.Find.ClearFormatting()
'Locate Foo, then add text
'following it
axWord.Selection.Find.ClearFormatting()
axWord.Selection.Find.Text = "Foo"
axWord.Selection.Find.Execute()
axWord.Selection.MoveRight(Word.WdUnits.wdCharacter, 1)
axWord.Selection.TypeText("This is Foo")
إدراج الجداول
الكود التالي يبين طريقة إدارج جدول بقياس 5 × 5 و إضافة تنسيق للجدول ثم ضبط نص في خلية محددة في ذلك الجدول

كود :
Dim axTable As Word.Table
axTable = axDoc.Tables.Add(axWord.Selection.Range, 5, 5)
axTable.Style = "Table Grid 8"
axTable.Cell(3, 3).Range.Text = "Hello World"
الطباعة
لطباعة لوثيقة نستخدم الطريقة PrintOut

كود :
axDoc.PrintOut()
التأكد من ان الوثيقة مفتوحة
بما أن المستخدم يمكنه إغلاق الوثيقة أو الوورد في أي وقت رغم أن برنامجك مازال مرتبطا به يمكنك استخدام الطريقة التالية للتأكد من ان الوثيقة مازالت مفتوحة

كود :
Dim strName As String
Dim blnIsAvailable As Boolean
Try
strName = axDoc.Name
blnIsAvailable = True
Catch ex As Exception
blnIsAvailable = False
End Try
MsgBox("Document is available: " & blnIsAvailable)
إدارج جدول من ADO .net
يمكنك استخدام الطريقة التالية لإدارج بيانات من جدول في قاعدة بيانات في جدول في وثيقة وورد

كود :
Function AddDataTable(ByVal tbl As DataTable) As Boolean
Dim nRowCount, nColCount, nRow, nCol As Integer
Dim axTable As Word.Table
nRowCount = tbl.Rows.Count
nColCount = tbl.Columns.Count
axWord.Selection.EndKey(wdStory)
axTable = axDoc.Tables.Add(axWord.Selection.Range, nRowCount + 1, nColCount)
axTable.Style = "Table Grid 8"
For nCol = 1 To nColCount
axTable.Cell(1, nCol).Range.Text = tbl.Columns.Item(nCol - 1).Caption
Next
For nCol = 1 To nColCount
For nRow = 1 To nRowCount
axTable.Cell(nRow + 1, nCol).Range.Text = tbl.Rows(nRow - 1).Item(nCol - 1)
Next
Next
Return True
End Function


' To use this function
tbl = Me.CustomersDataSet.Tables(0)
WordDoc.AddDataTable(tbl)
تحكمات المحتويات content controls
يقدم وورد 2007 آلية جديدة لإدراج البيانات في الوثائق تدعى تحكمات المحتويات Content Controls وهي عبارة عن حقول يمكن تحريرها يدويا أو ملؤها برمجيا أو نشرها من وثيقة XML وهي تتضمن عدة تحكمات مثل صندوق النصوص أو الصور أو القائمة المركبة ... الخ ويمكن الوصول إليها من خلال ContentControls collection في Document objects كما في المثال

كود :
Dim ccCollection As Word.ContentControls
ccCollection = axDoc.ContentControls
ccCollection.Item(1).Range.Text = " Content Control Field"
دمج البريد
لتحقيق العملية
1- افتح الوثيقة المصدر
2 - اضبط الخاصية Mail Merge DataSource
3 - يتم إنشاء وثيقة جديدة
وفيما يلي مثال عن كيفية عمل ذلك دون تدخل من المستخدم

كود :
axDoc.Activate()
axDoc.MailMerge.MainDocumentType = _
Word.WdMailMergeMainDocType.wdFormLetters
axDoc.MailMerge.OpenDataSource(strDatabaseFilename, _
wdOpenFormatAuto, False, False, False, False, "", "", _
False, "", "", strConnectionString, strSQL, "", False,_
Word.WdMergeSubType.wdMergeSubTypeOAL)
axDoc.MailMerge.DataSource.FirstRecord = wdDefaultFirstRecord
axDoc.MailMerge.DataSource.LastRecord = wdDefaultLastRecord
axDoc.MailMerge.Destination = _
Word.WdMailMergeDestination.wdSendToNewDocument
axDoc.MailMerge.Execute(False)
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
أتمتة وورد 2007 باستخدام فيجول بايزيك دوت نيت - بواسطة Raggi Tech - 01-10-12, 10:17 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [مقال] صدور فيجول ستوديو 2022 alfaiz678 3 3,520 25-11-22, 03:21 PM
آخر رد: kebboud
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 5,856 30-07-21, 05:14 PM
آخر رد: kebboud
  طريقة تشغيل كريستال ريبورت بجميع ادارات فيجول نت abdhassan 3 7,068 26-02-21, 08:57 PM
آخر رد: علي النقيب
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 13 7,504 19-08-18, 09:27 AM
آخر رد: elgokr
  كيفية قراءة ملف باستخدام IntPtr الخاص بالملف silverlight 3 3,630 24-12-16, 03:13 AM
آخر رد: silverlight
  [درس فيديو] تشغيل اوامر Run من البرنامج & مثال غلق الويندوز بعد وقت محدد باستخدام VB.net أحمد النجار 1 3,852 23-12-15, 04:26 AM
آخر رد: الماجيك مسعد
  [VB.NET] التشفير باستخدام خوارزمية rsa alking-0999 10 7,542 08-07-15, 04:24 PM
آخر رد: مبرمج بلا حدود
  رسم الباركود برمجيا باستخدام (Code128) RaggiTech 3 9,423 06-10-12, 12:51 AM
آخر رد: RaggiTech
  مقال- تطوير الفورم رسم الفورم باستخدام +GDI وتحريكه Moving و تغيير أبعاده Resize RaggiTech 2 3,899 05-10-12, 07:00 PM
آخر رد: RaggiTech
  مكتبة التوافقية الخاصة بفيجول بايزيك 6.0 RaggiTech 0 2,131 05-10-12, 01:34 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم