导入 Excel 工作表时出现 C# 问题

标签 c# excel

我已经在互联网上搜索了这个,但实际上找不到类似的问题。我正在编写一个从 Excel 获取数据并查看它的应用程序。
我所有的测试都是正确的,但突然间我发现导入包含连续数字的列然后字母将导致根本不显示包含这些字母的字段

PathConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 8.0;HDR=Yes;\";";

        OleDbConnection conn = new OleDbConnection(PathConn);
        System.Data.DataTable dtSchema = new System.Data.DataTable();

        conn.Open();
        dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
        string Sheet1 = dtSchema.Rows[0].Field<string>("TABLE_NAME");

        conn.Close();
        OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from [" + Sheet1 + "]", conn);
        DataSet ds = new DataSet();
        myDataAdapter.Fill(ds);

第一个数据集是常规结果

7841
7847s
2344
2262
7738
JD32916
JD329161
JD318161
JD31716
JD7643
JD21116
7194

第二个数据集是有问题的结果(请注意,我从“7847s”中删除了“s”)

7841
7847
2344
2262
7738



7194

如您所见,所有带有字母的字段都消失了,
它仅发生在有 5 个或更多连续字段且其中没有字母的情况下。示例(顶部的第二个数字包含“s”以防止发生该错误)

最佳答案

使用IMEX=1在您的扩展属性中将所有列视为文本值。如果没有它,Jet 提供程序将根据该列中大多数值的类型推断数据类型,这可能不正确。

其次,由于您的数据没有标题行,您应该使用 HDR=NO在您的扩展属性中也是如此。

关于导入 Excel 工作表时出现 C# 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40898372/

相关文章:

c# - 关闭 IsTextSearchable 的组合框过滤会清除文本

c# - 定义运算符 + 、 = 和 +=

c# - 为什么我不能在需要相同上下文的 Controller 中注入(inject)需要 httpclient 和 EF 上下文的服务

excel - 仅当该行中的另一列不为空时,如何使excel中的计数功能计算该单元格

excel - 如何使用VBScript有效刷新多个Excel电子表格的外部数据?

javascript - 使用 IE 导航时处理网站弹出窗口

c# - 查找格式正确的括号的所有组合

c# - MyAnimeList REST API 限制

Excel:用于将公式向下拖动到列末尾的宏

excel - 如何提取雅虎财经中的股票名称