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

C# WinForm:从Excel复制单元格完整数值至DataGridView的方法

解决Excel复制原始数值到C# WinForm DataGridView的问题

当Excel单元格设置了显示格式(比如保留两位小数),直接用Clipboard.GetText()只能拿到格式化后的显示值,无法获取单元格的原始数值。要解决这个问题,需要读取剪贴板中Excel存储的原始数据,而非纯文本格式。

解决方案:解析剪贴板的HTML格式数据

Excel复制单元格时,会在剪贴板中同时存储HTML格式的数据,其中<td>标签的x:num属性保存了单元格的原始数值。我们可以通过解析这段HTML提取原始值。

步骤1:安装HtmlAgilityPack包

先在项目中安装HtmlAgilityPack NuGet包,用于解析HTML内容。

步骤2:编写代码读取并解析剪贴板数据

using System;
using System.Windows.Forms;
using System.Globalization;
using HtmlAgilityPack;

// 检查剪贴板是否包含HTML格式数据
if (Clipboard.ContainsData(DataFormats.Html))
{
    string htmlContent = Clipboard.GetText(TextDataFormat.Html);
    HtmlDocument htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(htmlContent);

    // 查找包含x:num属性的td节点
    var targetTd = htmlDoc.DocumentNode.SelectSingleNode("//td[@x:num]");
    if (targetTd != null)
    {
        // 获取原始数值字符串
        string originalNumStr = targetTd.Attributes["x:num"].Value;
        
        // 根据系统区域转换为数值类型(示例用不变文化,若你的系统用逗号做小数分隔符,需替换为对应区域Culture)
        if (decimal.TryParse(originalNumStr, NumberStyles.Float | NumberStyles.AllowThousands, 
                            CultureInfo.InvariantCulture, out decimal originalValue))
        {
            // 将原始值添加到DataGridView
            dataGridView1.Rows.Add(originalValue);
        }
    }
}

说明

  • 若你的系统区域设置使用逗号作为小数分隔符(如土耳其语区域),解析时需将CultureInfo.InvariantCulture替换为CultureInfo.GetCultureInfo("tr-TR")(或对应区域代码)。
  • 该方法仅适用于Excel复制的内容,若剪贴板内容来自其他软件,可能不包含x:num属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 07:45:14