2012-02-01 53 views
2

我正在使用C#將帶有數據透視表和圖表的Excel電子表格加載到Web瀏覽器控件中。電子表格有幾個連接字符串都指向開發數據庫。我希望能夠將連接字符串更改爲在我的應用程序運行時由用戶提供的連接字符串。在C中更改Excel電子表格的PivotCache連接#

當電子表格是以編程方式創建的,並且樞軸緩存的SourceType設置爲'External'時,我已經設法使其工作。但是,當加載在Excel中創建的電子表格時,源類型設置爲'數據庫',並在訪問'連接'屬性時拋出異常。

有沒有辦法改變這種電子表格的SourceType(只讀)屬性或連接字符串?

這是我的代碼示例,它基於a solution to a similar problem

EXCEL.Worksheet sheet = (EXCEL.Worksheet)_application.ActiveSheet; 
foreach (EXCEL.PivotTable table in sheet.PivotTables()) 
{ 
     table.PivotCache().Connection = ConnectionString; 
     table.RefreshTable(); 
} 

我還當我訪問樞軸緩存連接財產試過這種

var workBooks = _application.Workbooks.Cast<EXCEL.Workbook>(); 
var pivotCaches = workBooks.SelectMany(arg => GetPivotCaches(arg)); 

foreach (EXCEL.PivotCache cache in pivotCaches) 
{ 
    cache.Connection = ConnectionString; 
} 

在這兩種情況下,我得到一個System.Runtime.InteropServices.COMException。有任何想法嗎?

回答

1

下面是基於解決方案的問題的修復程序,其中I found here

 //update the connections 
     foreach (EXCEL.WorkbookConnection connection in workbook.Connections) 
     { 
      if (connection.Type.ToString() == "xlConnectionTypeODBC") 
      { 
       connection.ODBCConnection.BackgroundQuery = false; 
       connection.ODBCConnection.Connection = ConnectionString; 
      } 
      else 
      { 
       connection.OLEDBConnection.BackgroundQuery = false; 
       connection.OLEDBConnection.Connection = ConnectionString; 
      } 
     } 

     //Refresh all data 
     workbook.RefreshAll(); 

這解決了大多數報告引發異常的問題。唯一沒有工作的是從零開始重新創建的(它真的很老了,並且已經在這個區塊了!)

希望這可以幫助其他人。