الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أتمتة وورد 2007 باستخدام فيجول بايزيك دوت نيت

مغلق
بدأه محمد سامر أبو سلو في 18 مايو 2007 · 5 رد · 1,431 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

حتى نستطيع العمل نحتاج لبعض الخطوات الابتدائية

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)

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#2

موضوع رائع وسهل

جزاك الله خير

#3

جزاك الله ألف خير استاذنا محمد , لطالما سطرت يديكما الكريمتان , للألأ و دُرر مكنونه في محيطاتِ علمكم أزادكم الله منه و بارك فيه ..

في المثال يتضح المقال

#5

يعطيك العافية ....بأنتظار المزيد

#6

وهناك موضوع كنت قد كتبته أيضا بنفس الطريقة و لكن مع الإكسل 2003 الطريقة لا تختلف كثيرا عن 2007 بل أقل هي نفسها مع تغيير المرجع:

مثال على إنشاء ملف إكسل من قاعدة بيانات أكسس

شرح الطريقة سيكون موجود بأسفل الموضوع.

lxcs.png

syria-flag_small.jpg

هذا الموضوع مغلق.

مواضيع مشابهة