在C#中基于传入的Excel数据dynamic创build数据表?

我试图导入Excel表格到C#中的数据表。 我一直得到一个越界exception,因为列值是由我硬编码。

for(int c = 0; c <40; c ++){…}

所以,而不是硬编码这一点,并有一大堆列在我的数据表的空列,是否有一种方法来计算所有的列在我创build表之前传入? 从而允许我dynamic创build表中的传入数据?

以下是我的代码。

if (fileUpload.HasFile) { DataTable dt = new DataTable(); for (int c = 0; c <40; c++) { dt.Columns.Add(c.ToString(), typeof(string)); } using (Stream fileStream = fileUpload.PostedFile.InputStream) using (StreamReader sr = new StreamReader(fileStream)) { string a = null; while ((a = sr.ReadLine()) != null) { dt.Rows.Add(a.Split(new char[] { ',' }).ToArray()); } } GridView1.DataSource = dt; GridView1.DataBind(); 

尝试使用这样的东西,而不是:

  DataTable dt; using (Stream fileStream = fileUpload.PostedFile.InputStream) using (StreamReader sr = new StreamReader(fileStream)) { string a = null; while ((a = sr.ReadLine()) != null) { string[] columns = a.Split(','); if (dt == null) { dt = new DataTable(); for (int i = 0; i < columns.Count(); i++) dt.Columns.Add(new DataColumn(i.ToString(), typeof(string))); } dt.Rows.Add(columns); } } GridView1.DataSource = dt; GridView1.DataBind(); 

只要第一行包含其余数据所具有的最大列数,就应该全部设置。

如果第一行是列名,则可以修改代码以跳过dt.Rows.Add(columns) ,并用columns[i].ToString()replacei.ToString() columns[i].ToString()以命名DataColumn正常。

如果列/值也被引号( " )包围,则可以修改上面的while语句,如下所示:

 while ((a = sr.ReadLine()) != null) { a = a.Substring(1, a.Length - 2); string[] columns = a.Split(new string[] { "\",\"" }, StringSplitOptions.None); if (dt == null) { dt = new DataTable(); for (int i = 0; i < columns.Count(); i++) dt.Columns.Add(new DataColumn(i.ToString(), typeof(string))); } dt.Rows.Add(a.Split(new char[] { ',' }).ToArray()); } 

这将剥离第一个和最后一个"从整个string,然后拆分","你可能想玩一些虽然,并添加代码来弄清楚你的字段是如何分隔,或有一些input字段,你可以指定,也就是说,如果你的input是如何定义的variables。