创建CSV读取类CSVReader
public class CSVReader { // 对象定义 private Stream objStream; private StreamReader objReader; // 需要添加System.IO.Stream命名空间 public CSVReader(Stream filestream) : this(filestream, null) { } public CSVReader(Stream filestream, Encoding enc) { this.objStream = filestream; //check the Pass Stream whether it is readable or not if (!filestream.CanRead) { return; } objReader = (enc != null) ? new StreamReader(filestream, enc) : new StreamReader(filestream); } //解析每行数据 public string[] GetCSVLine() { string data = objReader.ReadLine(); if (data == null) return null; if (data.Length == 0) return new string[0]; //System.Collection.Generic use this namespace ArrayList result = new ArrayList(); //解析CSV数据 ParseCSVData(result, data); return (string[])result.ToArray(typeof(string)); } private void ParseCSVData(ArrayList result, string data) { int position = -1; while (position < data.Length) result.Add(ParseCSVField(ref data, ref position)); } private string ParseCSVField(ref string data, ref int StartSeperatorPos) { if (StartSeperatorPos == data.Length – 1) { StartSeperatorPos++; return ""; } int fromPos = StartSeperatorPos + 1; if (data[fromPos] == '"') { int nextSingleQuote = GetSingleQuote(data, fromPos + 1); int lines = 1; while (nextSingleQuote == -1) { data = data + "\n" + objReader.ReadLine(); nextSingleQuote = GetSingleQuote(data, fromPos + 1); lines++; if (lines > 20) throw new Exception("lines overflow: " + data); } StartSeperatorPos = nextSingleQuote + 1; string tempString = data.Substring(fromPos + 1, nextSingleQuote – fromPos – 1); tempString = tempString.Replace("'", """); return tempString.Replace("\"\"", "\""); } int nextComma = data.IndexOf(',', fromPos); if (nextComma == -1) { StartSeperatorPos = data.Length; return data.Substring(fromPos); } else { StartSeperatorPos = nextComma; return data.Substring(fromPos, nextComma – fromPos); } } private int GetSingleQuote(string data, int SFrom) { int i = SFrom – 1; while (++i < data.Length) if (data[i] == '"') { if (i < data.Length – 1 && data[i + 1] == '"') { i++; continue; } else return i; } return -1; } }
该类创建好后,按钮的click事件按如下方式处理:
if (FileUpload1.PostedFile.FileName == string.Empty) { Label1.Visible = true; return; } else { //save the file //restrict user to upload other file extenstion string[] FileExt = FileUpload1.FileName.Split('.'); string FileEx = FileExt[FileExt.Length - 1]; if (FileEx.ToLower() == "xls") { FileUpload1.SaveAs(Server.MapPath("File//" + FileUpload1.FileName)); } else { Label1.Visible = true; return; } } //create object of previous memtain class CSVReader and pass the stream XLsReader reader = new XLsReader(FileUpload1.PostedFile.InputStream); //get the header from hear string[] headers = reader.GetXLSine(); DataTable dt = new DataTable(); //add headers of dara table foreach (string strHeader in headers) dt.Columns.Add(strHeader); string[] data; while ((data = reader.GetXLSine()) != null) dt.Rows.Add(data); //绑定gridview GridView1.DataSource = dt; GridView1.DataBind();
免责声明:好库网所展示的信息由买卖双方自行提供,其真实性、准确性和合法性由信息发布人负责。好库网不提供任何保证,并不承担任何法律责任。