我正在尝试通过循环将几个空字段(即ctrl+F9
快捷方式)添加到word文档(通过VSTO),但由于某些原因,只有最后一个出现在文档中。
任何人都可以帮助我吗?
以下是我使用的代码:
Document doc = Globals.ThisAddIn.Application.ActiveDocument;
if (doc == null)
return;
for (int i = 0; i < 5; i++)
{
Paragraph para = doc.Paragraphs.Add();
object fieldType = WdFieldType.wdFieldEmpty;
object text = "test" + i;
object preserve = false;
Field f = doc.Fields.Add(para.Range , ref fieldType, ref text, ref preserve);
}
输出结果为:
{ test4 }
答案 0 :(得分:2)
它工作正常,但很难看到。问题是所有5个字段都在彼此之上。也许是因为很快就停下来而且你不清楚你想怎么做。任意地,将此代码附加到for循环体以使字段更加可见:
print(..)
答案 1 :(得分:1)
那是因为每个段落都覆盖了前一个段落 以下示例在文档的结尾处创建新段落
using Microsoft.Office.Interop.Word;
namespace ConsoleWord
{
class Program
{
static void Main(string[] args)
{
Document doc = new Document();
for (int i = 0; i < 5; i++)
{
var range = doc.Range(0, 0);
object text = "test" + i;
object fieldType = WdFieldType.wdFieldAuthor;
Paragraph para = doc.Paragraphs.Add(range);
doc.Fields.Add(range, ref fieldType, ref text);
}
doc.SaveAs2(@"C:\tmpc\aa.docx");
}
}
}
答案 2 :(得分:0)
将Environment.NewLine
连接到循环中的文本
答案 3 :(得分:0)
如果你想在循环中显示所有文本对象,那么试试这个......`
object text = "";
for (int i = 0; i < 5; i++)
{
Paragraph para = doc.Paragraphs.Add();
object fieldType = WdFieldType.wdFieldEmpty;
if(text.toString() != "")
text = text + "test" + i;
else
text = "test" + i;
object preserve = false;
}
Field f = doc.Fields.Add(para.Range , ref fieldType, ref text, ref preserve);
输出: {test1 test2 test3 test4}
或者您也可以尝试使用Field.Update()战略性地在需要的地方使用,以便更新正在填充的字段。有时候它是缓冲的问题。
foreach (Field field in doc.Fields)
field.Update();
所以你可以尝试......
for (int i = 0; i < 5; i++)
{
Paragraph para = doc.Paragraphs.Add();
object fieldType = WdFieldType.wdFieldEmpty;
object text = "test" + i;
object preserve = false;
Field f = doc.Fields.Add(para.Range , ref fieldType, ref text, ref preserve);
foreach (Field field in doc.Fields)
field.Update();
}