阻止 Excel 修改数据连接

Prevent Excel from modifying dataconnection

我有一个奇怪且令人沮丧的情况:我创建了一个基于 SQL 服务器表的 PowerPivot。我选择了 SQLNCLI11 供应商。

在我的笔记本电脑上一切正常,但是当一位同事在他自己的电脑上打开 sheet 并想要刷新数据时,Excel 抱怨提供程序未在机器上注册。这是第一件奇怪的事情:我安装了 SQL Server Native Client provider,版本正确。但即使在重新启动后该消息仍然存在。

为了解决这种情况,我使用中描述的步骤更改了提供程序 https://support.microsoft.com/en-us/help/2955369/cannot-modify-the-odata-connections-in-an-excel-2013-powerpivot-workbo

现在,奇怪而令人沮丧的事情是:当我(或我的同事)刷新数据时,Excel 将提供程序改回。为什么?

这是原来的情况:

然后我更改连接:SQL 服务器的提供程序更改为 MS Ole DB 提供程序,并且为了记录,我还将数据源更改为 IP 地址:

我保存 Excel sheet,关闭它然后重新打开它。数据源仍然是修改后的数据源。但是:当我刷新数据,再查看数据源时,又恢复到原来的状态了。

所以基本上问题是:如何永久更改现有连接?

现在我们开始了:知道为什么我的同事 pc 一直抱怨 SQLNCLI11 提供商未注册吗?

我使用的是 Excel 2016,SQL 服务器版本是 2014 SP2。

感谢您的宝贵时间

既然你提到了 excel 2016,一种选择是使用 Power Query 加载你的 Power Pivot 模型。唯一的缺点是要增强查询意味着重新创建 connection/table 如果您已经创建了很多 calculation/pivot table,这可能会很痛苦。

使用 Power Query 时,它会处理所有 connection/data 转换,power pivot 只关心返回的结果集。这意味着您可以通过编辑查询在数据源类型之间进行交换,例如从 excel --> MS Access --> SQL 数据库作为连接类型,而无需在 Power Pivot 中重新创建 connection/tables。

Power Query 中的大多数操作将通过 GUI 完成,但有时能够编辑脚本会很有用。一个很好的例子是引用参数 table,它包含连接位置和过滤条件等信息。

下面的查询脚本作为示例连接到一个 excel 文件,其位置定义为脚本中的文件变量。

Source = Excel.Workbook(File.Contents(File_Parameter), null, true),
Data = Source{[Item="Data",Kind="Sheet"]}[Data],

我可以将它换成使用不同的参数并稍微修改语法来处理 MS Access

Source = Access.Database(File.Contents(DB_Location), [CreateNavigationProperties=true]),
Data = Source{[Schema="",Item="factSellout"]}[Data]

好的,我终于找到了一个(肮脏的)方法让事情重新开始:我将 xlsx 扩展重命名为 zip 并更改了 xl\connections.xml。我改变了所有

<x15:oledbPr connection

元素与正确的提供商并存储我的密码。保存更改后它再次工作。

我还发现,如果您更改其中一个查询中的别名,则无法再刷新数据。起初我只是简单地删除了查询并重新添加了它。但是,您也可以在 XML 文件中手动更改它。只需更改

<x15:dbCommand

同一 connections.xml 中的元素。