Чтение ячейки с длинными строками из Excel C # - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь загрузить файл Excel с длинными строками данных в таблицу данных (). Вот пример данных из Excel: enter image description here

при загрузке этих данных в таблицу данных, я вижуон загружает несколько номеров из кодов набора и не загружает полные данные.

Вот пример кода, который я написал:

        string sheetName = null;

        using (OleDbConnection connection = new OleDbConnection(connString))
        {
            connection.Open();
            sheetName = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null)?.Rows[0]["TABLE_NAME"].ToString();
            string selectCmd = String.Format("select * from [{0}]", sheetName);
            using (OleDbCommand command = new OleDbCommand(selectCmd, connection))
            using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
            {
                adapter.Fill(fileData);
            }
        }

Вот снимок экрана визуализатора данных: enter image description here

Смотри, он загрузил не все коды набора, а все.

Кто-нибудь может подсказать мне, что не так с этим кодом?или что-то не так с типами данных, которые я использую?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вот решение, которое я нашел:

public static DataTable GetDataTableFromExcel(string path, bool hasHeader = true)
    {
        using (var pck = new OfficeOpenXml.ExcelPackage())
        {
            using (var stream = File.OpenRead(path))
            {
                pck.Load(stream);
            }
            var ws = pck.Workbook.Worksheets.First();
            DataTable tbl = new DataTable();
            foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
            {
                tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
            }
            var startRow = hasHeader ? 2 : 1;
            for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
            {
                var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
                DataRow row = tbl.Rows.Add();
                foreach (var cell in wsRow)
                {
                    row[cell.Start.Column - 1] = cell.Text;
                }
            }
            return tbl;
        }
    }

@ Эмре, спасибо за ваши усилия, вы указали мне на EPPLUS и, используя EP plus, я успешно внедрил решение.

0 голосов
/ 21 декабря 2018

Я не могу прочитать значения с oledb.Но я установил EPPLUS из Nuget.После того, как я прочитал все значения

using (var package = new ExcelPackage(new FileInfo(@"C: \Users\Emre Asus\Desktop\LongExcelDataRead-master\NoRatesFinalPL.xlsx")))
        {
           ExcelWorksheet workSheet = package.Workbook.Worksheets[1];

            for (int i = 1; i < workSheet.Dimension.End.Row ; i++)
            {
                string value = workSheet.Cells[i, 2].Value.ToString();
            }

        } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...