سأغطي في هذه العجالة بعض المفاهيم التي ستساعدك على القيام بالعملية ولك أن تتعمق بعد ذلك في الموضوع كما تريد
حتى نستطيع العمل نحتاج لبعض الخطوات الابتدائية
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)

