Word 加载项制表位
Word Add-In Tabstops
嗨,我正在寻找制作类似东西的想法:
一些文本---------------------------------------- --------
这个“-----”我必须在按钮点击到行尾。
我的想法是让它在制表位上使用虚线引导符,但这会产生问题,因为当我尝试在文本中使用 ^t 之后它也会产生破折号。它不能仅通过键入破折号来完成,因为第二个按钮将清除整个文档中的破折号。
这是我编写的代码,但就像我说的那样不好,因为 ^t 在文档的任何其他地方都很糟糕
public void DashingSingleLane()
{
Word.Range rng = Globals.ThisAddIn.Application.Selection.Range;
if (rng.Start == rng.End)
{
float pageWidth = classDocument.PageSetup.PageWidth - classDocument.PageSetup.LeftMargin - classDocument.PageSetup.RightMargin;
foreach (Word.Paragraph singleParagraph in rng.Paragraphs)
{
if ((singleParagraph.Range.Text != "\r") && (singleParagraph.Range.Text.IndexOf("\t") == -1))
{
singleParagraph.TabStops.Add(pageWidth, Word.WdTabAlignment.wdAlignTabRight, Word.WdTabLeader.wdTabLeaderDashes);
Globals.ThisAddIn.Application.Selection.EndKey(Microsoft.Office.Interop.Word.WdUnits.wdLine);
Globals.ThisAddIn.Application.Selection.TypeText("\t");
}
}
}
}
我发现为了让它更好,我还需要在句子末尾准确地放置左对齐的 Tabstop。类似的东西
singleParagraph.TabStops.AddPosition_in_Point, Word.WdTabAlignment.wdAlignTabLeft, Word.WdTabLeader.wdTabLeaderDashes);
但我不知道如何得到那个位置
我从 2 天开始就在思考这个问题,但我没有任何好主意。希望大家多多指教
为了确定当前选择(或范围)的水平位置,您可以使用信息 属性。这采用 WdInformation 枚举的成员,该枚举告诉 Word return.
的值
您可以 return 信息作为页面左侧 wdHorizontalPositionRelativeToPage
或 "text boundary" 的值,这将是 "plain text" 中的边距(与 table 或其他构造相反)在具有单列的页面上 - wdHorizontalPositionRelativeToTextBoundary
.
因此,例如:
//Position is returned in POINTS, which is what TabStop uses
float selPosition = Selection.get_Information(Word.WdInformation.wdHorizontalPositionRelativeToTextBoundary);
singleParagraph.TabStops.Add(selPosition, Word.WdTabAlignment.wdAlignTabRight, Word.WdTabLeader.wdTabLeaderDashes);
嗨,我正在寻找制作类似东西的想法:
一些文本---------------------------------------- --------
这个“-----”我必须在按钮点击到行尾。
我的想法是让它在制表位上使用虚线引导符,但这会产生问题,因为当我尝试在文本中使用 ^t 之后它也会产生破折号。它不能仅通过键入破折号来完成,因为第二个按钮将清除整个文档中的破折号。
这是我编写的代码,但就像我说的那样不好,因为 ^t 在文档的任何其他地方都很糟糕
public void DashingSingleLane()
{
Word.Range rng = Globals.ThisAddIn.Application.Selection.Range;
if (rng.Start == rng.End)
{
float pageWidth = classDocument.PageSetup.PageWidth - classDocument.PageSetup.LeftMargin - classDocument.PageSetup.RightMargin;
foreach (Word.Paragraph singleParagraph in rng.Paragraphs)
{
if ((singleParagraph.Range.Text != "\r") && (singleParagraph.Range.Text.IndexOf("\t") == -1))
{
singleParagraph.TabStops.Add(pageWidth, Word.WdTabAlignment.wdAlignTabRight, Word.WdTabLeader.wdTabLeaderDashes);
Globals.ThisAddIn.Application.Selection.EndKey(Microsoft.Office.Interop.Word.WdUnits.wdLine);
Globals.ThisAddIn.Application.Selection.TypeText("\t");
}
}
}
}
我发现为了让它更好,我还需要在句子末尾准确地放置左对齐的 Tabstop。类似的东西
singleParagraph.TabStops.AddPosition_in_Point, Word.WdTabAlignment.wdAlignTabLeft, Word.WdTabLeader.wdTabLeaderDashes);
但我不知道如何得到那个位置
我从 2 天开始就在思考这个问题,但我没有任何好主意。希望大家多多指教
为了确定当前选择(或范围)的水平位置,您可以使用信息 属性。这采用 WdInformation 枚举的成员,该枚举告诉 Word return.
的值您可以 return 信息作为页面左侧 wdHorizontalPositionRelativeToPage
或 "text boundary" 的值,这将是 "plain text" 中的边距(与 table 或其他构造相反)在具有单列的页面上 - wdHorizontalPositionRelativeToTextBoundary
.
因此,例如:
//Position is returned in POINTS, which is what TabStop uses
float selPosition = Selection.get_Information(Word.WdInformation.wdHorizontalPositionRelativeToTextBoundary);
singleParagraph.TabStops.Add(selPosition, Word.WdTabAlignment.wdAlignTabRight, Word.WdTabLeader.wdTabLeaderDashes);