.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文件,然后再进行一系列 ...
随机推荐
- 制作可独立分发的Android模拟器
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6586759 如果我们编写了一个Android应 ...
- jsp当参数为空的时候默认显示值
当${business.branchName }为空或者不存在的时候显示“请选择门店” <c:out value="${business.branchName }" defa ...
- js获取 input file 图片缩略图
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- NFinal学习笔记 02—NFinalBuild
在学习NFinal的过程中发现在线.net编译器Web版—— NFinalBuild 什么是NFinalBuild呢?它就是帮助我们简单又快速的更新我们网站的一种编译器,我们不用再只为了更新.net网 ...
- Josn转DataTable(转)
使用UI框架开发的时候就常常用到DataTable转Json的情况,但是最近完成一个微信公众号开发的项目,需要把微信接口传过来的json值作为转为DataTable后绑定到服务器控件上. 在网上找了很 ...
- js静态方法
1.ajax() 方法是属于“函数”本身的,和返回的对象没有关系 2.bark药调用,必须药new Hashiqi()得到对象,且由返回对象才能调用 3.ajax()方法药调用,不需要new对象,直接 ...
- POJ 1723 SOLDIERS (中位数)
题目大意: 平面上有N(N<=10000)个点,求这些点变成一条水平线的最小移动步数. 算法讨论: 表示自己太弱弱了,打算从今天开始提高一下智商. 我们考虑,既然是要成一条水平线,那么这条直线的 ...
- HTML5 canvas 在线画笔绘图工具(一)
HTML5 canvas 在线画笔绘图工具(一) 功能介绍 这是我用Javascript写的第一个程序,在写的过程中走了很多弯路,所以写完之后想分享出来,给与我一样的初学者做为学习的参考,同时在编写这 ...
- Measuring Lengths in Baden
Description Measuring Lengths in Baden time limit per test: 2 seconds memory limit per test: 256 meg ...
- C# Environment类_获取程序所在机器信息
一.属性 CommandLine 获取该进程的命令行.CurrentDirectory 获取或设置当前工作目录的完全限定路径.ExitCode 获取或设置进程的退出代码.HasShutdownSta ...