首次提交:添加src文件夹代码
This commit is contained in:
273
Cowain.Bake.Common/Core/CSVHelper.cs
Normal file
273
Cowain.Bake.Common/Core/CSVHelper.cs
Normal file
@@ -0,0 +1,273 @@
|
||||
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<T>(IEnumerable<T> 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<T>(IEnumerable<T> list, List<string> 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<T>(IEnumerable<T> list, IEnumerable<string> 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<T, TMap>(IEnumerable<T> 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<BatteryInfoMap>();
|
||||
csv.Context.RegisterClassMap<TMap>();
|
||||
// 写入记录
|
||||
csv.WriteRecords(list);
|
||||
}
|
||||
}
|
||||
public static void WriteMap<T, TMap>(IEnumerable<T> list ) where TMap : ClassMap //where TMap : ClassMap<T> // 约束:必须是 ClassMap<T> 或其子类
|
||||
{
|
||||
string filePath = GetFilePath();
|
||||
if (string.IsNullOrEmpty(filePath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
WriteMap<T, TMap>(list, filePath);
|
||||
}
|
||||
|
||||
// 将List的特定列写入CSV文件的方法
|
||||
public static void WriteDataTableToCsv<T>(IEnumerable<T> list, IEnumerable<string> columnsToSave, IEnumerable<string> 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<T>(IEnumerable<T> list, IEnumerable<string> columnsToSave, IEnumerable<string> 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user