gpt4 book ai didi

c# - 使用 C# 访问 Excel 电子表格有时会为某些单元格返回空白值

转载 作者:可可西里 更新时间:2023-11-01 08:31:51 24 4
gpt4 key购买 nike

我需要访问 Excel 电子表格并将电子表格中的数据插入 SQL 数据库。然而,主键是混合的,大多数是数字,有些是字母数字。

我遇到的问题是,当数字键和字母数字键在同一个电子表格中时,字母数字单元格返回空白值,而所有其他单元格返回它们的数据没有问题。

我正在使用 OleDb 方法访问 Excel 文件。使用命令字符串检索数据后,我将数据放入 DataAdapter,然后填充 DataSet。我遍历数据集中第一个数据表中的所有行 (dr)。

我通过使用 dr["..."].ToString() 来引用列

如果我在 Visual Studio 2008 中调试项目并查看“扩展属性”,通过将鼠标悬停在“dr”上,我可以查看 DataRow 的值,但是应该是字母数字的主键是{}。其他值用引号括起来,但空白值有大括号。

这是 C# 问题还是 Excel 问题?

有没有人以前遇到过这个问题,或者找到了解决方法/修复?

提前致谢。

最佳答案

解决方法:

连接字符串:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=FilePath;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";

  1. HDR=Yes; 表示第一行包含列名,而不是数据。 HDR=No;表示相反。

  2. IMEX=1; 告诉驱动程序始终将“混合”(数字、日期、字符串等)数据列作为文本读取。请注意,此选项可能会影响 excel 工作表写访问权限。

SQL 语法 SELECT * FROM [sheet1$]。 IE。 excel 工作表名称后跟 $ 并括在 [ ] 括号中。

重要:

  • 检查位于 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel] 的注册表 REG_DWORD“TypeGuessRows”。这是不让 Excel 仅使用前 8 行来猜测列数据类型的关键。将此值设置为 0 以扫描所有行。这可能会影响性能。

  • 如果 Excel 工作簿受密码保护,您将无法打开它进行数据访问,即使使用连接字符串提供正确的密码也是如此。如果您尝试,您会收到以下错误消息:“无法解密文件。”

关于c# - 使用 C# 访问 Excel 电子表格有时会为某些单元格返回空白值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/298726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com