[C#]CSVHelper

关键代码:

using System.Data;
using System.IO;
using System.Text;

namespace YanZhiwei.DotNet2.Utilities.Common
{
    /// <summary>
    /// CSV文件转换类
    /// </summary>
    public static class CSVHelper
    {
        #region 导出到csv文件
        /// <summary>
        /// 导出到csv文件
        /// eg:
        /// CSVHelper.ToCSV(_personInfoView, @"C:\Users\YanZh_000\Downloads\person.csv", "用户信息表", "名称,年龄");
        /// </summary>
        /// <param name="table">DataTable</param>
        /// <param name="filePath">导出路径</param>
        /// <param name="tableheader">标题</param>
        /// <param name="columname">列名称,以‘,‘英文逗号分隔</param>
        /// <returns>是否导出成功</returns>
        public static bool ToCSV(this DataTable table, string filePath, string tableheader, string columname)
        {
            try
            {
                if (File.Exists(filePath))
                    File.Delete(filePath);
                using (FileStream _stream = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite))
                {
                    StreamWriter _writer = new StreamWriter(_stream, Encoding.UTF8);
                    _writer.WriteLine(tableheader);
                    _writer.WriteLine(columname);
                    for (int i = 0; i < table.Rows.Count; i++)
                    {
                        for (int j = 0; j < table.Columns.Count; j++)
                        {
                            _writer.Write(table.Rows[i][j].ToString());
                            _writer.Write(",");
                        }
                        _writer.WriteLine();
                    }
                    _writer.Close();
                    return true;
                }
            }
            catch
            {
                return false;
            }
        }
        #endregion
        #region  将CSV文件导入到DataTable
        /// <summary>
        /// 将CSV文件导入到DataTable
        /// </summary>
        /// <param name="table">DataTable</param>
        /// <param name="filePath">csv文件物理路径</param>
        /// <param name="startRowIndex">数据导入起始行号</param>
        /// <returns>DataTable</returns>
        public static DataTable ImportToTable(this DataTable table, string filePath, int startRowIndex)
        {
            using (StreamReader reader = new StreamReader(filePath, Encoding.UTF8, false))
            {
                int j = 0;
                while (reader.Peek() > -1)
                {
                    j = j + 1;
                    string _line = reader.ReadLine();
                    if (j >= startRowIndex + 1)
                    {
                        string[] _dataArray = _line.Split(‘,‘);
                        DataRow _dataRow = table.NewRow();
                        for (int k = 0; k < table.Columns.Count; k++)
                        {
                            _dataRow[k] = _dataArray[k];
                        }
                        table.Rows.Add(_dataRow);
                    }
                }
                return table;
            }
        }
        #endregion
    }
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

测试代码:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Data;
using YanZhiwei.DotNet2.UtilitiesTests;
namespace YanZhiwei.DotNet2.Utilities.Common.Tests
{
    [TestClass()]
    public class CSVHelperTests
    {
        private DataTable TestTable;
        [TestMethod()]
        public void ToCSVTest()
        {
            for (Int16 i = 18; i < 28; i++)
            {
                DataRow _person = TestTable.NewRow();
                _person["Name"] = "YanZhiwei" + i;
                _person["Age"] = i;
                TestTable.Rows.Add(_person);
            }
            bool _expected = true;
            bool _actual = CSVHelper.ToCSV(TestTable, @"C:\Users\YanZh_000\Downloads\person.csv", "用户信息表", "名称,年龄");
            Assert.AreEqual(_expected, _actual);
        }
        [TestInitialize]
        public void InitTestTable()
        {
            TestTable = new DataTable();
            TestTable.Columns.Add(new DataColumn("Name", typeof(string)));
            TestTable.Columns.Add(new DataColumn("Age", typeof(int)));
        }

        [TestMethod()]
        public void ImportToTableTest()
        {
            DataTable _personInfoView = TestTable.Clone();
            DataTable _expected = TestTable.Clone();
            for (Int16 i = 18; i < 28; i++)
            {
                DataRow _person = _expected.NewRow();
                _person["Name"] = "YanZhiwei" + i;
                _person["Age"] = i;
                _expected.Rows.Add(_person);
            }
            DataTable _actual = CSVHelper.ImportToTable(_personInfoView, @"C:\Users\YanZh_000\Downloads\person.csv", 2);
            Assert.IsTrue(ResultSetComparer.AreIdenticalResultSets(_expected, _actual));
        }
        [TestCleanup]
        public void ResetTable()
        {
            TestTable = null;
        }
    }
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

测试结果:

时间: 2024-08-24 02:08:35

[C#]CSVHelper的相关文章

CSVHelper 导出CSV 格式

public class CSVHelper { System.Windows.Forms.SaveFileDialog saveFileDialog1;//保存 private string header = string.Empty;//标题 /// <summary> /// 初始化打印设置 /// </summary> /// <param name="printID"></param> protected void InitEx

CsvHelper

using System.Data;using System.IO; public static class CsvHelper{    /// <summary>    /// 导出报表为Csv    /// </summary>    /// <param name="dt">DataTable</param>    /// <param name="strFilePath">物理路径</para

Nuget CsvHelper 的使用

CsvHelper:nuget地址 csv导出类||生成类 public class CSVHeader { public string head1 { get; set; } public string head2 { get; set; } public string head3 { get; set; } public string head4 { get; set; } public string head5 { get; set; } } csv map 类 public class

封装一个CSVHelper

1 public class CSVHelper 2 { 3 /// <summary> 4 /// CSV转换成DataTable(OleDb数据库访问方式) 5 /// </summary> 6 /// <param name="csvPath">csv文件路径</param> 7 /// <returns></returns> 8 public static DataTable CSVToDataTableB

工具集

好用的工具集 转:http://www.yimingzhi.com/2015/03/lao-yi-de-kai-fa-gong-ju-he-lei-ku-ji-2014-ban Visual Studio 2013 扩展 Visual Studio 2013 Update 4:是目前微软发布的最新版开发工具升级包,高效而且强大.下面的扩展都是该版本的Visual Studio下的,老版本可以根据名字自行查找安装. CodeMaid: 可快速整理代码文件,清理不必要的代码和杂乱的格式.并在开发时实

ASP.NET MVC 导出CSV 的 CsvFileResult 类

public class CsvFileResult<T> : FileResult where T : class { private IEnumerable<T> _data; public CsvFileResult(IEnumerable<T> data) : base("text/CSV") { _data = data; } protected override void WriteFile(HttpResponseBase respon

DotNet 资源大全中文版(Awesome最新版)

Awesome系列的.Net资源整理.awesome-dotnet是由quozd发起和维护.内容包括:编译器.压缩.应用框架.应用模板.加密.数据库.反编译.IDE.日志.风格指南等. API 框架 NancyFx:轻量.用于构建 HTTP 基础服务的非正式(low-ceremony)框架,基于.Net 及 Mono 平台. 官网 ASP.NET WebAPI:快捷创建 HTTP 服务的框架,可以广泛用于多种不同的客户端,包括浏览器和移动设备. 官网 ServiceStack:架构缜密.速度飞快

人生维艰,何不利用开源.NET函数库让工作更轻松

今天推荐的文章会谈到一些让你工作更轻松的开源.NET函数库. 即使业界有时候认为.NET开源社区不太健康,很多开发团队都更多依赖于微软提供的东西来开发.不过最近在.NET世界中还是诞生了一些优秀和有意思的开源函数库. thomasvm就在他的博文中推荐了一些比较有代表性的开源函数库.这些函数库都是解决一些比较通用的问题,具备良好的文档,并非是一个强制你遵循某种规则和代码结构的框架,可以很好地嵌入到你的应用程序当中.当然,作者也给出了一些推荐理由: Hangfire.这是一个运行在ASP.NET中

CvsHelper 使用指南

用于读取和写入CSV文件的.NET库. 非常快速,灵活和易于使用. 支持读写自定义类对象. 入门 要安装CsvHelper,请从包管理器控制台运行以下操作. Install-Package CsvHelper 读 读取所有记录 阅读所有记录很可能简单. 如果有一个的类结构的镜像CSV文件,可以将整个文件读入. var csv = new CsvReader( textReader ); var records = csv.GetRecords<MyClass>(); 如果要自定义CSV文件映射