我有一个excel 2013 powerpivot文档...连接到我托管的wcfdataservice ...数据连接工作正常,所有数据都被带回并成功填充到我的powerpivot图表/表中。
数据托管在数据Feed网址上,如下所示:
http://mydomain/Reporting/WcfDataService1.svc/
我有几十个客户,每个客户都需要收到同样的文件......但是编辑的DataFeedURL指向他们的托管数据服务......每个客户端都有不同的URL ...例如
http://Client1/Reporting/WcfDataService1.svc/
http://Client2/Reporting/WcfDataService1.svc/
长话短说...我希望客户使用我的C#Windows窗体应用程序,它将引用模板PowePivot报告...以及用户完成后设置有关其公司的各种信息。 ..我需要以编程方式保存PowerPivot报告的一个版本,该报告包含我生成的新URL的更新连接。
我试图按照以下方式执行此操作:
string workbookPath = String.Format("{0}\\{1}", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "PowerPivotSource.xlsx");
string workbookPath2 = String.Format("{0}\\{1}", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "PowerPivotTestOut.xlsx");
foreach (Excel.WorkbookConnection connection in excelWorkbook.Connections)
{
if (connection.Type == Excel.XlConnectionType.xlConnectionTypeDATAFEED)
{
Excel.DataFeedConnection dataFeedCur = connection.DataFeedConnection;
dataFeedCur.Connection = dataFeedCur.Connection.Replace("mydomain", "Client1");
break;
}
}
excelWorkbook.Close(true);
我可以阅读dataFeedCur.Connection的内容,但是尝试编辑它,如下所示
dataFeedCur.Connection = dataFeedCur.Connection.Replace("localhost", "Client1");
抛出以下异常:
Exception Message: "Exception from HRESULT: 0x800A03EC"
Exception Stack Trace: "" at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)\r\n at Microsoft.Office.Interop.Excel.DataFeedConnection.set_Connection(Object value)\r\n
有一些迹象表明WorkBookConnection.DataFeedConnection对象是只读的...但我听说其他论坛的人都在谈论能够编辑这个连接字符串,但是没有看到任何例子......任何人都知道如何编辑这个DataFeedConnection.Connection对象?
答案 0 :(得分:0)
如果属性是只读的,也许您可以使用Reflection来强制设置它。如果有效,请告诉我:
答案 1 :(得分:0)
我一直在努力让这个工作正常,似乎由于数据连接实际存储在excel文件中嵌入的SSAS多维数据集中,这就是错误发生的原因。然而,我能够在SharePoint的帮助下完成这项工作,并且可以通过powerpivot支持正确设置。
这是我的代码:
using Microsoft.AnalysisServices;
using Microsoft.AnalysisServices.SPClient;
using Microsoft.AnalysisServices.SPClient.Interfaces;
string workbookUrl = "http://sharepoint/Shared%20Documents/spbook.xlsx";
using (IWorkbookSession workbookSession = ASSPClientProxy.OpenWorkbookModel(workbookUrl))
{
bool hasEmbeddedModel = (workbookSession.Database != null);
if (hasEmbeddedModel && workbookSession.WorkbookFormatVersion == WorkbookFileFormat.Excel2013)
{
using (Server ssas = new Server())
{
ssas.Connect("Data Source=" + workbookSession.Server);
Database database = ssas.Databases.FindByName(workbookSession.Database);
foreach (DataSource dataSource in database.DataSources)
{
dataSource.ConnectionString = dataSource.ConnectionString.Replace("parameter1", "parameter2");
dataSource.Update();
dataSource.Refresh();
}
}
workbookSession.RefreshEmbeddedModel();
workbookSession.Save();
}
}