Как считать пустые строки при чтении из Excel - PullRequest
5 голосов
/ 06 сентября 2011

Я использую OLEDB для подключения и чтения данных из электронной таблицы Excel.У меня IMEX = "1", и все работает нормально.Моя проблема в том, что листы, с которых я читаю, могут начинаться с нескольких пустых строк, и количество пустых строк важно.Например, если я читал сетку 5x5, например:

- - - - -
- - - - -
2 - 3 3 8
- - - - -
- - 5 2 2

, где '-' представляет пустую ячейку.Важно то, что первые две строки пусты.Размер сетки является динамическим.Мой код, кажется, игнорирует первые пустые строки.Но имеет дело с пустой строкой в ​​строке 4, хорошо.

Как подсчитать количество пустых строк в начале листа Excel, используя OLEDB?

Я ограничен использованием OLEDB,Я бы не стал, если бы мне не пришлось; -)

using (var adapter = new OleDbDataAdapter("SELECT * FROM [" + worksheetName + "]", connString)) {
  var ds = new DataSet();
  adapter.Fill(ds, "FareChart");
  table = ds.Tables["FareChart"];
}

Строка подключения:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Windows\\TEMP\\e1842f90-74a7-42f2-a6fa-208396a1072e;Extended Properties=\"Excel 8.0;IMEX=1;HDR=No\""

ОБНОВЛЕНИЕ

Указание '.xls 'как расширение файла в строке подключения исправило эту проблему и правильно считывает пустые строки в начале.

Ответы [ 3 ]

1 голос
/ 17 июня 2015

проверьте код ниже: он вернет пустые строки ..

System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source = " + strFileName + "; Extended Properties = \"Excel 8.0;HDR=NO;IMEX=1\";"); /*for office 2007 connection*/
                    conn.Open();
string strQuery = "SELECT * FROM [" + Table + "]";
System.Data.OleDb.OleDbDataAdapter adapter = new  System.Data.OleDb.OleDbDataAdapter(strQuery, conn);
System.Data.DataTable ExcelToDataTable = new System.Data.DataTable();
adapter.Fill(ExcelToDataTable);

DT = ExcelToDataTable.Copy();

int count = DT.Rows.Cast<DataRow>().Where(row => row.ItemArray.All(field => field is System.DBNull || string.Compare((field as string).Trim(), string.Empty) == 0)).ToList().Count();
1 голос
/ 06 сентября 2011

Я думаю, что ваша проблема с вашей строкой подключения. Я тестировал приведенный ниже код, и он работал для меня:

     DataSet Contents = new DataSet();
     using (OleDbDataAdapter adapter = new OleDbDataAdapter("select FirstName,LastName,Email,Mobile from [" + mySheet + "]", connection))
     {
         adapter.Fill(Contents,"MyTable");
     }

     foreach (DataRow content in Contents.Tables["MyTable"].Rows)
     {
         if (content[0].ToString() == "" && content[0].ToString() == "" && content[0].ToString() == "" && content[0].ToString() == "")
         {
             Console.WriteLine("Empty Row");
         }
         else
         {
             Console.WriteLine(content[0] + " | " + content[1] + " | " + content[2] + " | " + content[3]);
         }
     }

Моя строка подключения:

    string cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Untitled 1.xls\";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"";
0 голосов
/ 07 сентября 2011

Как указано @ Knvn

Вам необходимо указать расширение файла .xls с именем файла в строке подключения.

...