gpt4 book ai didi

javascript - Ooxml 中不显示下划线

转载 作者:行者123 更新时间:2023-11-28 10:36:34 27 4
gpt4 key购买 nike

我正在调试 Word Office js 加载项。它需要做的一件事是在 Word 文档中创建一个隐藏部分。为此,我将一些信息传递给创建 OoXML 字符串的 JavaScript 函数。我让用户能够在该部分中嵌入一些文本,并且用户需要能够将这些格式设置为斜体、粗体、下划线或将这些格式的任意组合应用于嵌入的文本。斜体和粗体工作正常,但下划线不起作用。

嵌入的文本被输入到加载项中的 html 文本框中。用户可以单击一个按钮以斜体显示,另一个按钮以粗体显示,第三个按钮以下划线显示,或第四个按钮以删除这些装饰。按钮的点击事件前置和附加 html 标签,因此一串加粗、斜体和下划线的文本将像这样发送:

<b><i><u>string of text</u></i></b>

然后另一个函数将其转换为 Ooxml。生成的 ooxml 如下所示:

<w:r> <w:rPr> <w:b /> <w:i /> <w:u /> </w:rPr> <w:instrText xml:space="preserve">string of text</w:instrText> </w:r>

(我可以在控制台日志中看到 ooxml 字符串)。

代码将其插入文档后,它会变成粗体和斜体,但没有下划线。我尝试过使用生成代码的函数,例如删除 w:u 和/>:

之间的空格
<w:r> <w:rPr> <w:b/>  <w:i/> <w:u/> </w:rPr> <w:instrText xml:space="preserve">string of text</w:instrText> </w:r>

我尝试删除这些标签上的尾部反斜杠,但这破坏了 range.insertOoxml() 调用。我还尝试添加 w:val="single"属性,因为我不确定 val 是否是必需的,即:

<w:r> <w:rPr> <w:b />  <w:i /> <w:u w:val="single" /> </w:rPr> <w:instrText xml:space="preserve">string of text</w:instrText> </w:r>

此刻我很困惑。代码对于使用什么标签是不可知的——它不关心它是 b、i 还是 u。我明白<w:b /><w:i />是切换开关和 <w:u />可能不是——我需要以不同的方式处理这个问题吗?还有其他人遇到过这个问题吗?Ooxml 是否有问题可以指出?

谢谢。

编辑:为了澄清,我最初包含的只是隐藏部分内文本的格式。下面是代码创建的完整 OoXml。我将原始格式化文本之前和之后的代码分开,以便您可以看到它适合整个 OoXml 代码的位置:

在格式化文本字符串之前:

<pkg:package xmlns:pkg='http://schemas.microsoft.com/office/2006/xmlPackage'><pkg:part pkg:name='/_rels/.rels' pkg:contentType='application/vnd.openxmlformats-package.relationships+xml' pkg:padding='512'><pkg:xmlData><Relationships xmlns='http://schemas.openxmlformats.org/package/2006/relationships'><Relationship Id='rId1' Type='http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument' Target='word/document.xml'/></Relationships></pkg:xmlData></pkg:part><pkg:part pkg:name='/word/document.xml' pkg:contentType='application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml'><pkg:xmlData><w:document xmlns:w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' >
<w:body><w:p><w:r> <w:fldChar w:fldCharType='begin' /> </w:r> <w:r><w:rPr><w:color w:val='C00000'/></w:rPr><w:instrText xml:space="preserve">
"XE Startindex_1_id_000014_e"</w:instrText> </w:r>

格式化文本字符串:

<w:r> <w:rPr> <w:b /> <w:i /> <w:u /> </w:rPr> <w:instrText xml:space="preserve">string of text</w:instrText> </w:r>

格式化文本字符串之后:

<w:r><w:rPr><w:color w:val='C00000'/></w:rPr><w:instrText xml:space="preserve">"XE Endindex_1_id_000014"</w:instrText> </w:r> <w:r> <w:fldChar w:fldCharType='end' /> </w:r></w:p></w:body></w:document></pkg:xmlData></pkg:part></pkg:package>

最佳答案

虽然我不太确定“隐藏部分”的要求,但这里有两种 Open XML 标记变体,Word 将它们呈现为粗体、斜体和下划线文本。

让我们从普通文本开始,您将使用 w:t 元素。但是,下面的文本并未隐藏。如果您想隐藏它,则必须将 w:vanish 元素添加到 w:rPr 中。在这种情况下,Word 将呈现一条细虚线,并且不显示正常的下划线(无论如何都不应该在专业排版文档中使用)。

    <w:p>
<w:r>
<w:rPr>
<w:b/>
<w:i/>
<w:u w:val="single"/>
</w:rPr>
<w:t>string of text</w:t>
</w:r>
</w:p>

在您的问题中,您使用的是 w:instrText 元素,该元素通常是复杂字段的一部分。因此,下一个示例显示了一个复杂的字段:

    <w:p>
<w:r>
<w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r>
<w:rPr>
<w:b/>
<w:i/>
<w:u w:val="single"/>
</w:rPr>
<w:instrText>string of text</w:instrText>
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<!--
Note that Word will insert a w:r with an error message (Bookmark not found)
at this point, if you ever update fields.
-->
<w:r>
<w:fldChar w:fldCharType="end"/>
</w:r>
</w:p>

字段代码通常不会显示,因此文本被隐藏。但是,如果您更新字段,Word 将在您放置字段的位置显示一条错误消息。

在您的问题中,您没有将 w:r 元素与 w:fldChar 子元素一起包含在内,因此您的文本将始终可见并带有下划线。此外,Word 会将 w:instrText 转换为 w:t,因此您将回到我的第一个示例。

更新2020-03-12

如果您想创建索引,如果您使用内置功能来标记条目并插入索引并显示段落标记,那么您将在 Word 中看到以下内容:

Word Index

如果不显示段落标记,则用于标记条目的字段将被隐藏:

enter image description here

我刚刚手动格式化了大括号中的文本。需要注意的关键是,这是一个实际的 XE(索引条目)字段。因此,您需要为实际字段生成标记(如我的第二个示例所示)并确保该字段如下所示(使用第一段作为示例):

    <w:p>
<w:r>
<w:t>This is some</w:t>
</w:r>

<!-- Your field begins here -->

<w:r>
<w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r>
<w:instrText xml:space="preserve"> XE "</w:instrText>
</w:r>
<w:r>
<w:rPr>
<w:i/>
</w:rPr>
<w:instrText>Defoe</w:instrText>
</w:r>
<w:r>
<w:instrText xml:space="preserve">, Daniel\; </w:instrText>
</w:r>
<w:r>
<w:rPr>
<w:b/>
</w:rPr>
<w:instrText>Moby Dick</w:instrText>
</w:r>
<w:r>
<w:instrText xml:space="preserve">" </w:instrText>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end"/>
</w:r>

<!-- Your field ends here -->

<w:r>
<w:t xml:space="preserve"> text.</w:t>
</w:r>
</w:p>

请注意,您必须在字段代码中转义冒号 (:) 和分号 (;)。

关于javascript - Ooxml 中不显示下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60516175/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com