Dopo la soluzione dell’errore che si verificava nell’utilizzo della stored procedure USP_DMO_Excel_Pivot_RefreshTable già durante l’apertura del file Excel (post Aggiornare una tabella pivot di Microsoft Excel #3), alcuni di voi hanno segnato un’altra anomalia che si riscontra utilizzando la stored procedure (per aggiornare i dati esposti su una tabella pivot di un foglio MS Excel), in questo ambiente:
L’esecuzione della stored procedure con il seguente frammento di codice T-SQL:
exec USP_DMO_Excel_Pivot_RefreshTable
@FileName = 'c:\Temp\CmdTest.xlsx',
@WorksheetIndex = 1,
@PivotTableName = '',
@Password = '',
@WriteResPassword = '',
@Debug = 1;
...produce l’errore riportato di seguito:
-2146827284 Microsoft Office Excel
Impossibile trovare la proprietà PivotTables per la classe Worksheet.
C:\Program Files (x86)\Microsoft Office\Office12\1040\XLMAIN11.CHM 0
Messaggio 50000, livello 16, stato 1, server PRODUZIONE, procedura USP_DMO_Excel_Pivot_RefreshTable, riga 369
Error whilst: Restituzione dell'oggetto WorkBooks , Impossibile trovare la proprietà PivotTables per la classe Worksheet.
Soluzione
Dopo aver installato l'aggiornamento Office 2007 Data Connectivity Components [link] ho ricreato la tabella pivot su cui desidero venga eseguito il refresh dei dati... selezionando però, come origine dati, il tipo Microsoft Office Data Connection e non un ODBC a 32 bit.
Dopo aver creato l'origine dati e selezionato la tabella sorgente del database SQL Server:
-
Nelle proprietà della connessione (scheda Utilizzo) ho tolto la spunta sull'opzione "Abilita aggiornamento in background".
-
Nelle proprietà della connessione (scheda Definizione) ho indicato di salvare la password nella stringa di connessione, che risulta costruita in questo modo:
Provider=SQLOLEDB.1;Password=<Pwd>;Persist Security Info=True;User ID=sa;Initial Catalog=<DataBase_Name>;Data Source=<Server_Name>;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=<Workstation_ID>;Use Encryption for Data=False;Tag with column collation when possible=False
Dopo aver modificato il tipo di connessione, l’esecuzione della stored procedure viene completata senza errori:
exec USP_DMO_Excel_Pivot_RefreshTable
@FileName = 'c:\Temp\CmdTest.xlsx',
@WorksheetIndex = 1,
@PivotTableName = '',
@Password = '',
@WriteResPassword = '',
@Debug = 1;
...con l’output:
Apertura della cartella di lavoro c:\Temp\CmdTest.xlsx avvenuta correttamente
Selezione WorkSheet 1 avvenuta correttamente
Attivazione WorkSheet 1 avvenuta correttamente
@PivotTablesCount = 1 su WorkSheet 1
Aggiornamento PivotTables = "Tabella_pivot1"
Column1
-----------
1
Column1
-----------
1
Aggiornamento PivotTables(1) avvenuto correttamente
@QueryTablesCount = 0 su WorkSheet 1
Salvataggio Workbook avvenuto correttamente
Uscita da Excel avvenuta correttamente
Il thread completo è disponibile a questo link: http://community.ugiss.org/forums/t/2787.aspx