Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建word文档并编写格式化文本_C#_Text_Ms Word - Fatal编程技术网

C# 创建word文档并编写格式化文本

C# 创建word文档并编写格式化文本,c#,text,ms-word,C#,Text,Ms Word,上面的代码创建Word文档并向其中写入文本,但看起来如下所示: 我假设Microsoft.Office.Interop.Word中的文本不应该这样做,或者应该以其他方式添加文本,但我找不到任何关于如何执行此操作的好信息 因此,我的问题是-如何将c#中的文本添加到新创建的具有正确属性的word文档中,结果如下所示: 关于使用.Interop.Word创建表的提示也将不胜感激。使用Word文档中的内容的关键是了解如何使用范围对象。实现这种性质的目标的方法不止一种。下面的代码片段是我的首选:折叠每个步

上面的代码创建Word文档并向其中写入文本,但看起来如下所示:

我假设
Microsoft.Office.Interop.Word
中的文本不应该这样做,或者应该以其他方式添加文本,但我找不到任何关于如何执行此操作的好信息

因此,我的问题是-如何将c#中的文本添加到新创建的具有正确属性的word文档中,结果如下所示:


关于使用
.Interop.Word
创建表的提示也将不胜感激。

使用Word文档中的内容的关键是了解如何使用
范围
对象。实现这种性质的目标的方法不止一种。下面的代码片段是我的首选:折叠每个步骤的范围(就像按向右箭头键将选择“折叠”到一个点),而不是混合使用
Add
InsertAfter
和类似的方法

对于格式的每次更改,
范围必须“折叠”。所以如果你在一条直线中间有粗体,那是一个单独的步骤。如果多个段落的格式相同,则可以将它们组合在一起

环境。换行符
\n
可以互换使用

通常,指定文本内容,然后格式化
范围

using Word = Microsoft.Office.Interop.Word;

public static void CreateWord()
{
    Word.Application objWord = new Word.Application();
    Word.Document objDoc = objWord.Documents.Add();

    Word.Paragraph objPara;
    objPara = objDoc.Paragraphs.Add();
    objPara.Range.Text = "Bold text aligned center";
    objPara.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
    objPara.Range.Bold = 1;
    objPara.Range.InsertParagraphAfter();

    objPara = objDoc.Paragraphs.Add();
    objPara.Range.Text = "Regular text aligned left";
    objPara.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
    objPara.Range.Bold = 0;
    objPara.Range.InsertParagraphAfter();

    objPara = objDoc.Paragraphs.Add();
    objPara.Range.Text = "Regular text aligned center\nwith something on the next line";
    objPara.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
    objPara.Range.Bold = 0;
    objPara.Range.InsertParagraphAfter();

    objPara = objDoc.Paragraphs.Add();
    objPara.Range.Text = "Regular text aligned left, with some Bold text here\nand some regular text on next line";
    objPara.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
    objPara.Range.Bold = 0;
    objPara.Range.InsertParagraphAfter();

    objWord.Visible = true;
    objWord.WindowState = Word.WdWindowState.wdWindowStateNormal;
}

@AndrewG的可能副本基本上,添加文本并稍后使用其在字符串中的相对位置编辑其格式?这很有帮助。是的,看起来真的很糟糕。哈哈,我个人可能想多看看,因为如果这是解决方案,那就不是最好的。
    object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
    doc.Paragraphs.Add();
    Word.Range objRange = doc.Content;
    objRange.Collapse(ref oCollapseEnd);

    objRange.Text = "Bold text aligned center" + Environment.NewLine;
    objRange.Bold = 1;
    objRange.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
    objRange.Collapse(ref oCollapseEnd);

    objRange.Text = "Regular text aligned left" + Environment.NewLine;
    objRange.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
    objRange.Bold = 0;
    objRange.Collapse(ref oCollapseEnd);

    objRange.Text = "Regular text aligned center\nwith something on the next line" + Environment.NewLine;
    objRange.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
    objRange.Bold = 0;
    objRange.Collapse(ref oCollapseEnd);

    objRange.Text = "Regular text aligned left, with some ";
    objRange.Collapse(ref oCollapseEnd);
    objRange.Text = "Bold text here";
    objRange.Bold = 1;
    objRange.Collapse(ref oCollapseEnd);
    objRange.Text = "\nand some regular text on next line" + Environment.NewLine;
    objRange.Paragraphs.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
    objRange.Bold = 0;