首页 > 代码库 > [C#]CSVHelper

[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    }}

<style type="text/css">.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; }</style>测试代码:

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;        }    }}

<style type="text/css">.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; }</style>测试结果:

image

[C#]CSVHelper