using CsvHelper; using CsvHelper.Configuration; using Microsoft.Win32; using System.Collections.Generic; using System.Data; using System.Globalization; using System.IO; namespace Cowain.Bake.Common.Core { public class CSVHelper { public static void WriteDataTableToCsv(IEnumerable list) { string filePath = GetFilePath(); if (string.IsNullOrEmpty(filePath)) { return; } using (var writer = new StreamWriter(filePath)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.WriteRecords(list); } } //列头是中文,所有字段都写入 public static void WriteDataTableToCsv(IEnumerable list, List nameCols) { string filePath = GetFilePath(); if (string.IsNullOrEmpty(filePath)) { return; } var config = new CsvConfiguration(CultureInfo.InvariantCulture) { // 设置列头编码为UTF8以支持中文 Encoding = System.Text.Encoding.UTF8, // 设置不写入列头 HasHeaderRecord = false }; using (var writer = new StreamWriter(filePath, false, System.Text.Encoding.UTF8)) using (var csv = new CsvWriter(writer, config)) { // 写入列头,使用中文列名 foreach(var col in nameCols) { csv.WriteField(col); } csv.NextRecord(); // 写入数据行 csv.WriteRecords(list); } } // 将List的特定列写入CSV文件的方法 public static void WriteDataTableToCsv(IEnumerable list, IEnumerable columnsToSave) { string filePath = GetFilePath(); if (string.IsNullOrEmpty(filePath)) { return; } var config = new CsvConfiguration(CultureInfo.InvariantCulture) { // 设置列头编码为UTF8以支持中文 Encoding = System.Text.Encoding.UTF8, // 设置不写入列头 HasHeaderRecord = false }; using (var writer = new StreamWriter(filePath, false, System.Text.Encoding.UTF8)) using (var csv = new CsvWriter(writer, config)) { // 写入列头 foreach (var columnName in columnsToSave) { csv.WriteField(columnName); } csv.NextRecord(); // 写入特定列数据 foreach (var person in list) { foreach (var columnName in columnsToSave) { var property = typeof(T).GetProperty(columnName); if (property != null) { csv.WriteField(property.GetValue(person)); } } csv.NextRecord(); } } } static string GetFilePath() { string filePath = ""; //创建一个保存文件式的对话框 SaveFileDialog saveFileDialog = new SaveFileDialog(); //设置保存的文件的类型,注意过滤器的语法 saveFileDialog.Filter = "CSV|*.csv"; if (saveFileDialog.ShowDialog() == true) { filePath = saveFileDialog.FileName; } return filePath; } public static void WriteMap(IEnumerable list, string filePath) where TMap : ClassMap { var config = new CsvConfiguration(CultureInfo.InvariantCulture) { // 设置列头编码为UTF8以支持中文 Delimiter = ",", HasHeaderRecord = true, Encoding = System.Text.Encoding.UTF8 }; if (File.Exists(filePath)) { config.HasHeaderRecord = false; // 获取字段描述作为列头 } using (var writer = new StreamWriter(filePath, true, System.Text.Encoding.UTF8)) using (var csv = new CsvWriter(writer, config)) { // 注册自定义映射 //csv.Context.RegisterClassMap(); csv.Context.RegisterClassMap(); // 写入记录 csv.WriteRecords(list); } } public static void WriteMap(IEnumerable list ) where TMap : ClassMap //where TMap : ClassMap // 约束:必须是 ClassMap 或其子类 { string filePath = GetFilePath(); if (string.IsNullOrEmpty(filePath)) { return; } WriteMap(list, filePath); } // 将List的特定列写入CSV文件的方法 public static void WriteDataTableToCsv(IEnumerable list, IEnumerable columnsToSave, IEnumerable columnsToShow) { string filePath = GetFilePath(); if (string.IsNullOrEmpty(filePath)) { return; } var config = new CsvConfiguration(CultureInfo.InvariantCulture) { // 设置列头编码为UTF8以支持中文 Encoding = System.Text.Encoding.UTF8, HasHeaderRecord = false }; using (var writer = new StreamWriter(filePath, false, System.Text.Encoding.UTF8)) using (var csv = new CsvWriter(writer, config)) { // 写入列头 foreach (var columnName in columnsToShow) { csv.WriteField(columnName); } csv.NextRecord(); // 写入特定列数据 foreach (var person in list) { foreach (var columnName in columnsToSave) { var property = typeof(T).GetProperty(columnName); if (property != null) { csv.WriteField(property.GetValue(person)); } } csv.NextRecord(); } } } // 将List的特定列写入CSV文件的方法 public static void WriteDataTableToCsv(IEnumerable list, IEnumerable columnsToSave, IEnumerable columnsToShow, string filePath) { bool isFileExists = false; var config = new CsvConfiguration(CultureInfo.InvariantCulture) { // 设置列头编码为UTF8以支持中文 Encoding = System.Text.Encoding.UTF8, HasHeaderRecord = false }; if (File.Exists(filePath)) { // 获取字段描述作为列头 isFileExists = true; } using (var writer = new StreamWriter(filePath, true, System.Text.Encoding.UTF8)) using (var csv = new CsvWriter(writer, config)) { // 写入列头 if (!isFileExists) { foreach (var columnHeader in columnsToShow) { csv.WriteField(columnHeader); } csv.NextRecord(); } // 写入特定列数据 foreach (var person in list) { foreach (var columnName in columnsToSave) { var property = typeof(T).GetProperty(columnName); if (property != null) { csv.WriteField(property.GetValue(person)); } } csv.NextRecord(); } } } // 将DataTable写入CSV文件的方法 public static void WriteDataTableToCsv(DataTable dataTable) { string filePath = GetFilePath(); if (string.IsNullOrEmpty(filePath)) { return; } using (var writer = new StreamWriter(filePath)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { // 写入表头 foreach (DataColumn column in dataTable.Columns) { csv.WriteField(column.ColumnName); } csv.NextRecord(); // 写入数据行 foreach (DataRow row in dataTable.Rows) { for (var i = 0; i < dataTable.Columns.Count; i++) { csv.WriteField(row[i]); } csv.NextRecord(); } } } } }