2012-07-19 17 views
9

Mój program musi generować bardzo proste raporty w formacie Office .doc (inne niż XML), a niektóre części dokumentu muszą być pogrubione. Przeglądałem dokumentację dla defining ranges, która jest częściowo tym, co mój kod wywodzi w tej chwili. This część dokumentacji tak naprawdę nie dostarczyła mi wystarczającej ilości szczegółów, aby wdrożyć to ogólnie w moim dokumencie. Oto mój kod do tej pory:Jak programowo napisać pogrubiony tekst do dokumentu programu Word bez pogrubienia całego dokumentu?

object miss = System.Reflection.Missing.Value; 
object Visible = true; 
object start = 0; 

Microsoft.Office.Interop.Word.Application WordApp = new Microsoft.Office.Interop.Word.Application(); 
Document report = WordApp.Documents.Add(ref miss, ref miss, ref miss, ref miss); 

String header = "Bold Header: "; 
Range headerRange = report.Range(ref start, ref miss); 
headerRange.Text = header; 
headerRange.Font.Bold = -1; 

String data = "Information underneath the header"; 
Range dataRange = report.Range(); 
dataRange.Text = data; 
dataRange.Font.Bold = 1; 

object filename = "test.doc"; 

report.SaveAs(ref filename, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss); 
object saveChanges = Microsoft.Office.Interop.Word.WdSaveOptions.wdPromptToSaveChanges; 
object originalFormat = Microsoft.Office.Interop.Word.WdOriginalFormat.wdWordDocument; 
object routeDocument = true; 
WordApp.Visible = true; 

ta produkuje dokument słowo tylko z tekstem **Information underneath the header**. To prosty przykład.

Mój dokument nie będzie o wiele bardziej skomplikowany, ale mam nadzieję, że uda mi się wygenerować dokumenty Word w oparciu o różne ilości danych, pogrubioną czcionką i rozproszonym tekstem.

+0

Myślę, że chcesz tego: http://msdn.microsoft.com/en-us/library/aa192495%28v=office.11%29.aspx#wordobject_link7 Jest to obiekt 'Selection', a nie zakres. –

+0

Czy jest jeszcze jakaś inna dokumentacja lub przykłady na ten temat (http://msdn.microsoft.com/en-us/library/6b9478cs%28v=vs.80%29.aspx)? Po raz kolejny przykłady z nich nie są wcale takie wspaniałe. –

Odpowiedz

7

Here - Odpowiedź, którą wymyśliłem, pozwoli ci na odszukanie części napisu pogrubionego i regularnego w tym samym tekście.

To, co robiłem, było zautomatyzowane, ale to samo dotyczy sytuacji, gdy wiesz, co robisz. Pamiętaj również, że Bold jest tylko int, nie ma boolean true/false (z jakiegoś powodu).

Zgodnie doskonały punkt Ricarda, wyślę kod tutaj także:

private void InsertMultiFormatParagraph(string psText, int piSize, int piSpaceAfter = 10) { 
    Word.Paragraph para = mdocWord.Content.Paragraphs.Add(ref mobjMissing); 

    para.Range.Text = psText; 
    // Explicitly set this to "not bold" 
    para.Range.Font.Bold = 0; 
    para.Range.Font.Size = piSize; 
    para.Format.SpaceAfter = piSpaceAfter; 

    object objStart = para.Range.Start; 
    object objEnd = para.Range.Start + psText.IndexOf(":"); 

    Word.Range rngBold = mdocWord.Range(ref objStart, ref objEnd); 
    rngBold.Bold = 1; 

    para.Range.InsertParagraphAfter(); 
} 

Oczywiście, jeśli starają się streszczenie tego jeszcze można dodać parametr dla char lub string tak możesz zmienić, co jest używane, aby ustawić pogrubiony start/stop.

Jedną rzeczą, na którą trzeba zwrócić uwagę, było to, co zostało omówione w komentarzach do drugiego wątku, że z jakiegoś powodu Bold jest tylko int. Nie ma wartości bool dla ustawienia tego. To dziwne, wiem.

+0

Jeśli chcesz, umieść kod z tej odpowiedzi w swojej odpowiedzi, abyśmy mogli omówić go w sposób istotny dla tego pytania. –

+0

Dobra uwaga. Przepraszam, że nie zrobiłem tego pierwotnie. – krillgar

+0

Bez obaw. Próbuję teraz uruchomić ten kod w aplikacji testowej, ale opiszę, jak to działa, gdy zostanie ukończone w ciągu kilku następnych dni. –

0

Możesz po prostu użyć obiektu akapitowego, aby dostosować formatowanie różnych bloków tekstu. Przykładowy kod, jak poniżej:

object DocumentEndIndex = "\\endofdoc"; 
object endDocument = wordDocument.Bookmarks.get_Item(ref DocumentEndIndex).Range; 
Paragraph para = wordDocument.Content.Paragraphs.Add(ref endDocument); 
para.Range.Text = text; 
para.Range.set_Style(ref headingLevel); 
// do format the text with para.Range object as you want 
para.Range.InsertParagraphAfter(); 

Mam nadzieję, że to pomoże.

-1

To stara sprawa, ale tak jak w obliczu tego samego problemu i to mi nie pomaga za modyfikacje w nagłówku lub stopce, ale pomógł mi zrozumieć, jak to zrobić, tutaj jest moje rozwiązanie:

Word.Paragraph p = c2.Range.Paragraphs.Add(ref missing); 
p.Range.Text = "your trip at " + sejour.Location; 
SetTextColor(p.Range, Word.WdColor.wdColorWhite,0, p.Range.Text.Length - 1); 
SetTextSize(p.Range, (float)14, 0, p.Range.Text.Length - 1); 
SetTextSize(p.Range, (float)16, p.Range.Text.Length - 2 - sejour.Location.Length, sejour.Location.Length); 

public void SetTextColor(Word.Range range, Microsoft.Office.Interop.Word.WdColor color, int start, int length) 
{ 
    Word.Range rng = range; 
    rng.Start = range.Start + start; 
    rng.End = range.Start + start + length; 
    rng.Font.Color = color; 
} 

public void SetTextSize(Word.Range range, float size, int start, int length) 
{ 
    Word.Range rng = range; 
    rng.Start = range.Start + start; 
    rng.End = range.Start + start + length; 
    rng.Font.Size = size; 
} 
+0

Czy jesteś pewien, że ten kod pogrubi tekst dokumentu? Ponieważ wygląda jak funkcja zmiany rozmiaru czcionki, a pogrubienie to nie to samo. –

Powiązane problemy