2012-08-30 13 views
7

Tôi thừa nhận, tôi rất mới sử dụng các thư viện Interop, nhưng những lời khuyên mọi người dường như luôn luôn cho là, ghi lại một vĩ mô và kiểm tra mã vba. Vấn đề là, macro không ghi chính xác những gì tôi đang làm: Nhấp vào Kiểu nhanh để áp dụng cho lựa chọn hiện tại.Làm thế nào để áp dụng một Word Quick Style trong C# - không chỉ là định dạng đơn giản mà là toàn bộ phong cách?

Nhiệm vụ của tôi là khá đơn giản: tôi cần phải áp dụng một phong cách nhanh để a Khoản (Microsoft.Office.Interop.Word.Paragraph). Tuy nhiên, sử dụng lệnh set_style, chỉ áp dụng định dạng cơ bản và đoạn giữ nguyên lựa chọn Kiểu gốc nhanh (Bình thường).

Sử dụng cách tiếp cận của Remou nó làm việc cho tôi, nhưng nó có vẻ rất giống với mã của riêng tôi, và tôi không thể làm cho nó hoạt động, và tôi nghĩ rằng nó có thể là sự hiểu biết của tôi về objectmodel đó là một chút.

public void AddParagraph(string text, string styleName = null) 
{ 
    Paragraph paragraph = _document.Content.Paragraphs.Add(); 
    if (styleName != null) 
    { 
    paragraph.Range.set_Style(_document.Styles[styleName]); 
    } 

    paragraph.Range.Text = text; 
    paragraph.Range.InsertParagraphAfter(); 
} 

Sau đó tôi gọi nó bằng ví dụ: AddParagraph("A title", "Heading 1");, nhưng kết quả của việc sử dụng trình bao bọc ở trên để xây dựng tài liệu của tôi là, không có kiểu hoàn chỉnh nào được áp dụng, chỉ phông chữ, màu, kích thước và in đậm/in nghiêng.

Tôi đang sử dụng tệp .dotx của riêng mình, với phong cách được xác định và đặt tên của riêng mình, nhưng chỉ cần sao chép mã từ Remou hoạt động với mẫu của riêng tôi, vì vậy tôi không nghĩ đó là vấn đề và sử dụng mã đó để tìm hiểu cách nối nhiều đoạn văn với mỗi kiểu riêng của chúng.

Có ai có thể chỉ ra điều gì sai với cách tiếp cận của tôi, hoặc ít nhất là cách tôi có thể đưa ra câu trả lời do Remou cung cấp cho các yêu cầu của tôi? :)

Trả lời

7

Điều này phù hợp với tôi.

Word.Application _wordApp = new Word.Application(); 
Word.Document oDoc = _wordApp.Documents.Add(); 
_wordApp.Visible = true; 
_wordApp.Selection.TypeText("Heading"); 
oDoc.Paragraphs[1].set_Style(Word.WdBuiltinStyle.wdStyleHeading2); 

Khi bạn nói

paragraph.Range.Text = text + paragraph.Range.Text; 

Bạn đang nhận được nhiều đoạn văn hơn bạn tưởng tượng. Tôi nghĩ bạn cần:

paragraph.Range.Text = text; 

Hãy thử:

Paragraph paragraph = _document.Content.Paragraphs.Add(); 
paragraph.Range.Text = text; 

if (styleName != null) 
{ 
    paragraph.set_Style(_document.Styles[styleName]); 
} 

paragraph.Range.InsertParagraphAfter(); 
+0

Cảm ơn Remou, tôi đã cập nhật câu hỏi của tôi, như bạn đã cho tôi một chút gần gũi hơn nhưng không phải tất cả các cách. Tôi có lẽ đang đi về điều này một cách sai lầm. –

+0

... Tôi câm lặng. Thay đổi thứ tự áp dụng kiểu và văn bản là nó đã làm gì, phần '+ paragraph.Range.Text;' là một cái gì đó cũ mà tôi đã cố gắng và sao chép do nhầm lẫn. Cảm ơn sự giúp đỡ của bạn! :) –

Các vấn đề liên quan