When working with Excel a common reality is connecting to your databases in order to create for example a data abstraction layer for you analysis which can be accomplished with PowerPivot.
Although Excel comes with a lot of wizards to connect to databases and even to refresh your data, when you start developing multiple reports and the number of files you need to refresh for example every day increase, this might become a headache and not very easy to manage.
In order to ease your life, the following PowerShell script accepts as a parameter a “folder path” where you can put all your excel files and then refreshes all power pivot models in it.
cls $input_folder_name="[YOUR_FOLDER]" [System.Threading.Thread]::CurrentThread.CurrentCulture = [System.Globalization.CultureInfo]::GetCultureInfo("en-US") $interopAssembly = [Reflection.Assembly]::LoadWithPartialname("Microsoft.Office.Interop.Excel") $allWbks=@((Get-ChildItem -Path $input_folder_name -Filter "*.xls*")) $allWbks | %{ $file = $_.FullName "File: " + $file #kill all instances of MSExcel Get-Process | where{$_.ProcessName -like "*EXCEL*"} | kill #Create new Excel app $excel = new-object Microsoft.Office.Interop.Excel.ApplicationClass $book = $excel.Workbooks.Open($file) $book.Connections | %{ #If PowerPivot Model (Type=7) #if($_.Type -eq "7") #{ "Refreshing PowerPivot Model: " + $_.Name if($_ -ne $null){ $_.Refresh() } #} } $book.Save() $book.Close() } "Finished Processing"
Thank you
Does this works with Excel 2010 and its PowerPivot?
Hello Seguir, I have my powerpivot conencted to Teradata and when i try to use above script it prompts me to put username and password. This is a manual step which I want to avoid. Would you have any ideas how can we do it? Thanks