.NET中的CSV导入导出(实例)
导入代码,从csv文件得到datatable /// <summary>
/// Get Data From Csv File
/// (Through StreamReader)
/// </summary>
/// <returns></returns>
private bool GetData(Stream inputStream, out string errMessage, out DataTable dtFile)
{
errMessage = String.Empty;
dtFile = new DataTable();
//this.FileUploadImport.PostedFile.InputStream.CanSeek;//StreamReader sr = new StreamReader(this.FileUploadImport.PostedFile.InputStream);//update by hwx 11/12/2010
StreamReader sr = new StreamReader(inputStream);
int iColumnCount = 19;//the column count in the file
int iRow = 1;// the row number is being read
int iColumn = 0;// the column number is being read
string strStandardTitle = string.Empty; // the title as it is
//read title row
string strTitle = sr.ReadLine();
//string[] strRowTitle = strTitle.Split(new char[] { ',' });
string[] strRowTitle = new string[iColumnCount];
string strCharTitle;
int iCellNumberTitle = 0;
bool blnQuoteTitle = false;
for (int i = 0; i < strTitle.Length; i++)
{
strCharTitle = strTitle.Substring(i, 1);
if (strCharTitle == ",")// "," is the seperation symbol of csv file,
{
if (!blnQuoteTitle)
{
iCellNumberTitle++;// out of the "" range, "," is the seperation symbol
if (iCellNumberTitle >= iColumnCount)// too many column in this line
{
break;
}
}
else
{
strRowTitle[iCellNumberTitle] += strCharTitle;
}
}
else if (strCharTitle == "\"")// "\"" is the transfer symbol of csv file,
{
blnQuoteTitle = !blnQuoteTitle;
if (blnQuoteTitle && i > 0 && strTitle.Substring(i - 1, 1) == "\"")//in the "" range and there is an transfer symbol before
{
strRowTitle[iCellNumberTitle] += strCharTitle;
}
}
else
{
strRowTitle[iCellNumberTitle] += strCharTitle;
}
}
//read the content
if (strRowTitle.Length == iColumnCount)
{
foreach (string strCell in strRowTitle)
{
iColumn++;
if (strCell.Trim() != string.Empty)
{
dtFile.Columns.Add(strCell);//add new column with name to the data table
}
else //file error:blank title
{
errMessage += "The cell " + iColumn.ToString() + " is blank in the header row.\r\n";
}
}
if (dtFile.Columns.Count == iColumnCount)
//make sure that no blank header or error header
{
//read content row
string strLine;
while (!sr.EndOfStream)
{
iRow++;
iColumn = 0;
DataRow dr = dtFile.NewRow();
strLine = sr.ReadLine();
//read csv file line by line
string[] strRow = new string[iColumnCount];
string strChar;
int iCellNumber = 0;
bool blnQuote = false;//whether in the "" range
for (int i = 0; i < strLine.Length; i++)
{
strChar = strLine.Substring(i, 1);
if (strChar == ",")// "," is the seperation symbol of csv file,
{
if (!blnQuote)
{
iCellNumber++;// out of the "" range, "," is the seperation symbol
if (iCellNumber >= iColumnCount)//too many column in this line
{
break;
}
}
else
{
strRow[iCellNumber] += strChar;
}
}
else if (strChar == "\"")// "\"" is the transfer symbol of csv file,
{
blnQuote = !blnQuote;
if (blnQuote && i > 0 && strLine.Substring(i - 1, 1) == "\"")//in the "" range and there is an transfer symbol before
{
strRow[iCellNumber] += strChar;
}
}
else
{
strRow[iCellNumber] += strChar;
}
}
if (iCellNumber + 1 == iColumnCount)
{
foreach (string strCell in strRow)
{
iColumn++;
if (strCell != null && strCell.Trim() != string.Empty)
{
dr[strRowTitle[iColumn - 1]] = strCell.Trim();
}
else//file error:blank cell
{
dr[strRowTitle[iColumn - 1]] = String.Empty;
//errMessage += "The column \"" + strRowTitle[iColumn - 1] + "\" is blank in row " + iRow.ToString() + ".\r\n";
}
}
}
else// file error:the column count of current row do not equal to title's
{
errMessage += "There are more or less cells than title row in the row " + iRow.ToString() + ".\r\n";
}
dtFile.Rows.Add(dr);
}
}
}
else //file error:the count of columns in the file don't equal it should be
{
errMessage += "There are an incorrect number of columns in the header row compared to the template file.\r\n";
}
sr.Close();
sr.Dispose();
errMessage = errMessage.Replace("\r\n", "<br>");
return errMessage == String.Empty ? true : false;
}
/// <summary>
/// Get dataset from csv file.
/// </summary>
/// <param name="filepath">http://www.nuoya118.com</param>
/// <param name="filename"></param>
/// <returns>Data Set</returns>
private DataSet GetDatasetFromCsv(string filepath, string filename)
{
string strconn = @"driver={microsoft text driver (*.txt; *.csv)};dbq=";
strconn += filepath; //filepath, for example: c:\
strconn += ";extensions=asc,csv,tab,txt;";
OdbcConnection objconn = new OdbcConnection(strconn);
DataSet dscsv = new DataSet();
try
{
string strsql = "select * from " + filename; //filename, for example: 1.csv
OdbcDataAdapter odbccsvdataadapter = new OdbcDataAdapter(strsql, objconn);
odbccsvdataadapter.Fill(dscsv);
return dscsv;
}
catch (Exception ex)
{
throw ex;
}
}
csv导出代码
/// <summary>
/// Export to Csv File from dataset
/// </summary>
/// <param name="src"></param>
/// <param name="folderName">folderName</param>
/// <param name="strFileName">strFileName</param>
/// <returns></returns>
public bool ExportToCsv(DataSet src, string folderName, string strFileName)
{
string csv = String.Empty;
StreamWriter writer = null;
string fileName = Server.MapPath("/") + folderName + "\\" + strFileName;
try
{
if (src == null || src.Tables.Count == 0) throw new Exception("dataset is null or has not table in dataset");
for (int i = 0; i < src.Tables.Count; i++)
{
if (i > 0)
fileName = fileName.Substring(0, fileName.IndexOf('.')) + i + fileName.Substring(fileName.IndexOf("."));
writer = new StreamWriter(fileName);
DataTable dt = src.Tables[i];
StringBuilder sb = new StringBuilder();
for (int j = 0; j < dt.Columns.Count; j++)
{
string colName = dt.Columns[j].ColumnName;
if (colName.IndexOf(',') > -1)
colName = colName.Insert(0, "\"").Insert(colName.Length + 1, "\"");
sb.Append(colName);
if (!colName.Equals(""))
if (j != dt.Columns.Count - 1)
sb.Append(",");
}
writer.WriteLine(sb.ToString());
sb = new StringBuilder();
string temp = "";
for (int j = 0; j < dt.Rows.Count; j++)
{
DataRow dr = dt.Rows[j];
for (int k = 0; k < dt.Columns.Count; k++)
{
object o = dr[k];
if (o != null)
temp = o.ToString();
if (temp.IndexOf(',') > -1)
temp = temp.Insert(0, "\"").Insert(temp.Length + 1, "\"");
sb.Append(temp);
if (k != dt.Columns.Count - 1)
sb.Append(",");
}
writer.WriteLine(sb.ToString());
sb = new StringBuilder();
csv = sb.ToString();
}
writer.Close();
}
string strFilePath = Server.MapPath("/") + folderName;
if (!Directory.Exists(strFilePath))
{
Directory.CreateDirectory(strFilePath);
}
strFullFileName = Server.MapPath("/") + folderName + "\\" + fileName;
//FullFileName = Server.MapPath(FileName);
//FileName
FileInfo DownloadFile = new FileInfo(strFullFileName);
if (DownloadFile.Exists)
{
Response.Clear();
Response.ClearHeaders();
Response.Buffer = false;
Response.ContentType = "application/octet-stream";
//Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.ASCII));
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.ASCII));
Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
Response.WriteFile(DownloadFile.FullName);
Response.Flush();
//Response.End();
}
else
{
//not exist
throw new Exception("Export csv file does not exist!");
}
}
catch (Exception ex)
{
throw new Exception("Save csv error", ex);
}
finally
{
if (writer != null) writer.Close();
}
return true;
}
/// <summary>
/// List to DataTable
/// </summary>
/// <param name="entitys">entitys list</param>
/// <returns></returns>
public DataTable ListToDataTable(List<T> entitys)
{
if (entitys == null || entitys.Count < 1)
{
throw new Exception("list is null");
}
//get first Propertie
Type entityType = entitys[0].GetType();
PropertyInfo[] entityProperties = entityType.GetProperties();
//DataTable structure
//
DataTable dt = new DataTable();
for (int i = 0; i < entityProperties.Length; i++)
{
//dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
dt.Columns.Add(entityProperties[i].Name);
}
//add entity to DataTable
foreach (object entity in entitys)
{
//check type
if (entity.GetType() != entityType)
{
throw new Exception("type not same");
}
object[] entityValues = new object[entityProperties.Length];
for (int i = 0; i < entityProperties.Length; i++)
{
entityValues[i] = entityProperties[i].GetValue(entity, null);
}
dt.Rows.Add(entityValues);
}
return dt;
}
.NET中的CSV导入导出(实例)的更多相关文章
- AngularJS中module的导入导出
关于AngularJS中module的导入导出,在Bob告诉我之前还没写过,谢谢Bob在这方面的指导,给到我案例代码. 在AngularJS实际项目中,我们可能需要把针对某个领域的各个方面放在不同的m ...
- oracle数据库的导入 导出实例
oracle数据库的导入 导出实例 分类: DataBase2011-09-07 23:25 377人阅读 评论(0) 收藏 举报 数据库oraclefileusercmdservice 我要从另外一 ...
- ASP.NET 开源导入导出库Magicodes.IE 完成Csv导入导出
Magicodes.IE Csv导入导出 说明 本章主要说明如何使用Magicodes.IE.Csv进行Csv导入导出. 主要步骤 1.安装包Magicodes.IE.Csv Install-Pack ...
- sqlserver中BCP命令导入导出
个人自用导出文本文件命令: bcp [xxDB].[dbo].[xx_tb_name] out d:\temp\xxx.txt -c -t "\t" -T bcp是SQL Serv ...
- oracle 中数据库完全导入导出:cmd命令行模式(转载)
http://www.3lian.com/edu/2012/12-01/47252.html Oracle数据导入导出imp/exp就相当于oracle数据还原与备份.exp命令可以把数据从远程数据库 ...
- NPOI 操作数据库中数据的导入导出(Excel.xls文件) 和null数据的处理。
App.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> ...
- jxl导入导出实例
1 package com.tgb.test; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.util.Ar ...
- java实现文件批量导入导出实例(兼容xls,xlsx)
1.介绍 java实现文件的导入导出数据库,目前在大部分系统中是比较常见的功能了,今天写个小demo来理解其原理,没接触过的同学也可以看看参考下. 目前我所接触过的导入导出技术主要有POI和iRepo ...
- java 中Excel的导入导出
部分转发原作者https://www.cnblogs.com/qdhxhz/p/8137282.html雨点的名字 的内容 java代码中的导入导出 首先在d盘创建一个xlsx文件,然后再进行一系列 ...
随机推荐
- SSO之CAS基础及应用视频教程(2)
CAS介绍 CAS = Central Authentication Service,中央认证服务.CAS 是 Yale 大学发起的一个开源项目,能够为 Web 应用系统或者非Web应用系统提供一种可 ...
- 8. 冒泡法排序和快速排序(基于openCV)
一.前言 主要讲述冒泡法排序和快速排序的基本流程,并给出代码实现,亲测可用. 二.冒泡法排序 冒泡法排序主要是将相邻两个值比较,把小的向前冒泡,大的向后沉淀,时间复杂度为O(n2).主要思想如下: 分 ...
- java第二周学习日记
day01 1.抽象类 (1)抽象类的应用场景: 我们在描述一类事物的时候,发现该种事物确实存在着某种行为,但是这种行为目前不是具体的,那么我们可以抽取这种行为的声明,但是不去实现该种行为,这时候这种 ...
- 面试总结之html+css
最近面试了一些公司,和技术总监聊了一些前端技术方面的内容.回来之后我总结了一下,大致可以分为三个模块:第一.Html与css 方面:第二.浏览器解析方面:第三.js方面.打算,分为三篇博文,根据自己的 ...
- poj 1149
#include <cstdio> #include <cstring> #include <queue> #define _clr(x, y) memset(x, ...
- c中关于#与##的简易使用
#运算符用于在预编译时,将宏参数转换为字符串 eg. #include <stdio.h>#define CONVERT(f)(#f) void helloworld(){ printf( ...
- Android实现点击事件的4种方式
一.通过在activity_main.xml中,按钮button控件中添加onclick事件实现 在 activity_main.xml 对应的按钮Button中加入下面红色事件 <Butt ...
- Android网络连接的两种方法:apache client和httpurlconnection的比较
另见http://blog.csdn.net/mingli198611/article/details/8766585 在官方blog中,android工程师谈到了如何去选择apache client ...
- 解决MYSQL弃用模块错误Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future
今天使用了mysql 5.5版本,就出现了错误.错误提示如下: Deprecated: mysql_connect(): The mysql extension is deprecated and w ...
- nginx+keepalived+tomcat之tomcat性能调优
body{ font-family: Nyala; font-size: 10.5pt; line-height: 1.5;}html, body{ color: ; background-color ...