2014-05-22 69 views
3

我有一個excel 2013 powerpivot文檔...它連接到我託管的wcfdataservice ...數據連接正常工作,所有數據都被帶回並填充到我的powerpivot圖表/表格中成功地。以編程方式編輯Excel 2013 Powerpivot Datafeed連接

的數據是在看起來像這樣的數據饋送URL託管.:

http://mydomain/Reporting/WcfDataService1.svc/ 

我有幾十個客戶,將每個人都需要接受同樣的文檔......但與DataFeedURL編輯點其託管的數據服務......每一個都會有不同的網址...如

http://Client1/Reporting/WcfDataService1.svc/ 

http://Client2/Reporting/WcfDataService1.svc/ 

長話短說......我希望爲客戶使用我的C#Windows窗體應用程序,這將有對模板PowePivot Report的引用...以及用戶完成設置vari時的引用關於他們公司的信息......我需要以編程方式將包含更新的連接的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

我一直試圖讓這個工作,以及它似乎是因爲數據連接實際上是存儲在嵌入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(); 
    } 
}