首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以在QueryTable文件和工作表之间创建VBA CSV外部联接?

是否可以在QueryTable文件和工作表之间创建VBA CSV外部联接?
EN

Stack Overflow用户
提问于 2011-02-12 01:17:32
回答 3查看 5.7K关注 0票数 1

我正在创建一个excel工作簿来管理我的个人财务。我的银行提供CSV格式的交易数据,我找到了一种使用QueryTable (使用“文本”连接)将数据导入excel的方法。

我希望自动将事务类别规则应用于每个导入的事务。我有一个包含两列的工作表-一个字符串与我的银行的CSV文件中提供的事务"details“进行匹配,另一个是应用于匹配事务的类别。

是否可以在CSV数据和categories工作表之间创建外连接,并将结果表转储到另一个工作表中?

例如(SQL伪代码):从csvfile csv左外部联接工作表ws ON csv.details ~= ws.details中选择csv.date、csv.details、csv.debit、csv.credit、ws.category

上面的~=可能是某种类型的字符串匹配。我可以理解SQL,我的问题是如何将CSV文件和工作表合并到同一个QueryTable中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-12 04:48:12

Excel将不闪烁地打开CSV文件,但如果您愿意,也可以使用连接字符串。甚至可以编写一个查询,将现有工作表或命名区域与使用Excel连接的文本文件进行比较。您所需要的只是一个小小的VBA。

代码语言:javascript
运行
复制
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

'Note HDR=Yes, that is, first row contains field names '
'and FMT delimted, ie CSV '
strCon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\Docs\;" _
& "Extended Properties=""text;HDR=Yes;FMT=Delimited"";"

cn.open strcon

'You would not need delimiters ('') if last field is numeric: '    
strSQL="SELECT FieldName1, FieldName2 FROM The.csv " _
& " WHERE LastFieldName='SomeTextValue'"

rs.Open strSQL, cn
Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs

您可以对连接使用任何合适的Jet SQL查询,但要注意区分大小写。例如,使用与当前工作簿的连接:

代码语言:javascript
运行
复制
Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim s As String
Dim i As Integer, j As Integer

''This is not the best way to refer to the workbook
''you want, but it is very convenient for notes
''It is probably best to use the name of the workbook.

strFile = ActiveWorkbook.FullName

''Note that if HDR=No, F1,F2 etc are used for column names,
''if HDR=Yes, the names in the first row of the range
''can be used.
''This is the Jet 4 connection string, you can get more
''here : http://www.connectionstrings.com/excel

strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
    & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"

''Late binding, so no reference is needed

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")


cn.Open strCon

strSQL = "SELECT * " _
       & "FROM [Sheet1$] a " _
       & "LEFT JOIN [Text;FMT=Delimited;HDR=Yes;" _
       & "DATABASE=C:\Docs].Import.txt b " _
       & "ON a.[Id]=b.[Id] "

rs.Open strSQL, cn, 3, 3


''Pick a suitable empty worksheet for the results

Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs

''Tidy up
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
票数 2
EN

Stack Overflow用户

发布于 2011-06-09 03:40:59

可以在ADO查询中使用ISAM名称创建引用不同数据源(csv、Excel、Access、txt、SQL、Oracle等)的外部联接。结果保存在可以根据需要发布回Excel或其他数据源的记录集中。搜索"SQL ISAM Names“来查找我在这个主题上的其他帖子。

票数 1
EN

Stack Overflow用户

发布于 2011-02-12 03:28:06

我确信更多的信息将有助于澄清我的困惑,但我不相信对CSV设置SQL查询是可能的,因为Excel不会将其识别为数据源。

您是否考虑过简单地将csv加载到Excel中并在数据上生成数据透视表/查找?

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4972019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档