写了个类:

 class DataTableAndCSV
{
public static DataTable csvToDataTable(string file)
{
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties='Excel 8.0;'"; // Excel file
if (file.EndsWith(".csv"))
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file + ";Extended Properties='TEXT;HDR=Yes;FMT=Delimited;'"; // csv file:HDR=Yes-- first line is header
//strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + path + ";Extended Properties='TEXT;HDR=Yes;FMT=Delimited;'"; // csv file:HDR=Yes-- first line is header
OleDbConnection oleConn = new OleDbConnection(strConn);
oleConn.Open();
DataTable sheets = oleConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (sheets == null || sheets.Rows.Count < )
{
return null;
}
String fileName = sheets.Rows[]["TABLE_NAME"].ToString(); // sheets.Rows[0] -- first sheet of excel
if (file.EndsWith(".csv"))
fileName = file.Substring(file.LastIndexOf("/"));
string olestr = "select * from [" + fileName + "]";
if (file.EndsWith(".csv"))
olestr = "select * from [" + fileName + "]";
OleDbCommand oleComm = new OleDbCommand(olestr, oleConn);
oleComm.Connection = oleConn;
OleDbDataAdapter oleDa = new OleDbDataAdapter();
oleDa.SelectCommand = oleComm;
DataSet ds = new DataSet();
oleDa.Fill(ds);
oleConn.Close();
return ds.Tables[];
} public static void dataTableToCsv(DataTable table, string file)
{
FileInfo fi = new FileInfo(file);
string path = fi.DirectoryName;
string name = fi.Name;
//\/:*?"<>|
//把文件名和路径分别取出来处理
name = name.Replace(@"\", "\");
name = name.Replace(@"/", "/");
name = name.Replace(@":", ":");
name = name.Replace(@"*", "*");
name = name.Replace(@"?", "?");
name = name.Replace(@"<", "<");
name = name.Replace(@">", ">");
name = name.Replace(@"|", "|");
string title = ""; FileStream fs = new FileStream(path + "\\" + name, FileMode.Create);
StreamWriter sw = new StreamWriter(new BufferedStream(fs), System.Text.Encoding.Default); for (int i = ; i < table.Columns.Count; i++)
{
title += table.Columns[i].ColumnName + ",";
}
title = title.Substring(, title.Length - ) + "\n";
sw.Write(title); foreach (DataRow row in table.Rows)
{
if (row.RowState == DataRowState.Deleted) continue;
string line = "";
for (int i = ; i < table.Columns.Count; i++)
{
line += row[i].ToString().Replace(",", "") + ",";
}
line = line.Substring(, line.Length - ) + "\n"; sw.Write(line);
} sw.Close();
fs.Close();
} public static void dataTableToCsv(DataTable table, string file, string Title)
{
FileInfo fi = new FileInfo(file);
string path = fi.DirectoryName;
string name = fi.Name;
//\/:*?"<>|
//把文件名和路径分别取出来处理
name = name.Replace(@"\", "\");
name = name.Replace(@"/", "/");
name = name.Replace(@":", ":");
name = name.Replace(@"*", "*");
name = name.Replace(@"?", "?");
name = name.Replace(@"<", "<");
name = name.Replace(@">", ">");
name = name.Replace(@"|", "|");
string title = ""; FileStream fs = new FileStream(path + "\\" + name, FileMode.Create);
StreamWriter sw = new StreamWriter(new BufferedStream(fs), System.Text.Encoding.Default); title += Title + ",";
for (int i = ; i < table.Columns.Count; i++)
{
title += ",";
}
title = title.Substring(, title.Length - ) + "\n";
sw.Write(title);
title = ""; for (int i = ; i < table.Columns.Count; i++)
{
title += table.Columns[i].ColumnName + ",";
}
title = title.Substring(, title.Length - ) + "\n";
sw.Write(title); foreach (DataRow row in table.Rows)
{
if (row.RowState == DataRowState.Deleted) continue;
string line = "";
for (int i = ; i < table.Columns.Count; i++)
{
line += row[i].ToString().Replace(",", "") + ",";
}
line = line.Substring(, line.Length - ) + "\n"; sw.Write(line);
} sw.Close();
fs.Close();
} //public static void ExportToSvc(DataTable dt, string strFileName)
//{
// string strPath = strFileName;
// if (File.Exists(strPath))
// {
// File.Delete(strPath);
// }
// //先打印标头
// StringBuilder strColu = new StringBuilder();
// StringBuilder strValue = new StringBuilder();
// int i = 0;
// try
// {
// StreamWriter sw = new StreamWriter(new FileStream(strPath, FileMode.CreateNew), Encoding.GetEncoding("GB2312"));
// for (i = 0; i <= dt.Columns.Count - 1; i++)
// {
// strColu.Append(dt.Columns[i].ColumnName);
// strColu.Append(",");
// }
// strColu.Remove(strColu.Length - 1, 1);//移出掉最后一个,字符
// sw.WriteLine(strColu);
// foreach (DataRow dr in dt.Rows)
// {
// strValue.Remove(0, strValue.Length);//移出
// for (i = 0; i <= dt.Columns.Count - 1; i++)
// {
// strValue.Append(dr[i].ToString());
// strValue.Append(",");
// }
// strValue.Remove(strValue.Length - 1, 1);//移出掉最后一个,字符
// sw.WriteLine(strValue);
// }
// sw.Close();
// }
// catch (Exception ex)
// {
// throw ex;
// }
// ////System.Diagnostics.Process.Start(strPath);
//}
}

c#将DataTable内容导出为CSV文件的更多相关文章

  1. DataTable内容导出为CSV文件

    CSVHelper.cs内容: using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  2. java导出生成csv文件

    首先我们需要对csv文件有基础的认识,csv文件类似excel,可以使用excel打开,但是csv文件的本质是逗号分隔的,对比如下图: txt中显示: 修改文件后缀为csv后显示如下: 在java中我 ...

  3. 淘宝助理导出的csv文件使用的是什么编码,您猜?

    今天下午用Java读取从淘宝助理 V4.3 Beta1导出的csv文件,出现中文乱码情况. 一看就是文件编码引起的,不清楚淘宝助理导出的csv文件使用了什么编码,到百度搜索了一下,看到一些相关文章,但 ...

  4. R: 导入 csv 文件,导出到csv文件,;绘图后导出为图片、pdf等

    ################################################### 问题:导入 csv 文件 如何从csv文件中导入数据,?参数怎么设置?常用参数模板是啥? 解决方 ...

  5. 如何从sql server导出到csv文件

    如何从sql server导出到csv文件,具体代码如下: private static void WriteHeader(SqlDataReader reader, TextWriter outpu ...

  6. oracle导出多CSV文件的靠谱的

    oracle导出多CSV文件的问题 ---------------------------------------------------------------------- 用ksh脚本从orac ...

  7. 原创 Datareader 导出为csv文件方法

    DataReader 是游标只读数据, 如果是大数据导出,用Datatable 将耗费巨大内存资源.因为Datatable 其实就是内存中的一个数据表 代码如下 /// <summary> ...

  8. 将DataTable内容导出到Excel表格的两种方法

    方法一:循环DataTable单元格内容拼接字符串,利用StreamWriter的Write方法将字符串写入Excel文件中 这种方法很实现很简单.拼接字符串时,每个单元格之间添加'\t'(表示一个占 ...

  9. 导出到CSV文件

    一.手工导出导出 1.winform void DataGridViewToExcel(DataGridView dataGridView1) { SaveFileDialog saveFileDia ...

随机推荐

  1. 笔记:zookeeper Hello World

    下载zookeeper-3.4.6 , 试用了一下 standlone 启动 ./bin/zkServer.sh start 注: Usage: ./bin/zkServer.sh {start|st ...

  2. ABAP开发中message dump

    系统里边 消息 造成dump示例, 1.面向对象的method 中一般不能用stop, 例如data_change事件, ** sm30 不能stop, 2. 增强中 有些地方不能stop, 3.还有 ...

  3. HTTP首部信息说明

    1.Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type.2.Accept-Charset:浏览器申明自己接收的 ...

  4. assign,copy,retain的区别以及weak和strong的区别

    @property (nonatomic, assign) NSString *title;    什么是assign,copy,retain之间的区别?      assign: 简单赋值,不更改索 ...

  5. $SublimeText2常用快捷键

    1.删除一行:ctrl + shift + K2.替换:ctrl + H3.设置书签:Ctrl+F2设置书签F2 下一个书签Shift+F2上一个书签4.查找:ctrl + F 查找F3 查找下一个s ...

  6. XML文件结构和基本语法

    XML文件的结构性内容,包括节点关系以及属性内容等等.元素是组成XML的最基本的单位,它由开始标记,属性和结束标记组成.就是一个元素的例子,每个元素必须有一个元素名,元素可以若干个属性以及属性值. x ...

  7. C++ IPv4与IPv6的兼容编码(转,出自http://blog.csdn.net/ligt0610/article/details/18667595)

    这里不再对IPv6 socket相关编程的基础知识进行讲解,只提供一个IP协议无关的服务端和客户端的代码,仅供参考. 服务端代码: #include <iostream> #include ...

  8. ETL应用:使用Pro*C写入文件信息入库的方法

    ETL处理过程中,经常需要进行文件校验,如文件级校验.记录级校验,需要保存文件的基本信息,文件名.文件大小.数据日期等,使用Pro*C的一种方法如下: #include <stdio.h> ...

  9. Service Meth and SideCar

    本文转自:http://philcalcado.com/2017/08/03/pattern_service_mesh.html SideCar: SideCar就是与Application一起运行的 ...

  10. Go bufio库

    bufio.Scanner bufio包使处理输入和输出方便又高效.Scanner类型是该包最有用的特性之一,它读取输入并将其拆成行或单词:通常是处理行形式的输入最简单的方法.该变量从程序的标准输入中 ...