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
相关产品推荐
相关产品推荐

