C # неправильное чтение из Excel с Oledb - PullRequest
0 голосов
/ 11 июня 2018
 private void OnCreated(object sender, FileSystemEventArgs e)
        {
            excelDataSet.Clear();
            string extension = Path.GetExtension(e.FullPath);
            if (extension == ".xls" || extension == ".xlsx")
            {
                string ConnectionString = "";
                if (extension == ".xls") { ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = '" + e.FullPath + "';Extended Properties=\"Excel 8.0;HDR=YES;\""; }
                if (extension == ".xlsx") { ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = '" + e.FullPath + "';Extended Properties=\"Excel 12.0;HDR=YES;\""; }

                using (OleDbConnection conn = new OleDbConnection(ConnectionString))
                {
                    conn.Open();
                    OleDbDataAdapter objDA = new OleDbDataAdapter("select * from [Sheet1$]", conn);
                    objDA.Fill(excelDataSet);
                    conn.Close();
                    conn.Dispose();
                }
            }
        }

Это мой код.Это работает, когда запускается мой Filewatcher.Проблема в том, что у файла Excel, который я прочитал, есть 1 строка заголовка и 3 строки, которые имеют значения.Когда я использую этот код и проверяю количество строк в наборе данных, я получаю 9 .. Я понятия не имею, откуда он берет эти 9, я делаю что-то не так?Я проверяю свой код в течение последних 30-35 минут и все еще не могу найти, что я делаю неправильно. Я правильно понял столбец, но строки не работают.Мне не нужна строка заголовка btw

Обновление: в моем примере файла Excel было 3 строки, и я получил 9 в качестве числа строк.Я просто скопировал эти строки и сделал мой файл 24 строки + 1 строка заголовка, и когда я сделал rows.count, я получил 24 в качестве ответа.Так все работало нормально?Это нормально?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Существует Nuget по имени Linq to Excel.Я использовал этот nuget в нескольких проектах для запроса данных внутри файлов .cvs и .xlsx без каких-либо затруднений, это легко реализовать.Возможно, он неэффективен, но может решить вашу проблему.

Вот документация Linq to Excel

0 голосов
/ 11 июня 2018

Я настоятельно рекомендую вам взглянуть на библиотеку EPPLUS https://github.com/JanKallman/EPPlus/wiki

У меня много проблем с oledb, пока я не нашел EPPLUS.Это действительно легко использовать для создания и обновления файлов Excel.Есть много хороших примеров, таких как пример из Как перебрать строки в таблице Excel с помощью epplus?

var package = new ExcelPackage(new FileInfo("sample.xlsx"));

ExcelWorksheet workSheet = package.Workbook.Worksheets[1];
var start = workSheet.Dimension.Start;
var end = workSheet.Dimension.End;
for (int row = start.Row; row <= end.Row; row++)
{ // Row by row...
    for (int col = start.Column; col <= end.Column; col++)
    { // ... Cell by cell...
        object cellValue = workSheet.Cells[row, col].Text; // This got me the actual value I needed.
    }
}
...