从Excel C#中读取带有长字符串的单元格

时间:2018-12-21 07:35:59

标签: c# excel datatable

我正在尝试在datatable()中加载带有长数据字符串的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);
            }
        }

这是Data可视化工具的屏幕截图: enter image description here

看起来它加载的拨号代码不是全部。

请有人指导我这段代码有什么问题吗?还是我使用的数据类型有问题?

谢谢!

2 个答案:

答案 0 :(得分:0)

我无法使用oledb读取值。但是我从nuget安装了EPPLUS。在我读取所有值之后

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();
            }

        } 

答案 1 :(得分:0)

这是我找到的解决方案:

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;
        }
    }

@Emre谢谢您的努力,您已将我指向EPPLUS,并使用EP plus已成功实施了该解决方案。