繁体   English   中英

尝试使用OleDb在C#中丢失试图读取Excel文件的数据

[英]Missing data trying to read an excel file In c# using OleDb

我尝试在C#中读取Excel文件时遇到问题

filePath = txtExcelFile.Text;
                string[] fileSpit = filePath.Split('.');
                if (filePath.Length > 1 && fileSpit[1] == "xls")
                {
                    connString = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=No'";
                }
                else
                {
                    connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 12.0;HDR=No'";
                }
OleDbCommand cmd = new OleDbCommand(@"Select * from [" +comboBox1.SelectedValue.ToString() + "]", ole);
OleDbDataAdapter oledata = new OleDbDataAdapter();
oledata.SelectCommand = cmd;
DataSet ds = new DataSet();
oledata.Fill(ds);
dataGridView1.DataSource = ds.Tables[0].DefaultView;

但是它仅显示部分数据。 我已附上图片。

它读取前几条记录,并确定该列为整数类型,当发现非整数类型的数据时该列将失败。

您需要在连接字符串中将HDR = No设置为属性,IMEX = 1

如果您在excel中指定列数据类型并将其设置为text,这也可能会有所帮助。 我认为这可行。

如果没有,您也可以尝试在第2行插入一个虚拟行(如果hdr = no,则在第1行插入),并在处理文件时跳过该行。

或者,您可以使用其他解决方案来读取文件。 我个人更喜欢ooxml,因为您不必依赖安装的oledb驱动程序beeing。

我之前也遇到过这种类型的问题,无论连接字符串中的设置为何我仍然缺少列数据。 为了解决该问题,我最终使用了开放源代码ExcelDataReader.DataSet nuget包( https://github.com/ExcelDataReader/ExcelDataReader ),该包无需使用oledb驱动程序或安装excel就可以读取Excel文件。

当我使用示例数据创建.xls和.xlsx时,以下代码应为您使用,返回的数据集包含所有值。 ExcelDataReader还将检测它是.xls还是.xlsx。

       var filePath = txtExcelFile.Text;

        using (var stream = File.Open(filePath,FileMode.Open,FileAccess.Read))
        {
            using (var reader = ExcelReaderFactory.CreateReader(stream))
            {
                var ds = reader.AsDataSet();
            }

            dataGridView1.DataSource = ds.Tables[0].DefaultView;
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM