如何在C#中从List<string>导出Excel?自定义分隔符处理
如何将含自定义分隔符的字符串列表导出为Excel表格
我有一个如下内容的
List<string>:"Food"<|||>"Candy"<|||>"15" "System"<|||>"IOS, Android"<|||>"2023" "Fruit"<|||>"Apple,Orange "<|||>"100" "Wine"<|||>"Whisky"<|||>"250"我想用特殊字符
<|||>作为分隔符,将其导出为包含3列的Excel格式。但不确定能否实现,因为Excel通常默认识别逗号作为分隔符,且部分单元格内容本身包含逗号,这增加了难度。现有代码如下:var lines = new List<string>(); lines.AddRange(new[] {"Food<|||>Candy<|||>15","System<|||>IOS, Android<|||>2023","Fruit<|||>Apple,Orange <|||>100","Wine<|||>Whisky<|||>250"}); //export to excel请问如何实现上述导出需求?
方法1:生成符合规范的CSV文件(推荐,无需额外库)
CSV格式本身支持用双引号包裹含特殊字符(如逗号、双引号)的字段,不会出现内容拆分错误。你可以先将每个字符串按<|||>拆分,再按照CSV规则格式化每行内容:
using System.IO; using System.Linq; // 处理每行数据,拆分后按CSV规范格式化字段 var csvLines = lines.Select(line => { var parts = line.Split(new[] {"<|||>"}, StringSplitOptions.None); // 对包含逗号或双引号的字段,用双引号包裹,内部双引号转义为两个双引号 var formattedParts = parts.Select(part => part.Contains(',') || part.Contains('"') ? $"\"{part.Replace("\"", "\"\"")}\"" : part); return string.Join(",", formattedParts); }); // 写入CSV文件 File.WriteAllLines("output.csv", csvLines);
生成的CSV文件可直接用Excel打开,含逗号的单元格会被正确识别为单个内容。
方法2:使用Excel操作库(直接生成.xlsx文件)
如果需要直接生成标准Excel文件(.xlsx),可以使用EPPlus或NPOI这类第三方库,以下是EPPlus的实现示例:
- 先安装EPPlus NuGet包:
Install-Package EPPlus
- 编写导出代码:
using OfficeOpenXml; using System.IO; using System.Linq; // EPPlus 5及以上版本需要设置许可证上下文 ExcelPackage.LicenseContext = LicenseContext.NonCommercial; using (var package = new ExcelPackage()) { var worksheet = package.Workbook.Worksheets.Add("Data"); // 遍历所有行,拆分后写入对应单元格 for (int rowIndex = 0; rowIndex < lines.Count; rowIndex++) { var parts = lines[rowIndex].Split(new[] {"<|||>"}, StringSplitOptions.None); for (int colIndex = 0; colIndex < parts.Length; colIndex++) { worksheet.Cells[rowIndex + 1, colIndex + 1].Value = parts[colIndex]; } } // 保存Excel文件 package.SaveAs(new FileInfo("output.xlsx")); }
这种方法无需处理CSV格式细节,直接操作Excel单元格,兼容性和可读性更好。
方法3:生成自定义分隔符文本文件,手动导入Excel
如果不想编写复杂代码,可以先将内容保存为以<|||>为分隔符的文本文件,再手动导入Excel:
- 写入文本文件:
using System.IO; File.WriteAllLines("output.txt", lines);
- Excel导入步骤:
- 打开Excel,点击「数据」选项卡
- 选择「自文本/CSV」,选中生成的
output.txt - 在导入向导中选择「分隔符」,勾选「其他」并输入
<|||>作为分隔符 - 完成导入,内容会自动拆分到3列中
内容的提问来源于stack exchange,提问作者Brian Crist
相关产品推荐
相关产品推荐

