我使用以下代码将CSV文件加载到DataTable对象中。问题是CSV文件中的第一行被加载到DataTable中作为标题行,而不是作为数据行。我如何使所有行从CSV文件加载为数据行,并使数据表头行空或任何东西。
这是我的代码
private DataTable ConvertCSVtoDataTable()
{
DataTable dataTable = new DataTable();
using (StreamReader sr = new StreamReader(csvfilename))
{
string[] headers = sr.ReadLine().Split(',');
foreach (string header in headers)
{
dataTable.Columns.Add(header);
}
while (!sr.EndOfStream)
{
string[] rows = sr.ReadLine().Split(',');
DataRow dr = dataTable.NewRow();
for (int i = 0; i < headers.Length; i++)
{
dr[i] = rows[i];
}
dataTable.Rows.Add(dr);
}
}
return dataTable;
}
问题是您使用第一个ReadLine语句来添加Header对象。您只使用第二个ReadLine填充DataTable中的行。试试这个:
private DataTable ConvertCSVtoDataTable()
{
bool firstRow = true;
DataTable dataTable = new DataTable();
using (StreamReader sr = new StreamReader(csvfilename))
{
while (!sr.EndOfStream)
{
string[] values = sr.ReadLine().Split(',');
if (firstRow)
{
firstRow = false;
for (int i = 0;i < values.Length; i++)
{
dataTable.Columns.Add("Column" + i);
}
}
DataRow dr = dataTable.NewRow();
for (int i = 0; i < values.Length; i++)
{
dr[i] = values[i];
}
dataTable.Rows.Add(dr);
}
}
return dataTable;
}
编辑:对不起,我忘了添加列标题…这应该是"可行的"。不幸的是,我没有c#调试器在我面前得到准确的语法,但我相信你可以弄清楚我想做什么。
你正在显式地读取"Header"。如果我正确地理解你,你只需要删除头部管理。这将给您留下没有标题或空标题的列。
private DataTable ConvertCSVtoDataTable()
{
DataTable dataTable = new DataTable();
using (StreamReader sr = new StreamReader(csvfilename))
{
while (!sr.EndOfStream)
{
string[] rows = sr.ReadLine().Split(',');
DataRow dr = dataTable.NewRow();
for (int i = 0; i < rows.Length; i++)
{
dr[i] = rows[i];
}
//IF the dataTable column count is less than the row column count add some columns.
if (dataTable.Columns.size() < dr.Columns.size()){
for(int i = 0; i < dr.Columns.size(); i++){
dataTable.Columns.add("");
}
}
dataTable.Rows.Add(dr);
}
}
return dataTable;
}