Вопрос по c#, ms-word – Как программно написать жирный текст в документе Word, не выделяя жирным шрифтом весь документ?

9

Моя программа должна генерировать очень простые отчеты в Office.doc формат (не XML), и некоторые части документа должны быть выделены жирным шрифтом. Я искал документацию дляопределяющие диапазоны, отчасти это то, из чего мой код получен в данный момент.это часть документации не дает мне достаточно подробностей, чтобы реализовать это в общем в моем документе. Вот мой код до сих пор:

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;

Это создает документ Word только с текстом**Information underneath the header**, Это простой пример.

Мой документ не станет намного более сложным, чем этот, но я надеюсь создать документы Word на основе переменных объемов данных с разбросанным по всему тексту жирным шрифтом и не жирным шрифтом.

Я думаю, что вы хотите это:msdn.microsoft.com/en-us/library/…  ЭтоSelection объект, а не диапазон. Robert Harvey♦
Есть ли какая-либо другая документация или примеры по этому поводу, кромеthis? Еще раз, примеры для них не так уж хороши. Ricardo Altamirano

Ваш Ответ

3   ответа
0

Вы можете просто использовать объект Paragraph для настройки форматирования различных текстовых блоков. Пример кода, как показано ниже:

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

Надеюсь это поможет.

-1

Это старый вопрос, но, поскольку я столкнулся с той же проблемой, и это не помогло мне изменить заголовок или нижний колонтитул, но помогло мне понять, как это сделать, вот мое решение:

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;
}
Вы уверены, что этот код выделит текст документа? Потому что похоже, что функция изменения размера шрифта и жирный шрифт - это не одно и то же.
7

Вотответ, который я придумал, который позволит вам выделить часть строки жирным шрифтом и обычную строку в одной строке.

То, что я делал, было автоматизировано, но то же самое применимо, если вы знаете, что делаете. Имейте также в виду, что Bold - только int, здесь нет логического true / false (по какой-то причине).

Что касается превосходного замечания Рикардо, я также опубликую код здесь:

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

Очевидно, что если вы пытаетесь абстрагировать это еще дальше, вы можете добавить параметр дляchar или жеstring так что вы можете изменить то, что используется для установки жирного пуска / остановки.

Стоит отметить, что в комментариях другой ветки обсуждалось, что по какой-то причине Bold является только int. Там нет значения bool для установки этого. Это странно, я знаю.

Хорошая точка зрения. Извините, я не делал этого изначально.
Если хотите, опубликуйте код этого ответа в своем ответе здесь, чтобы мы могли обсудить его способами, относящимися к этому вопросу. Ricardo Altamirano
Не волнуйтесь. Я сейчас пытаюсь внедрить этот код в тестовое приложение, но я опубликую его работу после его завершения в ближайшие несколько дней. Ricardo Altamirano
Я принял ваш ответ, потому что он делает то, о чем я спрашивал в своем первоначальном вопросе. Я считаю, что мои потребности на самом деле будут довольно сложными и, следовательно, могут потребовать более сложного подхода по сравнению с уровнем сложности, присутствующим в Interop.Word, но пока ваша идея - лучшая, что у меня есть. Ricardo Altamirano
Когда мне нужно было это реализовать, я генерировал отчет из сгенерированной XML структуры данных. За один раз я писал только пару строк, особенно с помощью этого метода. Удачи!

Похожие вопросы