2014-10-15 6 views
2

MS Word 플러그인을 작성 중입니다. 여전히 VSTO를 배우는 초기 단계에 있습니다. 그래서 기본적으로 지금까지 내가 Word 문서에 무슨 다소 다음과 같은 형태로 일부 사용자 작성 텍스트 (완전한 Word 문서)입니다 :VSTO를 사용하여 Word 문서의 읽기 및 수정

Hello, my name is <%NAME%>. I am <%AGE%> years old and i live in <%COUNTRY%>. 

는 그 < %%>은 변수 어떤 사용자의 드래그 앤 드롭에서 사용자 지정 작업 창.

내가하고있는 일은 이러한 변수를 일부 데이터 파일에서 읽은 실제 데이터 값으로 대체하는 것입니다. 하지만 지금은 내가 찾고있는 것은 String에서 현재 액티브 문서의 내용을 읽은 다음 그 변수를 더미 데이터 값으로 바꾼 다음 이전 값을이 새로운 값으로 바꾼 실제 값을 실제 값으로 바꿉니다. NAME, AGE 등 대신에 onSaveAs 이벤트에서 가급적이면 사용할 수 없으므로 BeforeSave 이벤트에서 수행해야합니다.

  • 는 현재 문서의 내용을 읽고 모든 내가 찾고 있어요 한마디로

    는 방식이다.

  • 해당 내용을 수정하십시오.
  • 다시 작성하십시오.

저는 지금 웹과 MSDN을 몇 시간 동안 검색해 왔지만 실제로 아무것도 찾을 수 없거나 구현할 수 없습니다.이 기능을 처음 사용하기 때문에 구현할 수 없습니다.

내가 이것을 달성하기 위해 읽은 기사 중 일부는 다음과 같습니다

add-in in VSTO - How to get text from Word document using Ribbon with button

How To Read & Write Text From Word Document Using VSTO In C#

Globals.ThisAddIn.Application.Selection.Text; 

이는 선택한 텍스트를 제공하지만 난이 문서의 모든 텍스트가 선택이 아닌 필요 둘 다 선택했다. 내 ThisAddin.cs에서

현재 코드는 다음과 같습니다 도움/방향

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml.Linq; 
using Word = Microsoft.Office.Interop.Word; 
using Office = Microsoft.Office.Core; 
using Microsoft.Office.Tools.Word; 


namespace dragdrop 
{ 
    public partial class ThisAddIn 
    { 

     private void ThisAddIn_Startup(object sender, System.EventArgs e){Globals.ThisAddIn.CustomTaskPanes.Add(new OrdersListUserControl(), "Drag and Drop List Items on Word Doc").Visible = true;}  
     private void ThisAddIn_Shutdown(object sender, System.EventArgs e){} 
     public void OnDropOccurred(object data) //adding dropped text on current cursor position. 
     { 
      Word.Selection currentSelection = Application.Selection; 
      currentSelection.TypeText(data.ToString()); 
     } 
     #region VSTO generated code 

     /// <summary> 
     /// Required method for Designer support - do not modify 
     /// the contents of this method with the code editor. 
     /// </summary> 
     private void InternalStartup() 
     { 
      this.Startup += new System.EventHandler(ThisAddIn_Startup); 
      this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown); 

     } 


     #endregion 
    } 
} 

모든 종류의 환영 이상입니다. 감사.

편집 : 내가 사용 내용을 얻을 수 있었다 :

Globals.ThisAddIn.Application.ActiveDocument.Range(0, 5).Text 

하지만 이것에 문제가 최종 범위는 문서의 전체 길이를 초과하는 경우가 충돌 것입니다! 그래서 두 번째 인수로 제공하기 위해 문서의 길이를 얻는 방법 또는 더 좋은 방법이 있습니까? 또한 나는 텍스트를 읽고 그것을 다시 쓰면 텍스트가 포맷팅과 스타일링을 잃어 버리게되어 궁금합니다. 그래서 내가 성취하고자하는 것을 보존 할 수있는 방법이 있습니까? 이러한 모든 혼동을 해결해 주셔서 감사합니다.

문서의

답변

4

를 사용하여 Content 속성은 문서의 범위의 처음과 마지막 인덱스를 얻을 수

Microsoft.Office.Interop.Word._Document oDoc = 
    Globals.ThisAddIn.Application.ActiveDocument; 
Object start = oDoc.Content.Start; 
Object end = oDoc.Content.End; 

// select entire document 
oDoc.Range(ref start,ref end).Select(); 
관련 문제