我是新手使用NPOI XWPF并试图创建我的第一个文档,到目前为止它还顺利。我留下的唯一问题是尝试将文本放在左右对齐的同一行上,我希望它看起来像:
面积:1(左Jstfd)年级/课程:10年级阅读(右Jstfd)
以下是我正在使用的代码段,它只是将所有文字一起推到页面左侧...... blah
XWPFParagraph p2 = doc.CreateParagraph();
p2.Alignment = ParagraphAlignment.LEFT;
XWPFRun r3 = p2.CreateRun();
r3.SetBold(true);
r3.FontFamily = "Times New Roman";
r3.FontSize = 12;
r3.SetText("Area: " + ah.schoolArea);
XWPFRun r4 = p2.CreateRun();
r4.SetBold(true);
r4.FontFamily = "Times New Roman";
r4.FontSize = 12;
r4.SetText("Grade Level/Course: " + ah.filterParm);
答案 0 :(得分:1)
在尝试完成(N)POI中的任务之前,了解如何在Microsoft Word本身中完成所述任务总是很好。你不能简单地将一个段落分成一行,你所做的就是
不幸的是,XWPFParagraph似乎没有公开tabstop功能。但是,XWPFParagraph是CT_P类的包装器,它将1:1映射到基础Office XML格式。使用反射,我们可以访问此私有字段并使用它直接添加tabstop。
示例代码:
var paragraph = document.CreateParagraph();
var memberInfo = typeof(XWPFParagraph).GetField("paragraph", BindingFlags.NonPublic | BindingFlags.Instance);
if (memberInfo == null)
{
throw new Exception("Could not retrieve CT_P from XWPFParagraph");
}
var internalParagraph = (CT_P) memberInfo.GetValue(paragraph);
CT_PPr pPr = internalParagraph.AddNewPPr();
CT_Tabs tabs = pPr.AddNewTabs();
CT_TabStop tab = tabs.AddNewTab();
tab.pos = "9000";
tab.val = ST_TabJc.right;
var run = paragraph.CreateRun();
run.SetText("Left aligned");
run.AddTab();
run = paragraph.CreateRun();
run.SetText("Right aligned");
结果: