You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编程模拟「仅保留文本」粘贴?C#处理docx显示文本需求

解决Docx「所见即所得」文本提取问题及剪贴板纯文本生成逻辑

一、获取Docx中所见即所得的文本(C#实现思路)

你遇到的问题本质是Docx的底层文本和字符格式分离存储:底层xml里的文本是原始输入内容,但显示时会应用Run级别的格式(比如大小写转换)。要得到和显示一致的文本,必须在提取时应用这些字符格式规则。

核心处理逻辑

用OpenXML SDK遍历Docx内容时,针对每个文本Run,检查其RunProperties中的格式属性,对原始文本做对应转换:

  • w:allCaps="true":将文本转为全大写
  • w:smallCaps="true":将文本转为小型大写(纯文本场景直接转大写即可)
  • w:capitalize="true":将每个单词的首字母转为大写

示例代码片段

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

public string GetVisibleTextFromDocx(string filePath)
{
    var visibleText = new StringBuilder();
    using (var doc = WordprocessingDocument.Open(filePath, false))
    {
        var body = doc.MainDocumentPart.Document.Body;
        foreach (var para in body.Elements<Paragraph>())
        {
            foreach (var run in para.Elements<Run>())
            {
                var runProps = run.RunProperties;
                var text = run.InnerText;
                if (runProps != null)
                {
                    // 处理全大写格式
                    if (runProps.AllCaps != null && runProps.AllCaps.Value)
                    {
                        text = text.ToUpperInvariant();
                    }
                    // 处理首字母大写格式
                    else if (runProps.Capitalize != null && runProps.Capitalize.Value)
                    {
                        text = string.Join(" ", text.Split(' ')
                            .Select(word => !string.IsNullOrEmpty(word) ? char.ToUpper(word[0]) + word.Substring(1) : word));
                    }
                    // 处理小型大写格式
                    else if (runProps.SmallCaps != null && runProps.SmallCaps.Value)
                    {
                        text = text.ToUpperInvariant();
                    }
                }
                visibleText.Append(text);
            }
            visibleText.AppendLine();
        }
    }
    return visibleText.ToString();
}

注:此示例仅处理大小写相关格式,若有其他影响文本显示的格式需求,可自行扩展处理逻辑。

二、剪贴板纯文本的生成逻辑

当你在Word中复制文本时,Word会向剪贴板写入多种格式的数据,其中纯文本格式的内容是Word实时应用所有字符格式后的结果,而非直接读取底层xml的原始文本:

  1. Word遍历选中的文本段落和Run,逐个处理每个Run的格式规则;
  2. 对每个Run的原始文本应用格式转换(比如全大写、首字母大写等);
  3. 将转换后的所有文本片段拼接,生成最终纯文本内容写入剪贴板;
  4. Ctrl+Shift+V粘贴时,系统读取的就是这个已完成格式转换的纯文本,所以和Word显示内容一致。

内容的提问来源于stack exchange,提问作者Kazimieras Jasaitis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:35:15