skip first row in read of Excel file

别来无恙 提交于 2019-12-29 06:28:29

问题


Hello I'm trying to translate an Excel file to my dataGridView and it's having column name issues because the way the Excel file is formatted, there are two setup cells for the rest of the document. However the Column names are actually on Row #2. How can I skip the first row in the file read so that the Columns in the dataGridView show the cell values from the second row?

Current code:

  var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; data source={0}; Extended Properties=Excel 8.0;", openFileDialog1.FileName);

string query = String.Format("select * from [{0}$]", "Sheet1");
var adapter = new OleDbDataAdapter(query, connectionString);

DataSet ds = new DataSet();

adapter.Fill(ds);

DataTable dt = ds.Tables[0];

techGrid.DataSource = dt;

回答1:


Just like Thit Lwin has commented. Remove first row before set dt as datasource.

DataRow row = dt.Rows[0];
dt.Rows.Remove(row);
techGrid.DataSource = dt;



回答2:


The correct method is to tell Excel exactly where in the worksheet to find your column headers and data. Importing the entire sheet and trying to reconstruct your headers from an arbitrary data row is asking for serious trouble. OPENQUERY does not guarantee row order. In testing it will appear to always import in order, but as soon as you move it to a system with a multi-volume tempdb or a heavily loaded production system, your imports will no longer be ordered, and your code will be trying to interpret your data as column headers.

instead of:

string query = String.Format("select * from [{0}$]", "Sheet1");

use:

string query = String.Format("select * from [{0}${1}]", "Sheet1","A2:ZZ");

EDIT: use "A2:end" instead of "A2:ZZ".




回答3:


There is an easier way than programatically removing the rows, use the header row property of the connection string. This should skip the first row for you and you can then do what you do with the rest of the rows from there. From ConnectionStrings.com:

Provider=Microsoft.ACE.OLEDB.12.0; Data Source=myOldExcelFile.xls; 
Extended Properties="Excel 12.0;HDR=YES";

"HDR=Yes;" indicates that the first row contains columnnames, not data. "HDR=No;" indicates the opposite.




回答4:


You can skip as many rows you want like this

IEnumerable<DataRow> newRows = dt.AsEnumerable().Skip(numberOfRows);
DataTable  dt2 = newRows.CopyToDataTable();


来源:https://stackoverflow.com/questions/9713048/skip-first-row-in-read-of-excel-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!