我当前正在编写一些html" target="_blank">代码,这些代码可以通过ADODB连接访问单独的工作簿。由于速度原因,我选择了此方法,而不是其他方法。这是我的代码如下:
Sub GetWorksheetData(strSourceFile As String, strSQL As String, TargetCell As range)
Dim cn As ADODB.Connection, rs As ADODB.Recordset, f As Integer, r As Long
If TargetCell Is Nothing Then Exit Sub
Set cn = New ADODB.Connection
On Error Resume Next
cn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DriverId=790;ReadOnly=True;" & _
"DBQ=" & strSourceFile & ";"
' DriverId=790: Excel 97/2000
' DriverId=22: Excel 5/95
' DriverId=278: Excel 4
' DriverId=534: Excel 3
On Error GoTo 0
If cn Is Nothing Then
MsgBox "Can't find the file!", vbExclamation, ThisWorkbook.Name
Exit Sub
End If
' open a recordset
Set rs = New ADODB.Recordset
On Error Resume Next
rs.Open strSQL, cn, adOpenForwardOnly, adLockReadOnly, adCmdText
' rs.Open "SELECT * FROM [SheetName$]", _
cn, adOpenForwardOnly, adLockReadOnly, adCmdText
' rs.Open "SELECT * FROM [SheetName$]", _
cn, adOpenStatic, adLockOptimistic, adCmdText
' rs.Open "SELECT * FROM [SheetName$] WHERE [Field Name] LIKE 'A%'", _
cn, adOpenStatic, adLockOptimistic, adCmdText
' rs.Open "SELECT * FROM [SheetName$] WHERE [Field Name] LIKE 'A%' ORDER BY [Field Name]", _
cn, adOpenStatic, adLockOptimistic, adCmdText
' optional ways of retrieving a recordset
' Set rs = cn.Execute("[A1:Z1000]") ' first worksheet
' Set rs = cn.Execute("[DefinedRangeName]") ' any worksheet
On Error GoTo 0
If rs Is Nothing Then
MsgBox "Can't open the file!", vbExclamation, ThisWorkbook.Name
cn.Close
Set cn = Nothing
Exit Sub
End If
'RS2WS rs, TargetCell
TargetCell.CopyFromRecordset rs ' optional approach for Excel 2000 or later
If rs.State = adStateOpen Then
rs.Close
End If
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
现在,该代码大部分可用,但是当一行包含混合数据类型时,查询将跳过一些值。例如:
原始数据:
3844774 12505604
3844794 12505604
4266113 3281271
4295817 1307HX
返回的数据:
3844774 12505604
3844794 12505604
4266113 3281271
4295817
注意如何跳过数据的最后一位。这适用于多个条目,但只有那些包含字母(使其成为文本)的条目才适用。原始表也将所有内容都设置为文本。有什么建议可以避免不跳过这些行吗?
提前致谢!
那是因为您缺少IMEX :)
请参阅此链接( 将数据视为文本部分 )
http://connectionstrings.com/excel-2007
从该链接引用。
将数据视为文本
当您要将文件中的所有数据都视为文本时,请使用此选项,以覆盖Excels列类型“常规”以猜测列中的数据类型。
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\myFolder\myExcel2007file.xlsx;Extended Properties="Excel 12.0 Xml;HDR=YES;IMEX=1";
如果您想将列标题读入结果集中(即使有标题也使用HDR = NO)并且列数据为数字,请使用IMEX = 1以避免崩溃。
始终使用IMEX =
1是检索混合数据列数据的一种更安全的方法。考虑以下情况:一个Excel文件可能工作正常,原因是该文件的数据导致驱动程序猜测一种数据类型,而另一个包含其他数据的文件导致驱动程序猜测另一种数据类型。这可能会导致您的应用崩溃。
对于XLS文件,请参见此链接
http://connectionstrings.com/excel
高温超导
我正在实现一个TCP堆栈,并且遇到了半关闭连接的问题。 我的实现充当服务器端。客户端建立连接,然后发送一些数据,然后发送“FIN”消息。然后,服务器确认来自客户端的数据,发送自己的一些数据,然后才关闭其一半的连接(发送“FIN”)。 问题是,客户端没有确认服务器在半封闭连接上发送的数据,也没有确认其最终的“FIN”消息。根据netstat,客户端处于FIN_WAIT2状态。在服务器不发送任何数据的
我试图从一个连接表中获取数据并显示它,所以我有一个用户表和我的连接表。处方用户表具有用户id和处方id。 所以我要做的是在这个userdetails页面上,显示所有的用户处方,并访问处方名称和描述等,但是当我尝试任何一种方法时,我会得到“尝试获取非对象的属性” 我认为,用户模型与处方用户模型有很多关系,处方用户模型与用户模型有一个归属关系。 控制器 用户详细信息刀片
我在工作簿中的工作表上有一个按钮,工作簿中有一个数据透视表,名为“保修模板.xlsm”。我希望该按钮复制从A5开始的第一列数据,并将该列粘贴到另一个名为“QA Matrix Template.xlsm”的工作簿中。我希望复制的数据在列的最后一个空白行结束,我希望粘贴数据的范围也粘贴在从D12开始的第一个空白行上。 我得到下标错误:'1004',我不知道为什么。它与我的&变量有关。如果我设置静态范围
本文向大家介绍使用Java从MongoDB检索数据时如何跳过文档?,包括了使用Java从MongoDB检索数据时如何跳过文档?的使用技巧和注意事项,需要的朋友参考一下 从MongoDB集合中检索记录时,可以使用skip()方法跳过结果中的记录。 句法 Java MongoDB库提供了一个具有相同名称的方法,以跳过记录,并绕过表示要跳过的记录数的整数值来调用此方法(基于find()方法的结果)。 示
所以在COL D中,我必须只粘贴COL A和COL C相等的值,如果这些值不相等,则跳过或粘贴COL D中的任何东西 我写过类似这样的代码,但不幸的是它粘贴了一切!!
我正在使用XAMPP。我试图在网页上转储我的db_数据。错误消息是“调用未定义的函数mysql\u connect”。我应该导入一些文件吗? 或者我应该在代码中进行更改??