C# Visual Studio从3个RichTextBox提取内容生成CSV文件的实现方法
C# 实现多RichTextBox同序行拼接CSV方案
直接替换你现有逻辑即可,以下是可运行的完整实现:
var date = DateTime.Today.ToString("yyyy-MM-dd"); var csv = new StringBuilder(); // 写入CSV表头 csv.AppendLine("FirstName,LastName,Country"); // 取出三个RichTextBox的行数据数组 string[] firstNames = rtextbox_firstname.Lines; string[] surNames = rtextbox_surname.Lines; string[] countries = rtextbox_country.Lines; // 取三个数组的最大行数作为循环上限,避免行数不一致导致漏处理 int maxLines = Math.Max(Math.Max(firstNames.Length, surNames.Length), countries.Length); for (int i = 0; i < maxLines; i++) { // 按索引取对应行内容,索引超出数组长度时默认返回空字符串 string firstName = i < firstNames.Length ? EscapeCsvField(firstNames[i].Trim()) : ""; string surName = i < surNames.Length ? EscapeCsvField(surNames[i].Trim()) : ""; string country = i < countries.Length ? EscapeCsvField(countries[i].Trim()) : ""; // 拼接为单条CSV行写入StringBuilder csv.AppendLine($"{firstName},{surName},{country}"); } // 自动获取桌面路径拼接文件地址,避免硬编码适配不同设备 var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), $"run this _{date}.csv"); File.WriteAllText(path, csv.ToString(), Encoding.UTF8);
新增CSV字段转义方法,避免内容包含逗号、引号、换行时打乱CSV列结构:
/// <summary> /// 转义CSV特殊字符 /// </summary> private string EscapeCsvField(string field) { if (string.IsNullOrEmpty(field)) return string.Empty; // 包含特殊字符的字段需要用双引号包裹,内部双引号替换为两个双引号做转义 if (field.Contains(',') || field.Contains('"') || field.Contains('\n') || field.Contains('\r')) { return $"\"{field.Replace("\"", "\"\"")}\""; } return field; }
实现说明
- 你原有代码中声明的
excelFile变量未被使用,如果不需要操作Excel文件可以直接删除 - 用
Path.Combine拼接路径,避免硬编码盘符、用户名导致的跨设备兼容性问题 - 取最大行数做循环边界,三个控件行数不一致时,缺失的字段会自动填充空字符串不会报错
- 用
File.WriteAllText代替AppendAllText,避免重复运行程序时内容追加到旧文件末尾,如果需要追加写入可以改回AppendAllText
内容的提问来源于stack exchange,提问作者Mohamed Shahin
相关产品推荐
相关产品推荐

