CSV文件导出工具
前言
在一般公司后台系统中一般都会有导出excel或者csv的需求,或者做sass后台,也会有用户数据导出的需求。如果只是重心在于数据本身,我们一般都会推荐导出文件时csv文件,体积更小。
- 支持续写文件
- 支持自定义保留标头
csv 对于数字,数字大于15位的,用wps打开会直接截断,15位的后面变成0,文件本身没有问题,现兼容数字文本的正常显示
使用
安装
Install-Package Qin.CsvRelevant -Version 1.1.1.2
public void ConfigureServices(IServiceCollection services)
{
services.AddCsvGenerate();
}
private ICsvGenerate _csvGenerate;
public TestA(ICsvGenerate iCsvGenerate)
{
_csvGenerate = iCsvGenerate;
}
1.自定义csv文件表格列
List<dynamic> listData = new List<dynamic>();
listData.Add(new { name = "Sully1", Poe = 12333 });
listData.Add(new { name = "Ben1", Poe = 12333 });
listData.Add(new { name = "Fiy1", Poe = 12333 });
Dictionary<string, string> column = new Dictionary<string, string>();
column.Add("MyName", "name");
column.Add("MyOrderId", "Poe");
var charBytes = await _csvGenerate.WriteAsync(listData, column, "xxx\\demo1.csv");
2.通过扩展方法,流畅的设置表格列和字段映射关系
List<ExportEntity> listData2 = GetList();
var culumn2 = _csvGenerate.Map<ExportEntity>("MyOrderId", a => a.Orderid)
.Map<ExportEntity>("MyName", a => a.Name)
.Map<ExportEntity>("MyName2", a => a.Name2)
.Map<ExportEntity>("MyName3", a => a.Name3)
.Map<ExportEntity>("State", a => a.State)
.Map<ExportEntity>("Money", a => a.Money)
.Map<ExportEntity>("Isdel", a => a.Isdel)
.Map<ExportEntity>("Area", a => a.Area).BuildDictionary();
_csvGenerate.ForMat = (column, fieldname, fieldvalue) =>
{
if (fieldvalue is null)
return fieldvalue;
if (column == "Date" && fieldname == "CreateTime")
{
fieldvalue = fieldvalue is DateTime s1 ? s1.ToString("yyyy-MM-dd") : fieldvalue;
}
return fieldvalue;
};
var charBytes2 = await _csvGenerate.WriteAsync(listData2, culumn2, "xxx\\demo2.csv");
ForMat 属性可以指定,当数据源的某些字段和字段值需要进行转换时,可以使用 ForMat
3.实体标签映射表格列
public class ExportEntity
{
[Qin.CsvRelevant.ExportColumn("Myorderid")]
public int Orderid { get; set; }
[Qin.CsvRelevant.ExportColumn("myname")]
public string Name { get; set; }
[Qin.CsvRelevant.ExportColumn("Date")]
public DateTime CreateTime { get; set; }
}
// Split line
List<ExportEntity> listData = new List<ExportEntity>();
listData.Add(new ExportEntity { Name = "Sully", Orderid = 12333 });
listData.Add(new ExportEntity { Name = "Ben", Orderid = 12333 });
listData.Add(new ExportEntity { Name = "Fiy", Orderid = 12333 });
var charBytes0 = await _csvGenerate.WriteByAttributeAsync(listData, "xxx\\demo3.csv");
写入 CSV 文件时,当"文件名"字段为 null 或默认值时,将返回字节 [],但不会生成该文件
仓库地址:https://github.com/Qintai/Qin.CsvRelevant
更新
- 1.1.1.4
新增方法:WritePhysicalFile。结合Dapper一起使用,数据超过十几万应该将文件生成在硬盘,避免内存挤爆。
[HttpGet]
public async Task<IActionResult> Export6()
{
var name = nameof(Export6);
Console.WriteLine(name);
List<ExportEntity> listData = new List<ExportEntity>();
listData.Add(new ExportEntity { Name = "bob", Orderid = 12333, State = 1 });
string localexportpath = "Export";
var path = Path.Combine(localexportpath);
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
var connstr = await System.IO.File.ReadAllTextAsync("D://connstr.txt");
var sqlstr = await System.IO.File.ReadAllTextAsync("D://sqlstr.txt");
using var connStr = new MySqlConnector.MySqlConnection(connstr);
connStr.Open();
var reader = connStr.ExecuteReader(sqlstr);
var func = reader.GetRowParser<ExportEntity>();
await _csvGenerate.WritePhysicalFile($"{localexportpath}\\{name}.csv", reader, (reader) =>
{
var model = func(reader);
return model;
});
return Ok($"{path} build success");
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具