使用 Excel VBA 将 Powerpivot 连接更改为 csv 文件
Use Excel VBA to change Powerpivot connection to csv file
如何使用 vba 修改 Powerpivot 到 csv 文件的连接?我有一个 Excel 工作簿,其中包含连接到 csv 文件的 Powerpivot 模型。在 Powerpivot window 中,我可以导航到“主页”->“现有连接”并根据需要编辑文件路径。我无法在 vba 中编辑它。
- 我发现 this link 关于参数化 Powerpivot 连接。
不幸的是,我不知道如何修改以应用于 csv 文件连接而不是数据库连接。
- this page 中描述了另一种方法。此方法创建与 Excel 本身中的数据的连接。然后该连接在 Powerpivot 中可用。重要的是不要在 Powerpivot 中创建连接,因为作者说在 Powerpivot 中创建的连接不能被 vba 修改。
我可以通过
Data->Get External Data->From Text menu option
。
我可以使用 "Workbooks("myWorkbook.xlsm").Connections.AddFromFile "data.csv" 在 vba 中创建相同的连接。我可以在数据->连接->连接对话框。但是,当我尝试使用 WorkbookConnections.TextConnection 属性 在 vba 中设置它时,vba 说 "Object doesn't support this property or method".
以上link着重于数据库连接而不是csv文件连接。但是,似乎可以使用一个来设置 csv 文件
Microsoft ACE OLEDB 12.0 连接,但我不太了解。
关于 vba 修改枢轴源的 SO 也有类似的问题(如此处:Changing pivot table external data source path with Excel macro)。
但是,我不想将数据放入 Excel 中的 table,我想连接到它以便在 Powerpivot 中使用它。
我或许可以使用 Power Query 来完成此操作,但由于我已经拥有所需格式的 csv,所以我不想再引入这个额外的步骤。
我在 Windows 7 上使用 Excel 2013 64 位。感谢您的帮助。
我一直在玩类似的东西。还没有成功,但也许我们可以一起解决...
我注意到的一件事是,这些与 CSV 文件的连接看起来实际上并不是您所期望的 TextConnections,而是 OLEDBConnections。
编辑:根据https://goo.gl/x17Nuj,这是不可能的:
Once you modify the connection inside PowerPivot, the link between the Excel and the PowerPivot connections is broken. In fact, you can no longer modify the connection properties in Excel and, if you want to load another table, then you have to use the PowerPivot add-in. Needing to use the add-in means that the option of modifying the connection is no longer available in VBA Because (as you have seen) there is no way to modify the PowerPivot connections using VBA.
(重点是我的)
我能够通过将 csv 文件连接设置为 Microsoft.ACE.OLEDB.12.0 连接来修改文件位置。它实际上在数据连接向导中被标记为 "Microsoft Office 12.0 Access Database Engine OLE DB Provider"。这个 link 帮我弄明白了。您需要添加 "Microsoft ActiveX Data Objects 6.1" 作为参考。手动创建连接后,这是我用来修改连接的代码:
Sub editConnection()
With ActiveWorkbook.Connections("myConnectionName").OLEDBConnection
.Connection = "OLEDB;Provider= Microsoft.ACE.OLEDB.12.0; " & _
"Data Source=\something.com\shared\myDepartment\newDirectory; " & _
"Mode=Read;Extended Properties = ""Text;HDR=Yes;FMT=Delimited;"""
End With
ActiveWorkbook.Connections("myConnectionName").Refresh
End Sub
我不知道如何修改文件名。这也会强制 PowerPivot 中的 table 名称成为 csv 文件的名称。不断开连接就无法编辑它。
如何使用 vba 修改 Powerpivot 到 csv 文件的连接?我有一个 Excel 工作簿,其中包含连接到 csv 文件的 Powerpivot 模型。在 Powerpivot window 中,我可以导航到“主页”->“现有连接”并根据需要编辑文件路径。我无法在 vba 中编辑它。
- 我发现 this link 关于参数化 Powerpivot 连接。
不幸的是,我不知道如何修改以应用于 csv 文件连接而不是数据库连接。 - this page 中描述了另一种方法。此方法创建与 Excel 本身中的数据的连接。然后该连接在 Powerpivot 中可用。重要的是不要在 Powerpivot 中创建连接,因为作者说在 Powerpivot 中创建的连接不能被 vba 修改。
我可以通过
Data->Get External Data->From Text menu option
。
我可以使用 "Workbooks("myWorkbook.xlsm").Connections.AddFromFile "data.csv" 在 vba 中创建相同的连接。我可以在数据->连接->连接对话框。但是,当我尝试使用 WorkbookConnections.TextConnection 属性 在 vba 中设置它时,vba 说 "Object doesn't support this property or method".
以上link着重于数据库连接而不是csv文件连接。但是,似乎可以使用一个来设置 csv 文件 Microsoft ACE OLEDB 12.0 连接,但我不太了解。
关于 vba 修改枢轴源的 SO 也有类似的问题(如此处:Changing pivot table external data source path with Excel macro)。
但是,我不想将数据放入 Excel 中的 table,我想连接到它以便在 Powerpivot 中使用它。
我或许可以使用 Power Query 来完成此操作,但由于我已经拥有所需格式的 csv,所以我不想再引入这个额外的步骤。
我在 Windows 7 上使用 Excel 2013 64 位。感谢您的帮助。
我一直在玩类似的东西。还没有成功,但也许我们可以一起解决...
我注意到的一件事是,这些与 CSV 文件的连接看起来实际上并不是您所期望的 TextConnections,而是 OLEDBConnections。
编辑:根据https://goo.gl/x17Nuj,这是不可能的:
Once you modify the connection inside PowerPivot, the link between the Excel and the PowerPivot connections is broken. In fact, you can no longer modify the connection properties in Excel and, if you want to load another table, then you have to use the PowerPivot add-in. Needing to use the add-in means that the option of modifying the connection is no longer available in VBA Because (as you have seen) there is no way to modify the PowerPivot connections using VBA.
(重点是我的)
我能够通过将 csv 文件连接设置为 Microsoft.ACE.OLEDB.12.0 连接来修改文件位置。它实际上在数据连接向导中被标记为 "Microsoft Office 12.0 Access Database Engine OLE DB Provider"。这个 link 帮我弄明白了。您需要添加 "Microsoft ActiveX Data Objects 6.1" 作为参考。手动创建连接后,这是我用来修改连接的代码:
Sub editConnection()
With ActiveWorkbook.Connections("myConnectionName").OLEDBConnection
.Connection = "OLEDB;Provider= Microsoft.ACE.OLEDB.12.0; " & _
"Data Source=\something.com\shared\myDepartment\newDirectory; " & _
"Mode=Read;Extended Properties = ""Text;HDR=Yes;FMT=Delimited;"""
End With
ActiveWorkbook.Connections("myConnectionName").Refresh
End Sub
我不知道如何修改文件名。这也会强制 PowerPivot 中的 table 名称成为 csv 文件的名称。不断开连接就无法编辑它。