如何使用Word Automation在段落中添加下标字符?

2023-11-27

我正在开发一个 C# 程序,该程序使用 Microsoft Word 14.0 对象库创建 .doc 文件,向其中添加段落并保存。有一个带有按钮的小表单,可以执行所描述的操作(请参阅下面的代码)。这部分没有问题。

Problem:

创建的 Word 文件中的当前文本如下:

一些文本 beff = 3.0

我需要完成的是创建一个段落,其中有下标字符。(在上面的段落中,字母“eff”应该带有下标):

enter image description here

最终文档将包含大约 100 行,如上所示,并带有不同的下标字符。

我找到了一种用行为整个段落添加下标的方法,

paragraph1.Range.Font.Subscript = 1;

但找不到在单独的角色上实现它的方法。

我还知道 Unicode 中有下标字母和数字可以使用,但不幸的是,Unicode 没有下标格式的完整字母表,因此这也不是一个选项。

问题: 有没有办法让我实现目标并在新创建的 Word 文档的段落内的下标中插入类似“eff”的内容?

示例代码:

private void btnReport_Click(object sender, EventArgs e)
    {

        Word._Application oWord;
        Word._Document oDoc;
        oWord = new Word.Application();
        oDoc = oWord.Documents.Add();


        var paragraph1 = oDoc.Content.Paragraphs.Add();
        paragraph1.Range.Text = "Some text   beff = 3.0";

        SaveFileDialog saveFileDialog1 = new SaveFileDialog();
        saveFileDialog1.Filter = "Word document|*.doc";
        saveFileDialog1.Title = "Save the Word Document";
        if (DialogResult.OK == saveFileDialog1.ShowDialog())
        {
            string docName = saveFileDialog1.FileName;
            if (docName.Length > 0)
            {
                object oDocName = (object)docName;
                oDoc.SaveAs(ref oDocName);
            }
        }
        oWord.Quit();
    }

创建一个 Word 文档并添加带有下标/上标的文本,然后解压缩 .docx 以检查其 XML 内容,您会注意到包含下标/上标的文本被放置在单独的run元素。

实现这一目标的一种方法是OpenXML SDK下载并安装SDK后,您可以使用以下代码:

using System;
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;

namespace OpenXML
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var doc = WordprocessingDocument.Create("C:\\Subscript.docx", WordprocessingDocumentType.Document))
            {
                MainDocumentPart mainPart = doc.AddMainDocumentPart();

                mainPart.Document = new Document();
                Body body = mainPart.Document.AppendChild(new Body());
                Paragraph p = body.AppendChild(new Paragraph());

                p.AppendChild(AddRun(false, "Some text   b "));
                p.AppendChild(AddRun(true, "eff"));
                p.AppendChild(AddRun(false, "= 3.0"));
            }

            Console.WriteLine("Done...");
            Console.ReadLine();
        }

        public static Run AddRun(bool isSubscript, string text)
        {
            Run run = new Run();
            if (isSubscript)
            {
                var props = new RunProperties();
                var fontSize = new FontSizeComplexScript() { Val = "20" };
                var vAlignment = new VerticalTextAlignment() { Val = VerticalPositionValues.Subscript };

                props.Append(fontSize);
                props.Append(vAlignment);
                run.Append(props);
            }
            run.Append(new Text(text));
            return run;
        }
    }
}

EDIT:

这是一个互操作解决方案:

    using WordNS = Microsoft.Office.Interop.Word;

    WordNS.Document doc = _application.ActiveDocument;
    WordNS.Paragraph p = doc.Paragraphs.Add();
    p.Range.Text = "Some text   beff = 3.0";

    int start = p.Range.Text.IndexOf("eff");
    int end = p.Range.Text.IndexOf("=");

    WordNS.Range range = doc.Range(start, end);
    range.Select();

    WordNS.Selection currentSelection = _application.Selection;
    currentSelection.Font.Subscript = 1;

    doc.SaveAs2("C:\\SubscriptInterop.docx");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Word Automation在段落中添加下标字符? 的相关文章

  • VLC 媒体播放器有 C# 界面吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否可以使用 C 控制台应用程序中的包装器从 VLC 播放中当前播放的文件中读取曲目统计信息 时间 标
  • 使用链表进行堆排序

    我想知道是否有人曾经使用链表进行堆排序 如果他们可以提供代码 我已经能够使用数组进行堆排序 但尝试在链表中进行排序似乎不切实际 而且在你知道的地方很痛苦 我必须为我正在做的项目实现链接列表 任何帮助将不胜感激 我也用C 答案是 你不想在链表
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • 如何编写一个接受 int 或 float 的 C 函数?

    我想用 C 语言创建一个扩展 Python 的函数 该函数可以接受 float 或 int 类型的输入 所以基本上 我想要f 5 and f 5 5 成为可接受的输入 我认为我不能使用if PyArg ParseTuple args i v
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • 关于虚函数的成本

    如果我在循环中调用虚拟函数 1000 次 我会承受 1000 次还是仅一次的 vtable 查找开销 编译器也许能够优化它 例如 以下内容 至少在概念上 很容易优化 Foo f new Foo for int i 0 i lt 1000 i
  • Android NDK Native方法未找到错误

    我正在尝试使用本机代码构建 android 应用程序 所以我想测试 ndk 是否成功运行 当我尝试运行我的第一个 hello world 项目时 日志猫说 01 21 23 30 06 780 E AndroidRuntime 939 FA
  • 打开受密码保护的 sqlite 数据库

    我创建了一个受密码保护的 sqlite 数据库 我希望能够查看数据库 以便在项目开发过程中检查是否正确插入了内容 我已经下载了 sqlite 数据库浏览器 但这似乎不允许您打开加密数据库 有没有一种方法可以打开数据库文件 感谢您的任何帮助
  • 存在哪些 CLR/.NET 字节码工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我非常了解用于操作 生成 反编译 JVM 字节码的 Java 工具 ASM cglib jad 等 CLR 字节码有哪些类似的工具 人们会为 CLR
  • 如何导入单个 Lodash 函数?

    使用 webpack 我正在尝试导入isEqual since lodash似乎正在进口一切 我尝试执行以下操作但没有成功 import isEqual from lodash import isEqual from lodash lang
  • 当 JS 需要 PHP 变量时,如何将 javascript 与 PHP 分开?

    下面是我在 jquery 和 PHP 中看到的代码的一小段 请注意第 5 行的 PHP 部分 我通常将 javascript 放入单独的文件中 那么我如何才能将 JS 保存在单独的文件中 但在需要时仍然使用 PHP 如下所示 when th
  • [[maybe_unused]] 在成员变量上,GCC 警告(错误地?)该属性被忽略

    在下面的example struct Foo maybe unused int member 1 void bar maybe unused int local 0 int main int argc char argv Foo f f b
  • 选择每组中倒数第二条记录

    这里有张桌子Remark包含如下所示的数据 SerialNo RemarkNo Desp 10 1 rainy 10 2 sunny 11 1 sunny 11 2 rainy 11 3 cloudy 11 4 sunny 12 1 rai
  • “无法锁定变量”SSIS 错误

    对于每小时运行的预定 SSIS 包 我随机收到错误 最有趣的是 如果我删除检查点文件并再次运行该包 它工作正常 但错误可能会在将来的运行中出现 我不知道为什么会发生这种情况 这是完整的错误消息 以用户身份执行 UserNameChanged
  • 多维数组的嵌套 ng-repeat

    我在尝试着使用 ng repeat 指令在 html 中显示二维数组 我可以显示第一个维度 表行 但第二个维度 表数据 不起作用 我见过很多使用对象 JSON 键值数据结构的解决方案 但我找不到有效的东西对于仅包含其他数组的数组 以下是一些
  • 在 pandas python 中将指数或科学数转换为整数

    我是Python的初学者 试图从数据集中获取具有最高idmb评级和最高总总额的行 但我的gross total值不是整数 我如何将其转换为整数 以及如何获得执行统计功能的特定值 import pandas as pd dataset pd
  • 检测挤压的最简单方法

    这是一个WEB APP不是本机应用程序 请不要使用 Objective C NS 命令 所以我需要检测 iOS 上的 捏 事件 问题是我看到的用于执行手势或多点触摸事件的每个插件或方法 通常 都是使用 jQuery 并且是针对阳光下每个手势
  • 将二进制文件安装到 /bin、/sbin、/usr/bin 和 /usr/sbin 中,与 --prefix 和 DESTDIR 交互

    大多数使用 Autotools 的软件包都是用户级实用程序 或者至少具有足够高的级别 可以完全在 usr 或低到完全低于 usr 我正在编写一个包 需要将一些文件安装到 bin 一些进入 sbin usr bin and usr sbin
  • 安全且区域设置敏感地解析数字

    Java s NumberFormat1 非线程安全 可以通过ThreadLocal 2 不方便正确使用对于最简单的用例 当我知道字符串是否应包含 int long 或 double 并且想要一个如下 API 时 int parseInt
  • Python:在 Windows 上的 Ubuntu 上通过 Bash 运行 pygame

    我最近安装并一直在玩Windows 上 Ubuntu 上的 Bash 在大多数情况下 它效果很好 我正在尝试通过 BUW 运行 pygame 脚本 但它不会在弹出窗口中渲染图形 相反 它似乎包含在 bash 窗口中 如下所示 这是 pyga
  • Qt Designer - 如何将信号连接到静态函数?

    好的 我正在使用 Qt Designer 构建 GUI 我已经设法弄清楚如何制作菜单栏 并向菜单栏添加了一些操作 但现在我需要连接这些操作以使它们执行某些操作 具体来说 在我的文件菜单上 我有简单的打开操作 我希望此操作运行一个调用我的 Q
  • Docker - 容器和主机之间的 ulimit 差异

    我以为docker容器与主机共享这些属性 然而 一方面docker楼主 有这些ulimit设置 ulimit a core file size blocks c 0 data seg size kbytes d unlimited sche
  • 我可以创建一个“除内部类型之外的密封类型”吗

    我想创建一个可以由同一程序集中的类型继承的类型 但不能从程序集外部继承 我确实希望该类型在程序集外部可见 这可能吗 您可以将构造函数设为内部 public class MyClass internal MyClass 每个从基类派生的类都必
  • 如何在 PHP 中对 UTF-8 字符串数组进行排序?

    需要按 utf 8 对单词进行排序的帮助 例如 我们有来自比利时的 5 个城市 array array Borgloon Thuin Lennik ghez e Aubel sort array Expected Aubel Borgloo
  • 如何使用Word Automation在段落中添加下标字符?

    我正在开发一个 C 程序 该程序使用 Microsoft Word 14 0 对象库创建 doc 文件 向其中添加段落并保存 有一个带有按钮的小表单 可以执行所描述的操作 请参阅下面的代码 这部分没有问题 Problem 创建的 Word