سؤال

نحن نتلاعب مستندات Word 2007 من .NET باستخدام Word interop. في الغالب القيام بأشياء مع الحقول كما في:

For Each f In d.Fields
    f.Select()
    //do stuff with fields here            
Next

هذا يترك الحقل الأخير في المستند المحدد.

لذلك ، من أجل أناس نود وضع المؤشر في نهاية من الوثيقة (أو حتى بداية سوف تكون على ما يرام).

غوغلينغ للإجابة لا ترمي كثيرًا ... يبدو أن أقرب ما يمكنني الحصول عليه يقترح أننا بحاجة إلى إشراك أنفسنا مع النطاقات أو الإشارات المرجعية. هناك GoTo طريقة ل Document كائن ولكن لا شيء من WdGoToItem الخيارات التي يقدمها مفيدة.

ألا توجد طريقة بسيطة لإرسال المؤشر إلى النهاية (أو البدء) من المستند؟

يحرر

جزء من مشكلتي هو أنني لم أحب مغادرة الحقل الأخير. أدركت الآن أنه يمكنني القيام به

f.Unlink

لإزالة mergefield واترك نص الحقل هناك كنص عادي. وهو أكثر إبداعًا ، سواء كنا نعيد وضع المؤشر أم لا

هل كانت مفيدة؟

المحلول

@alexander Kojevnikov: شكرًا على مساعدتك لأنك وضعتني على المسار الصحيح. ومع ذلك ، فقد وجدت أنه كان علي تطبيق .goto على كائن تحديد الكلمات ، وليس المستند. كما في:

    Dim what As Object = Word.WdGoToItem.wdGoToLine
    Dim which As Object = Word.WdGoToDirection.wdGoToLast

    //below line had no effect
    //d.GoTo(what, which, Nothing, Nothing)

    w.Selection.GoTo(what, which, Nothing, Nothing)

نصائح أخرى

هكذا يبدو في C#:

object missing = Missing.Value;
object what = Word.WdGoToItem.wdGoToLine;
object which = Word.WdGoToDirection.wdGoToLast;
doc.GoTo(ref what, ref which, ref missing, ref missing);

أعتقد أنه سيكون أسهل في vb.net لأنه يدعم المعلمات الاختيارية.

لست متأكدًا من أنني أستخدم نفس البيئة مثلك ، ولكن للذهاب إلى بداية أو نهاية من المستند هذا ما يصلح لي:

Private Sub moveCursorToStartOfDocument()
    w.Selection.HomeKey(WdUnits.wdStory, Nothing)
End Sub

Private Sub moveCursorToEndOfDocument()
    w.Selection.EndKey(WdUnits.wdStory, Nothing)
End Sub

يمكنني استخدام وحدة Word_tlb في Delphi مع كائن التطبيق- Word.Application

كالتالي:

aWordDoc.Application.Selection.EndKey(wdStory,wdMove);

عموما نهاية وثيقة الكلمة:

Selection.EndKey( WdUnits.wdStory, WdMovementType.wdMove)

عندما أستخدم

Selection.GoTo(Word.WdGoToItem.wdGoToLine, Word.WdGoToDirection.wdGoToLast, Nothing, Nothing);
Selection.InsertFile('documnet.docx');

تم إدراج محتوى جديد قبل السطر الأخير.

أسهل طريقة لمعرفة الخطوط العريضة للرمز الفعلي هي تسجيل ماكرو في كلمة لهذا الإجراء المحدد. ثم يمكنك تعديل الكود الذي تم إنشاؤه لتناسب بناء جملة (S) من VB ، VB.NET ، C# إلخ.

يوضح مقتطف الكود أدناه استخدام تطبيق vb.net:

Imports wordNmSpace = Microsoft.Office.Interop.Word
' Create an object for the application instance
objWord = CreateObject("Word.Application")

' Create a reference of the selection object within Word
objSelection = objWord.Selection

' Now comes the part where you move selection position to the end of document
objSelection.endof(wordNmSpace.WdUnits.wdStory, wordNmSpace.WdMovementType.wdMove)

أتمنى أن يساعدك هذا.

لتغيير موضع المؤشر في نهاية المستند الحالي في C# Word Add-In Vsto:

this.Application.ActiveDocument.Range(
this.Application.ActiveDocument.Content.End-1,
this.Application.ActiveDocument.Content.End-1).Select();

نرى كيفية: تحديد النطاقات واختيارها برمجيا في المستندات

جرب هذا :

int lNumberOfPages = 
  _WordDoc.ComputeStatistics(Word.WdStatistic.wdStatisticPages, false);

WordApp.Selection.GoTo(Word.WdGoToItem.wdGoToPage,WordApp.WdGoToDirection.wdGoToLast, lNumberOfPages);

يمكنك استخدام المرجعية المحددة مسبقًا:

EndOfDoc oDoc.Bookmarks.Item("\endofdoc").Range

إشارات أخرى محددة مسبقًا:

ActiveDocument.Bookmarks("\Para").Copy "currpara"

https://msdn.microsoft.com/en-us/vba/word-vba/articles/predefined-bookmarks

لشبكة المكتب:

mydoc.Range(GlobalClass.mydoc.Content.End-1 , mydoc.Content.End - 1).Select();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top