2012-07-19 10 views
9

Il mio programma deve generare report molto semplici nel formato Office .doc (non XML) e alcune parti del documento devono essere in grassetto. Ho esaminato la documentazione per defining ranges, che è in parte ciò che il mio codice deriva dal momento. This parte della documentazione in realtà non mi dà abbastanza dettagli per implementare questo in generale nel mio documento. Ecco il mio codice finora:Come si scrive il testo in grassetto in un documento Word a livello di programmazione senza mettere in grassetto l'intero documento?

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; 

Questo produce un documento di Word con solo il testo **Information underneath the header**. Questo è un semplice esempio.

Il mio documento non sarà molto più complicato di questo, ma spero di generare documenti Word basati su quantità variabili di dati, con testo in grassetto e testo non grassetto disperso in tutto.

+0

Penso che tu voglia questo: http://msdn.microsoft.com/en-us/library/aa192495%28v=office.11%29.aspx#wordobject_link7 È un oggetto 'Selection', non un intervallo. –

+0

C'è qualche altra documentazione o esempi su questo oltre a [questo] (http://msdn.microsoft.com/en-us/library/6b9478cs%28v=vs.80%29.aspx)? Ancora una volta, gli esempi per questi non sono poi così grandi. –

risposta

7

Here è una risposta che ho trovato che ti permetterà di avere parte di una stringa in grassetto e regolare nella stessa stringa.

Quello che stavo facendo era automatizzato, ma lo stesso vale se sai cosa stai facendo. Tieni presente anche che il grassetto è solo un int, non esiste alcun valore booleano vero/falso (per qualche motivo).

Come da ottimo punto di Ricardo, vi posterò il codice qui pure:

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(); 
} 

Ovviamente, se si sta cercando di astrarre questo ancora di più, è possibile aggiungere un parametro per la char o string così puoi cambiare ciò che viene utilizzato per impostare l'avvio/arresto in grassetto.

Una cosa da notare che è stata discussa nei commenti dell'altro thread è stata che per qualche ragione, Bold è solo un int. Non esiste un valore bool per l'impostazione di questo. È strano, lo so.

+0

Se lo desideri, inserisci il codice da quella risposta nella tua risposta qui in modo che possiamo discuterlo in modo pertinente a questa domanda. –

+0

Buon punto. Mi spiace di non averlo fatto in origine. – krillgar

+0

Nessun problema. Sto cercando di lavorare questo codice in un'applicazione di test al momento, ma posterò come funziona quando sarà completato nei prossimi giorni. –

0

È possibile utilizzare semplicemente l'oggetto Paragrafo per personalizzare la formattazione di diversi blocchi di testo. Esempio di codice come di seguito:

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(); 

Spero che questo aiuti.

-1

Si tratta di una vecchia questione, ma come ho affrontato lo stesso problema e questo non mi ha aiutato per le modifiche in intestazione o piè di pagina, ma mi ha aiutato a capire come farlo, ecco la mia soluzione:

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

Sei sicuro che questo codice metterà in grassetto il testo del documento? Perché sembra che le dimensioni dei caratteri cambino funzione e il grassetto non è lo stesso. –