日期:2014-05-18  浏览次数:20426 次

100分求读csv文件的源码!!
一个.CSV文件,里面有不规则表,求用datagird或其它形式显示在网页上

A                   B                       C                         D                           E
账号:   "3202004809000463231 "   //注意帐号里的数字占了BCD三个单元格  
交款                             0 800,000.00 20,437,024.00//用excel打开为数字变成######,但把单元格一拉就还原成数字

如果把文件扩展名改为.xls,表格会严重变形

------解决方案--------------------
.CSV应该是以逗号分隔的数据文件,可以直接把其当成文本文件来处理,而不用看做Excel的文件。

------解决方案--------------------
同意楼上。
------解决方案--------------------
关键是逗号和回车。
------解决方案--------------------
你可以把这个文件当做数据源使用OleDB来从其中获取数据,参考代码如下:

public static DataSet GetDataTable(string fileName, string sql, out string err)
{
sError = null;
string constr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + fileName + ";Extended Properties= 'text;HDR=No;FMT=Delimited ' ";
OleDbConnection cn = new OleDbConnection(constr);
DataSet ds = null;
try
{
cn.Open();
OleDbDataAdapter ada = new OleDbDataAdapter(sql, cn);
ds = new DataSet();
ada.Fill(ds);
}
catch (Exception ex)
{
err= ex.Message;
}
finally
{
cn.Close();
}
return ds;
}

------解决方案--------------------
CSV文本文件而已,行用回车换行符分隔,列用逗号分隔
用StreamReader读到字符串ReadLine,然后Split( ', ')到字符串数组
------解决方案--------------------
学习哈

------解决方案--------------------
/// <summary>
/// 把一个CSV文件读到一个DataTable中
/// </summary>
/// <param name= "strpath "> 文件完整路径 </param>
/// <returns> DataTable </returns>
public static DataTable GetTable(string strpath)
{
Regex reg = new Regex( "\ ",\ " ");
int intColCount = 0;
DataTable mydt = new DataTable( "myTableName ");

//DataColumn mydc;
//DataRow mydr;

//string strpath = " ";
string strline;
string[] aryline;

StreamReader mysr = new StreamReader(strpath,System.Text.Encoding.Default);
strline = mysr.ReadLine();

aryline = reg.Split(strline);

intColCount = aryline.Length;
for (int i = 0; i < aryline.Length; i++)
{
DataColumn mydc = new DataColumn(aryline[i].Replace( "\ " ", " "), typeof(string));
mydt.Columns.Add(mydc);
}

while ((strline = mysr.ReadLine()) != null)
{
aryline = reg.Split(strline);

DataRow mydr = mydt.NewRow();
for (int i = 0; i < intColCount; i++)
{
mydr[i] = aryline[i].Replace( "\ " ", " ");