Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用OleDb读取c#中的excel文件时缺少数据_C#_Excel - Fatal编程技术网

尝试使用OleDb读取c#中的excel文件时缺少数据

尝试使用OleDb读取c#中的excel文件时缺少数据,c#,excel,C#,Excel,我在尝试用C读取Excel文件时遇到问题# 但它只显示部分数据。我附上了图像。它读取前几条记录并确定列的类型为integer,当它找到非integer类型的数据时失败 您需要将HDR=No设置为连接字符串中的属性,如果在excel中指定列数据类型并将其设置为文本,则IMEX=1也可能会有所帮助。我认为这是可行的 如果没有,您也可以尝试在第2行(如果hdr=no,则在第1行)插入一个虚拟行,并在处理文件时跳过它 或者您可以使用其他解决方案来读取该文件。我个人更喜欢ooxml,因为您不必依赖于安装的

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


但它只显示部分数据。我附上了图像。

它读取前几条记录并确定列的类型为integer,当它找到非integer类型的数据时失败


您需要将HDR=No设置为连接字符串中的属性,如果在excel中指定列数据类型并将其设置为文本,则IMEX=1也可能会有所帮助。我认为这是可行的

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


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

我以前也遇到过同样的问题,无论连接字符串中的设置如何,我仍然缺少列数据。为了解决这个问题,我最终使用了开源的ExcelDataReader.DataSet nuget package(),它可以在不使用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;
        }

请包括设置Excel电子表格的
连接的代码。可能与Yap重复,我添加了Excel连接代码。但它仍然不起作用:(谢谢Rob,但我编辑了HDR=不,但它不起作用:(我不知道错误是什么:(您的文件中是否有标题?如果没有,请将其作为HDR=No输入,方法是将标题读取为天,并强制将所有数据读取为文本。我还建议将IMEX=1也更改。是的,谢谢Rob。我添加了IMEX=1,这是有效的。但我有一个新问题。DataGridview显示数据行比excel文件有效。Exp:excel文件有20行,但DataGridview没有显示25行、excel文件中的20行和5行空白行。因此,我无法对RowCount DataGridView进行右键操作@尝试删除excel中的“空白”行,它们实际上可能不是空白行。是的,我添加了HDR=NO和IMEX=1,所以这很有效。谢谢Dexter:)是的,我理解并感谢Darthchai。我在连接代码中添加了HDR和IMEX,这很有效。天哪,谢谢你!ExcelDataReader工作得很好!我已经为连接字符串忙了几天,试图找出偶尔丢失的数据(这当然不是类型问题,因为至少有十万行有混合的字符串/数字数据)。哦,是的,这是相当快的。
       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;
        }