01-10-12, 10:17 PM
كاتب الموضوع : 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 لنقل نقطة الإدراج للمكان المطلوب ضمن الوثيقة ثم تقوم بإدراج النص المطلوب والكود التالي يقوم بإدراج نص في آخر الوثيقة وفي بدايتها ثم يبحث عن كلمة ويدخل نص مباشرة بعدها
كود :
'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)
يمكنك استخدام الطريقة التالية لإدارج بيانات من جدول في قاعدة بيانات في جدول في وثيقة وورد
كود :
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)
يقدم وورد 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)