пропустить первую строку при чтении файла Excel - PullRequest
5 голосов
/ 15 марта 2012

Здравствуйте. Я пытаюсь преобразовать файл Excel в свой dataGridView, и у него возникают проблемы с именами столбцов, поскольку при форматировании файла Excel есть две ячейки настройки для остальной части документа. Однако имена столбцов на самом деле находятся на строке № 2. Как можно пропустить первую строку в файле для чтения, чтобы столбцы в dataGridView отображали значения ячеек из второй строки?

Текущий код:

  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;

Ответы [ 4 ]

11 голосов
/ 27 июля 2012

Правильный метод - указать Excel точно, где в таблице найти заголовки столбцов и данные.Импортирование всего листа и попытка восстановить заголовки из произвольной строки данных создает серьезные проблемы. OPENQUERY не гарантирует порядок строк. При тестировании будет казаться, что импорт всегда выполняется по порядку, но как только вы переместите его в систему с многотомной базой данных tempdb или сильно загруженной производственной системой, ваш импортбольше не будет заказываться, и ваш код будет пытаться интерпретировать ваши данные как заголовки столбцов.

вместо:

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

use:

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

EDIT:используйте "A2:end" вместо "A2:ZZ".

7 голосов
/ 15 марта 2012

Существует более простой способ, чем программное удаление строк, использовать свойство строки заголовка строки подключения.Это должно пропустить первый ряд для вас, и вы можете делать то же самое с остальными строками.От ConnectionStrings.com :

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

«HDR = Да;»указывает, что первая строка содержит имена столбцов, а не данные."HDR = No;"указывает на обратное.

4 голосов
/ 15 марта 2012

Так же, как прокомментировал Тит Лвин. Удалите первую строку, прежде чем установить dt в качестве источника данных.

DataRow row = dt.Rows[0];
dt.Rows.Remove(row);
techGrid.DataSource = dt;
3 голосов
/ 11 октября 2013

Вы можете пропустить столько строк, сколько хотите

IEnumerable<DataRow> newRows = dt.AsEnumerable().Skip(numberOfRows);
DataTable  dt2 = newRows.CopyToDataTable();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...