我有一个奇怪而令人沮丧的情况:我创建了一个基于SQL Server表的PowerPivot。我选择了SQLNCLI11提供程序。
一切都在我的笔记本电脑上运行良好,但当一位同事在自己的电脑上打开表格并想要刷新数据时,Excel会抱怨提供商未在机器上注册。这是第一个奇怪的事情:我使用正确的位版本安装了SQL Server Native Client提供程序。但即使重启后该消息仍然存在。
为了解决这种情况,我使用了中描述的步骤更改了提供程序 https://support.microsoft.com/en-us/help/2955369/cannot-modify-the-odata-connections-in-an-excel-2013-powerpivot-workbo
现在,奇怪且令人沮丧的事情是:当我(或我的同事)刷新数据时,Excel会更改提供者。为什么呢?
这是最初的情况:
然后我更改连接:提供程序更改为SQL Server的MS Ole DB提供程序,对于记录我还将数据源更改为IP地址:
我保存Excel工作表,关闭它然后重新打开它。数据源仍然是修改过的数据源。但是:当我刷新数据然后再次检查数据源时,它已恢复到原始状态。
基本上问题是:如何永久更改现有连接?
现在我们就是这样:任何想法为什么我的同事们一直在抱怨SQLNCLI11提供商没有注册?
我使用的是Excel 2016,SQL Server版本是2014 SP2。
感谢您的时间
答案 0 :(得分:0)
由于您提到excel 2016,一个选项是使用Power Query加载Power Pivot模型。唯一的缺点就是强制查询意味着重新创建连接/表,如果你已经创建了很多计算/数据透视表,这可能很痛苦。
使用Power Query时,它将处理所有连接/数据转换,而power pivot仅关注返回的结果集。这意味着您可以通过编辑查询来交换数据源类型,例如从excel开始 - > MS Access - > SQL数据库作为连接类型,无需在Power Pivot中重新创建连接/表。
Power Query中的大多数操作都是通过GUI完成的,但有时可以编辑脚本也很有用。一个很好的例子是引用一个参数表,该参数表包含连接和过滤条件的信息。
下面的查询脚本作为示例连接到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]
答案 1 :(得分:0)
好的,我终于找到了一种(脏)方式让事情再次发生:我将xlsx扩展名重命名为zip并更改了xl \ connections.xml。我改变了所有
<x15:oledbPr connection
具有正确提供者的元素并存储我的密码。保存更改后,它再次起作用。
我还发现,如果您在其中一个查询中更改了别名,则无法再刷新数据。起初我只是删除了查询并重新添加了它。但是,您也可以在XML文件中手动更改此设置。只需更改
即可<x15:dbCommand
元素在相同的connections.xml中。