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

C#如何将剪贴板中的文本内容粘贴导入到DataTable中?

C# 剪贴板文本内容导入DataTable 实现方案

C#开发过程中,不少开发者会遇到需要将剪贴板中的文本内容(常见为从Excel、CSV文件中复制的结构化表格内容)粘贴导入到DataTable的需求,此前找不到合适的开箱即用实现,这里整理了一套可直接复用的方案:

前置依赖

  • 需引用命名空间:
    • System.Data
    • WinForm项目引用System.Windows.Forms,WPF项目引用System.Windows
    • System.Linq

核心实现代码

/// <summary>
/// 将剪贴板文本转换为DataTable
/// </summary>
/// <param name="useFirstRowAsHeader">是否将第一行作为表头</param>
/// <param name="separator">字段分隔符,默认制表符适配Excel复制内容</param>
/// <returns>转换后的DataTable</returns>
public static DataTable ClipboardToDataTable(bool useFirstRowAsHeader = true, char separator = '\t')
{
    DataTable dt = new DataTable();
    // 获取剪贴板文本
    string clipboardText = Clipboard.GetText();
    if (string.IsNullOrWhiteSpace(clipboardText))
        return dt;

    // 按换行分割行,过滤空行
    var rows = clipboardText.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries).ToList();
    if (rows.Count == 0)
        return dt;

    // 处理表头
    var headerColumns = rows[0].Split(separator);
    foreach (var col in headerColumns)
    {
        dt.Columns.Add(useFirstRowAsHeader ? col.Trim() : $"Column{dt.Columns.Count + 1}");
    }

    // 处理数据行
    int startRowIndex = useFirstRowAsHeader ? 1 : 0;
    for (int i = startRowIndex; i < rows.Count; i++)
    {
        var fields = rows[i].Split(separator);
        var dr = dt.NewRow();
        for (int j = 0; j < Math.Min(fields.Length, dt.Columns.Count); j++)
        {
            dr[j] = fields[j].Trim();
        }
        dt.Rows.Add(dr);
    }

    return dt;
}

注意事项

以上实现为基础版本,适配无特殊格式的剪贴板表格内容,如果你的业务场景中存在字段内容包含分隔符、转义引号等情况,需要额外增加字段解析逻辑避免分割错误。


内容的提问来源于stack exchange,提问作者Felipe La Rotta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 09:39:00