首页 > 代码库 > [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>测试结果:
[C#]CSVHelper