Magicodes.IE Csv导入导出

说明

本章主要说明如何使用Magicodes.IE.Csv进行Csv导入导出.

主要步骤

1.安装包Magicodes.IE.Csv

Install-Package Magicodes.IE.Csv


2.使用Magicodes.IE.Csv导出Csv

通过如下代码片段我们将导出的内容通过相应的特性做出相应的处理.

ExporterHeaderAttribute

  • DisplayName:显示名称

  • Format:格式化

  • IsIgnore:是否忽略

public class ExportTestDataWithAttrs{[ExporterHeader(DisplayName = "加粗文本", IsBold = true)]public string Text { get; set; }[ExporterHeader(DisplayName = "普通文本")] public string Text2 { get; set; }[ExporterHeader(DisplayName = "忽略", IsIgnore = true)]public string Text3 { get; set; }[ExporterHeader(DisplayName = "数值", Format = "#,##0")]public decimal Number { get; set; }[ExporterHeader(DisplayName = "名称", IsAutoFit = true)]public string Name { get; set; }/// <summary>/// 时间测试/// </summary>[ExporterHeader(DisplayName = "日期1", Format = "yyyy-MM-dd")]public DateTime Time1 { get; set; }/// <summary>/// 时间测试/// </summary>[ExporterHeader(DisplayName = "日期2", Format = "yyyy-MM-dd HH:mm:ss")]public DateTime? Time2 { get; set; }public DateTime Time3 { get; set; }public DateTime Time4 { get; set; }/// <summary>/// 长数值测试/// </summary>[ExporterHeader(DisplayName = "长数值", Format = "#,##0")]public long LongNo { get; set; }}

通过DTO导出

public async Task ExportHeaderAsByteArray_Test(){IExporter exporter = new CsvExporter();var filePath = GetTestFilePath($"{nameof(ExportHeaderAsByteArray_Test)}.csv");DeleteFile(filePath);var result = await exporter.ExportHeaderAsByteArray(GenFu.GenFu.New<ExportTestDataWithAttrs>());}

3.使用Magicodes.IE.Csv导入Csv

对于csv导入我们可以通过,ImporterHeader Name属性去对应我们的Dto属性.并且可以通过ValueMapping对枚举类型进行相关的映射,并向我们返回相对应的值

public async Task StudentInfoImporter_Test(){var filePath = Path.Combine(Directory.GetCurrentDirectory(), "TestFiles", "Import", "学生基础数据导入.csv");var import = await Importer.Import<ImportStudentDto>(filePath);}
/// <summary>/// 导入学生数据Dto/// </summary>public class ImportStudentDto{/// <summary>///     序号/// </summary>[ImporterHeader(Name = "序号")]public long SerialNumber { get; set; }/// <summary>///     学籍号/// </summary>[ImporterHeader(Name = "学籍号")]public string StudentCode { get; set; }/// <summary>///     姓名/// </summary>[ImporterHeader(Name = "姓名")]public string Name { get; set; }/// <summary>///     身份证号码/// </summary>[ImporterHeader(Name = "身份证号")]public string IdCard { get; set; }/// <summary>///     性别/// </summary>[ImporterHeader(Name = "性别")][ValueMapping("男", 0)][ValueMapping("女", 1)]public Genders Gender { get; set; }/// <summary>///     家庭地址/// </summary>[ImporterHeader(Name = "家庭住址")]public string Address { get; set; }/// <summary>///     家长姓名/// </summary>[ImporterHeader(Name = "家长姓名")]public string Guardian { get; set; }/// <summary>///     家长联系电话/// </summary>[ImporterHeader(Name = "家长联系电话")]public string GuardianPhone { get; set; }/// <summary>///     学号/// </summary>[ImporterHeader(Name = "学号")]public string StudentNub { get; set; }/// <summary>///     宿舍号/// </summary>[ImporterHeader(Name = "宿舍号")]public string DormitoryNo { get; set; }/// <summary>///     QQ/// </summary>[ImporterHeader(Name = "QQ号")]public string QQ { get; set; }/// <summary>///     民族/// </summary>[ImporterHeader(Name = "民族")]public string Nation { get; set; }/// <summary>///     户口性质/// </summary>[ImporterHeader(Name = "户口性质")]public string HouseholdType { get; set; }/// <summary>///     联系电话/// </summary>[ImporterHeader(Name = "学生联系电话")]public string Phone { get; set; }/// <summary>///     状态///     测试可为空的枚举类型/// </summary>[ImporterHeader(Name = "状态")]public StudentStatus? Status { get; set; }/// <summary>///     备注/// </summary>[ImporterHeader(Name = "备注")]public string Remark { get; set; }/// <summary>///     是否住校(宿舍)/// </summary>[ImporterHeader(IsIgnore = true)]public bool? IsBoarding { get; set; }/// <summary>///     所属班级id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid ClassId { get; set; }/// <summary>///     学校Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? SchoolId { get; set; }/// <summary>///     校区Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? CampusId { get; set; }/// <summary>///     专业Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? MajorsId { get; set; }/// <summary>///     年级Id/// </summary>[ImporterHeader(IsIgnore = true)]public Guid? GradeId { get; set; }}


Reference

https://github.com/dotnetcore/Magicodes.IE

层出不穷的新技术对程序员来说既是挑战也是机遇,固守自己的一亩三分地迟早落于他人,是时候跳出来看看行业内的发展新趋势,参与2020 DAMS中国数据智能管理峰会是个不错的选择,其中前沿技术议题包括:

《当5G遇上金融,看电信甜橙金融如何创新?》中国电信甜橙金融技术创新中心总经理 张小虎

《智能制造的数字化基础的设计与演进》长城汽车集团云计算总监 张小斌

《平安银行“传统+互联网”混合CMDB及运营中台实践》平安银行运营开发负责人 徐大蔚

《中信银行的DevOps实践》中信银行DevOps实施牵头人 李红涛

8月7日,一起在上海洞悉技术发展新趋势,逆袭码农人生吧!

转载是一种动力 分享是一种美德

如果喜欢作者的文章,请关注【麦扣聊技术】订阅号以便第一时间获得最新内容。本文版权归作者和湖南心莱信息科技有限公司共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

文档官网:docs.xin-lai.com

QQ群:

编程交流群<85318032> 

产品交流群<897857351>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309911.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ajax获取php的数组,使用AJAX请求获取数组并将其传递到php数组中 - javascript

我正在为下一个问题苦苦挣扎&#xff1a;我有一个ajax请求&#xff0c;该请求将变量传递给PHP文件。 PHP处理该变量并返回一个数组。我需要取回该数组&#xff0c;所以我使用了AJAX成功回调函数&#xff0c;但是我只能打印出数组&#xff0c;仅此而已。我想使用该数组。$.ajax(…

D-query SPOJ - DQUERY(主席树求区间中不同的数的个数)

题意 给出n个数&#xff0c;m个询问&#xff0c;每个询问给出一个区间&#xff0c;需要回答这个区间中不同的数的个数 题目 {assign var“code” value“DQUERY”} {if KaTeX parse error: Expected EOF, got } at position 8: par""}̲ {assign varpa…locale} {…

微软 Build 2020开发者大会发来一张英雄帖,邀您速来赴约!

&#xff08;本文阅读时间&#xff1a;2 分钟&#xff09;微软 Build 2020开发者大会将于北京时间5 月 19 日晚上 23:00正式开启。大会将以Teams Live Event的形式面向全球开发者免费注册&#xff0c;并增设中文专家面对面&技术专场&#xff0c;方便开发者从48小时的连续技…

[C++11]不允许使用auto的四个场景

不允许使用auto的四个场景&#xff1a; 1.不能作为函数参数使用&#xff0c;因为只有在函数调用的时候才会给函数参数传递实参&#xff0c;auto要求必须要给修饰的变量赋值&#xff0c;因此二者矛盾。 代码如下: //error int func(auto a, auto b) {cout << a <<…

Network UVA - 315(Tarjan+连通性问题:求割点)

题意&#xff1a; 存在n个电话公司的网络连接站点&#xff0c;每个站点之间相互连通&#xff0c;是一个连通图&#xff0c;问&#xff0c;如果去掉一个站点&#xff0c;能够将整个网络体系变得不再连通&#xff0c;那么这样的点有几个&#xff0c;即求它的割点个数。 题目&am…

linux 进程内存开销,linux下查看最消耗CPU、内存的进程

1.CPU占用最多的前10个进程&#xff1a;ps auxw|head -1;ps auxw|sort -rn -k3|head -102.内存消耗最多的前10个进程ps auxw|head -1;ps auxw|sort -rn -k4|head -103.虚拟内存使用最多的前10个进程ps auxw|head -1;ps auxw|sort -rn -k5|head -104.也可以试试ps auxw --sortrs…

[C++11]自动类型推导auto

1.auto C11中&#xff0c;auto并不代表一种实际的数据类型&#xff0c;只是一个类型声明的"占位符"&#xff0c;auto并不是万能的在任意场景下都能够推导出变量的实际类型&#xff0c;使用auto声明的变量必须要进行初始化&#xff0c;以让编译器推导出它的实际类型&…

[最全操作指南] 在线六个项目全部迁移Linux

&#xff08;书山有路勤为径&#xff0c;学海无涯苦作舟&#xff09;开源也两年了&#xff0c;没想到自己在宣传.NetCore全栈的时候&#xff0c;也慢慢的做出了几个产品&#xff0c;毕竟也是一行一行的敲出来的&#xff0c;也是一天一夜的改出来的&#xff0c;希望每个人都能在…

操作系统习题——第一章

操作系统习题——第一章 1&#xff0e;设计现代OS的主要目标是什么&#xff1f; 答&#xff1a;&#xff08;1&#xff09;有效性 &#xff08; 2&#xff09;方便性 &#xff08; 3&#xff09;可扩充性 &#xff08; 4&#xff09;开放性 2&#xff0e; OS 的作用可表现在…

linux把svs文件分割,freeebsd,pkg_add,svsup,make改服务器的设定

第一大部分&#xff1a;几个服务器的设定pkg_add默认下载的服务器在哪改。在/etc/csh.cshrc加上setenv PACKAGESITE ftp://ftp.freebsd.org/pub/FreeBSD/ports/packages/All/如果是用PACKAGEROOT,则目录必须符合官方的规定cvsup默认的服务器cvsup -L 2 -h cvsup.freebsd.org /u…

[C++11]推荐使用auto的场景

推荐使用auto的场景&#xff1a; 1.用于STL的容器遍历。 代码如下: #include <string>#include <iostream> #include <map> using namespace std;int main() {map<int, string>mp;mp.insert(make_pair(1, "Tom"));mp.insert(make_pair(2,…

【壹刊】Azure AD 保护的 ASP.NET Core Web API (下)

一&#xff0c;引言上一节讲到如何在我们的项目中集成Azure AD 保护我们的API资源&#xff0c;以及在项目中集成Swagger&#xff0c;并且如何把Swagger作为一个客户端进行认证和授权去访问我们的WebApi资源的&#xff1f;本节就接着讲如何在我们的项目中集成 Azure AD 保护我们…

linux aspnet服务器,在Linux中安装ASPNET.Core3.0运行时的示例代码

摘要&#xff1a;# 以下示例适用于x64位runtime v3.0.0mkdir /runtimescd /runtimeswget https://... # 以下示例适用于x64位runtime v3.0.0mkdir /runtimescd /runtimeswget https://download.visualstudio.microsoft.com/download/pr/b0c44e05-b7a1-4221-94ec-a0c0d3a11eed/a…

And Then There Was One POJ - 3517(变形约瑟夫环+规律)

题意&#xff1a; 约瑟夫问题的变式。先指定第m个人必须死&#xff0c;然后每隔k个人死一个。求最后那个死的人的编号是什么。 题目 Let’s play a stone removing game. Initially, n stones are arranged on a circle and numbered 1, …, n clockwise (Figure 1). You a…

明明可以靠技术吃饭,现在却非要出来当编剧!

这是头哥侃码的第199篇原创前不久&#xff0c;有位读者深夜时在后台留言说&#xff1a;“我在某技术大会现场听过你的分享。”“说实话&#xff0c;第一次见你&#xff0c;真的很难想象一幅猛男外表的人竟然会有这样的经历和谈吐&#xff0c;这两点让我很钦佩。”这还不算完&am…

[C++11]decltype类型推导规则

在某些情况下&#xff0c;不需要或者不能定义变量&#xff0c;但是希望得到某种类型&#xff0c;这时候就可以用C11提供的decltype关键字了&#xff0c;它的作用是在编译器编译的时候推导出一个表达式的类型。 语法: decltype (表达式)decltype是"declare type “的缩写…

linux不能更改密码,Linux服务器无法更改密码的解决办法--passwd: User not known

上面仅是告知我&#xff0c;这些帐号并没有家目录&#xff0c;由于那些帐号绝大部分都是系统帐号&#xff0c; 确实也不需要家目录的&#xff0c;所以&#xff0c;那是‘正常的错误&#xff01;’,相对应的群组检查可以使用 grpck 这个指令。pwck 确保系统鉴认信息的完整性,pwc…

PowerBIDeskTop报表元数据批量更新(可用于翻译场景)

PowerBI在多国语言场景上有极大的缺陷&#xff0c;原有的Sqlserver的SSAS和Azure的AS模型层翻译功能&#xff0c;在Excel和PowerBIDeskTop客户端上均可完美适配。但到了PowerBI Pro的Service网页端时&#xff0c;竟然不支持。这个问题已经明确是官方给出的答复&#xff0c;起码…

操作系统习题——(习题二)

操作系统习题——第一章 1&#xff0e; OS 有哪几大特征&#xff1f;其最基本的特征是什么? 答&#xff1a;并发性、共享性、虚拟性和异步性四个基本特征&#xff1b;最基本的特征是并发性和共享性。 2.处理机管理有哪些主要功能&#xff1f; 答&#xff1a;处理机管理的主…

[C++11]decltype在泛型编程中的使用举例

关于decltype的应用多出现在泛型编程中&#xff0c;比如我们编写一个类模板&#xff0c;在里面添加遍历容器的函数&#xff0c;操作如下: 代码如下: #include <iostream> #include <list>using namespace std;template<typename T> class Container { publ…