C# 将List数据 导出到csv 文件
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks; namespace Utilities.IO
{ /// <summary>
/// 标记属性的别名Title
/// </summary>
public class AttrForCsvColumnLabel : Attribute
{
public string Title { get; set; }
} public static class CsvFileUtility
{ /// <summary>
/// Save the List data to CSV file
/// </summary>
/// <param name="dataList">data source</param>
/// <param name="filePath">file path</param>
/// <returns>success flag</returns>
public static bool SaveDataToCSVFile<T>(List<T> dataList, string filePath) where T : class
{ bool successFlag = true; StringBuilder sb_Text = new StringBuilder();
StringBuilder strColumn = new StringBuilder();
StringBuilder strValue = new StringBuilder();
StreamWriter sw = null;
var tp = typeof(T);
PropertyInfo[] props = tp.GetProperties(BindingFlags.Public | BindingFlags.Instance); try
{
//sw = new StreamWriter(filePath);
for (int i = 0; i < props.Length; i++)
{
var itemPropery = props[i];
AttrForCsvColumnLabel labelAttr = itemPropery.GetCustomAttributes(typeof(AttrForCsvColumnLabel), true).FirstOrDefault() as AttrForCsvColumnLabel;
if (null != labelAttr)
{
strColumn.Append(labelAttr.Title);
}
else
{
strColumn.Append(props[i].Name);
} strColumn.Append(",");
}
strColumn.Remove(strColumn.Length - 1, 1);
//sw.WriteLine(strColumn);
//write the column name
sb_Text.AppendLine(strColumn.ToString()); for (int i = 0; i < dataList.Count; i++)
{
var model = dataList[i];
//strValue.Remove(0, strValue.Length);
//clear the temp row value
strValue.Clear();
for (int m = 0; m < props.Length; m++)
{
var itemPropery = props[m];
var val = itemPropery.GetValue(model, null);
if (m == 0)
{
strValue.Append(val);
}
else
{
strValue.Append(",");
strValue.Append(val);
}
} //sw.WriteLine(strValue);
//write the row value
sb_Text.AppendLine(strValue.ToString());
}
}
catch (Exception ex)
{
successFlag = false;
}
finally
{
if (sw != null)
{
sw.Dispose();
}
} File.WriteAllText(filePath, sb_Text.ToString(), Encoding.Default); return successFlag;
}
}
}
C# 将List数据 导出到csv 文件的更多相关文章
- es实战之数据导出成csv文件
从es将数据导出分两步: 查询大量数据 将数据生成文件并下载 本篇主要是将第二步,第一步在<es实战之查询大量数据>中已讲述. csv vs excel excel2003不能超过6553 ...
- vue.js纯前端处理如何将后台返回来的csv数据导出成csv文件
需要实现一个下载csv文件的功能,但后台没有对这个下载文件进行处理,而是将csv数据传给前台而已,需要前台做一下处理. 这是按钮的代码: <a> <el-button size=&q ...
- R: 导入 csv 文件,导出到csv文件,;绘图后导出为图片、pdf等
################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方 ...
- Elasticsearch:如何把Elasticsearch中的数据导出为CSV格式的文件
本教程向您展示如何将数据从Elasticsearch导出到CSV文件. 想象一下,您想要在Excel中打开一些Elasticsearch中的数据,并根据这些数据创建数据透视表. 这只是一个用例,其中将 ...
- Datagrid数据导出到excel文件的三种方法
原文连接: http://www.cnblogs.com/xieduo/articles/606202.html 一.文件保存在服务器,提供下载 方法一:导出到csv文件,存放在服务器端任一路径,然后 ...
- datagrid数据导出到excel文件给客户端下载的几种方法
方法一:导出到csv文件,存放在服务器端任一路径,然后给客户下载 优点: 1.可以进行身份认证后给客户下载,如果放到非web目录就没有对应的url,客户无法随时下载. 2.也是因为生成了文件,所以占用 ...
- java导出生成csv文件
首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图: txt中显示: 修改文件后缀为csv后显示如下: 在java中我 ...
- hive表数据导出到csv乱码原因及解决方案
转载自http://blog.csdn.net/lgdlxc/article/details/42126225 Hive表中的数据使用hive - e"select * from table ...
- oracle导出多CSV文件的靠谱的
oracle导出多CSV文件的问题 ---------------------------------------------------------------------- 用ksh脚本从orac ...
随机推荐
- 构造UTF8的std::string
在VC++的世界里,MS比较鼓励使用_UNICODE,std::wstring.而在Web, XML则提倡用UTF8.当在C++的程序里要保存/读取XML数据,就存在wstring与string之间的 ...
- Tomcat配置多线程和配置数据库连接池
Tomcat配置多线程和配置数据库连接池 1. tomcat配置线程池: [root@RD2_AS yanghuihui]# cd /usr/tomcat/conf/ [root@RD2_AS co ...
- I fullly understand why can not set "auto commit off" in sqlserver
This is xxxxx Because MES guy mistaken , the data was wrong and made system error then. After that I ...
- Unity酱~ 卡通渲染技术分析(一)
前面的话 unitychan是日本unity官方团队提供的一个Demo,里面有很好的卡通渲染效果,值得参考学习 上图是我整理出来的shader结构,可以看到Unity娘被拆分成了很多个小的部件,我想主 ...
- Golang-执行go get私有库提示”410 Gone“ 解决办法
之前没有使用过私有库,今天正好碰到,把解决方法整理一下 错误记录 如果你在用go get 私有库碰到如下类似错误: 解决方法 $ export GO111MODULE=on $ export GOPR ...
- vue-cli 脚手架
vue脚手架 vue-cli 基于webpack.帮助我们完成了对项目的基本架构,冗余代码比较多 ,资源的浪费 1.全局安装vue的脚手架 cnpm install @vue/cli -g 2.查看版 ...
- docker 镜像save和转换
docker save出来的tar包转成镜像 $ docker load < busybox.tar.gz 使用import转的镜像里面是空的,无法启动 报错如下Error: Error res ...
- python图片处理PIL
一.PIL介绍 PIL中所涉及的基本概念有如下几个:通道(bands).模式(mode).尺寸(size).坐标系统(coordinate system).调色板(palette).信息(info)和 ...
- StarUML之九、starUML的一些特殊属性的说明
UML的扩充性机制允许你在控制的方式下扩充UML语言. 这一类的机制包括:stereotype,标记值.约束. Stereotype扩充了UML的词汇表,允许你创建新的建筑块,这些建筑块从已有的继承而 ...
- 2019年终总结之SAP项目实践篇
2019年终总结之SAP项目实践篇 到了临近年底,又是年终总结的时候了. 早在去年12月下旬,笔者就有展望2019年度SAP项目实践计划.当时笔者对于在2019年度SAP项目工作有三大期望或者说三大目 ...