2015-08-03 2 views
0

У меня есть проблема с прокруткой файла excel. Я хочу, чтобы иметь возможность создать автоматический код, который будет обрабатывать несколько файлов ExcelПетля через файл excel в C#

Существует исправление заголовка в каждом файле, так что «реальные» Данные начинаются в строке 15.

Пытаюсь используйте «usedRange», но я действительно не понимаю документа.

На самом деле, у меня есть это:

var excel = new Excel.Application(); 
var wkb = OpenBook(excel, _myExcelFile, true, false, false); 
var sheet = wkb.Sheets["B.C"] as Excel.Worksheet; 
var usedRange = sheet.UsedRange; 
var i = 0; 
foreach (Excel.Range row in sheet.UsedRange.Rows) 
{ 
    i++; 
    // I get data like this (for column 2 for example) : 
    // Convert.ToString(row.Cells[i, 2].Value); 
} 

Проблема заключается в том, что мой файл Excel имеет более 3000+ строк, но возвращается цикл только 1800+, я не могу понять, почему.

Я думаю, что есть проблема с функцией «UsedRange», но не знаю почему.

Как я могу перебрать ВСЕ строки в моем файле?

+3

Вы должны изучить весь лист в массиве 2d и затем повторить это. Чтение ячейки листа Excel по ячейке происходит очень медленно. Взгляните на принятый ответ здесь: http://stackoverflow.com/questions/7613898/how-to-read-an-excel-spreadsheet-in-c-sharp-quickly –

+0

Он работает отлично и очень быстро! Большое спасибо :) – BlackAlpha

+0

Добро пожаловать. Рад, что это помогло :) –

ответ

0

Другой вариант, чтобы превратить ваш первенствует в DataTable - следующее непроверенных (я не преуспеть на этом компьютере)

System.Data.OleDb.OleDbConnection MyConnection; 
System.Data.DataTable DtSet; 
System.Data.OleDb.OleDbDataAdapter MyCommand; 
MyConnection = new System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\\csharp.net-informations.xls';Extended Properties=Excel 8.0;"); 
MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection); 
MyCommand.TableMappings.Add("Table", "TestTable"); 
DtSet = new System.Data.DataTable(); 
MyCommand.Fill(DtSet); 
MyConnection.Close(); 

Вы можете сделать LINQ на нем с такими вещами, как

var x = DTset.AsEnumberable().Where(r => r["My Field"].ToString() == "Pick me"); 

или просто используйте его как обычный datatable