【问题标题】:VB.net reading Excel pageVB.net读取Excel页面
【发布时间】:2013-06-25 10:55:21
【问题描述】:

我正在尝试读取 Excel 页面,但出现以下错误:

输入字符串的格式不正确。无法在 PHONE_NUM 列中存储 。预期类型为 Double。

似乎 oledb 命令期望该列是 double 类型(但实际上,它是一个电话号码字符串)。我想我在某处读到了这种情况,因为该命令看起来是列中的前几个项目,并根据该命令确定类型应该基于什么。无论如何总是将所有值作为字符串读取?

这是我正在使用的代码:

Dim connection As OleDb.OleDbConnection
Dim command As OleDb.OleDbCommand
Dim adapter As New OleDb.OleDbDataAdapter
Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + myFile + ";Extended Properties=Excel 12.0;"
Dim pgOne As String = "Page1$"
Dim pgTwo As String = "Page2$"
Dim selectOne As String = "SELECT * FROM [" & pgOne & "] WHERE COL1<>''"
Dim selectTwo As String = "SELECT * FROM [" & pgTwo & "]"

connection = New OleDb.OleDbConnection(connString)
Try
   If connection.State = ConnectionState.Open Then
   Else
      connection.Open()
   End If

   command = New OleDb.OleDbCommand(selectOne, connection)
   adapter.SelectCommand = command
   adapter.Fill(ds, "Table1")

   adapter.SelectCommand.CommandText = selectTwo
   adapter.Fill(ds, "Table2")
Catch ex As OleDb.OleDbException
Finally
   adapter.Dispose()
   If (Not command Is Nothing) Then
      command.Dispose()
   End If
   connection.Close()
End Try

【问题讨论】:

    标签: asp.net vb.net excel


    【解决方案1】:

    您可以通过以下两种方式之一将表格填充为字符串。如果您只想将它​​们作为字符串读取,则可以将一部分添加到连接字符串中,该部分应将混合数据类型列作为文本读取。或者,通过将标题行作为数据读取来将它们强制转换为字符串类型。您也可以使用模式来读取表定义,但如果这些对您不起作用,我需要找到更多信息。

    第一个选项更简单:

    首先更改您的连接字符串以添加 IMEX=1

    'Add IMEX=1
    Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;IMEX=1;Data Source=" + myFile + ";Extended Properties=Excel 12.0;"
    

    这应该会在行中具有混合数据类型的任何数据列上为您提供基于 String 的列。

    另一种方法是通过指定连接字符串中没有标题行将标题行读取为数据行来强制字符串列类型。然后,您可以删除它以获得一个字符串数据列。

    'Add HDR=NO
    Dim connString As String = "Provider=Microsoft.ACE.OLEDB.12.0;HDR=NO;Data Source=" + myFile + ";Extended Properties=Excel 12.0;"
    

    如果这些对您不起作用,我会进行更多研究。

    【讨论】:

    • 感谢您的回复。我尝试了这两个建议,但得到相同的错误“找不到可安装的 ISAM”。尝试打开连接时。有什么想法吗?
    • 嗯,ISAM 错误已修复 (stackoverflow.com/questions/8120699/…),但我仍然遇到问题。使用 IMEX=1 不起作用。尝试使用 HDR=NO 会导致另一个错误“没有为一个或多个必需参数提供值。”
    • 试试 IMEX=1;HDR=NO;一起 - 仍然没有骰子,然后我会了解事物的架构方面
    • 是的,那没用。我最终只是做了一个工作,在那里我手动创建了表格列。生病发布我在原始问题中所做的事情。不过感谢您的帮助!
    • 啊,所以你先创建了模式:P 我没能在午休时间做这件事。干得好。
    【解决方案2】:

    如前所述,我无法解决此问题,因此我最终手动创建了一个架构并在绑定数据时对其进行格式化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 2011-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多