Win32::Excel::Refresh - Perl extension for automating the refresh of Microsoft Excel Workbooks


  use Win32::Excel::Refresh;

  my $filename = "book1.xls";
  XLRefresh( $filename,
      pivot-tables => 1 ,
         query-tables => 1,
         all => 1 ,
         macros => [ "macro1", "macro2" ] ,
      visible => TRUE 


  Automate the refresh of Microsoft Excel workbooks.


Win32::Excel::Refresh allows for programatic and/or automatic refreshing of Excel workbooks. This module was written for situations where Excel workbooks are in need of refreshing but the responsible person is too lazy, forgetful or sick of opening up workbooks to execute a few refresh commands and saving the resulting workbook. Complete automation can be acheived by wrapping this module into a script and scheduling in the Windows Task Scheduler (Win32::TaskScheduler), AT(Schedule::At) or a similar cron-type mechanism (Schedule::Cron).

The author uses this modules to keep hundreds of Excel workbooks up-to-date. Each of the workborks are dependent upon data from either web queries or database queries. In most cases, the data is contained in Pivot Tables. While I debated coding this in Visual Basic, I wanted to be able to some advantage of Perl.

A single subroutine, XLRefresh is exported into he callers namespace. This functions takes all a filename and a hash of parameters and does all the work invisibly in the background.


Microsoft Windows
Microsoft Excel

This module is dependent on Win32::OLE and is therefore non-functional on *NIX variants. It has been used successfully with Microsoft Windows 2000 and XP and Microsoft Excel 2000 and 2003.


  XLRefresh( $filename, $opts );

$filename is a filename that can be fully specified or relative to the caller's working directory. If relative, the file is first converted to its fully specified form using "rel2abs" in File::Spec::Functions. Filenames may contain forward or back slashes.

$opts is a reference to a hash of parameters used to control the refreshing. Valid parameters are:

    all          => 0|1  Refresh everything
    query-tables => 0|1  Refresh query tables only
    pivot-tables => 0|1 Refresh pivot tables only
    visible      => 0|1  Perform the refreshes visibly or in the background, default: invisible.
    macros       => [ "macro1", "macro2" ] List of macros available to the workbook to run
_refresh( $item, $method )

Internal method to invoke a VBA method on a given item. This method should not be called directly.


Internal method to invoke a method on each item in a collection. This method should not be called directly.


XLRefresh by default

EXTRAS is script to execute XLRefresh from the command line. It relies on Getopt::Mixed for the setting of the $opts parameters. It can be found in the script directory.

    Usage: XLRefresh -[aqpv] -m macro(s) filename
      -a, --all          Refresh All PivotTables and Queries
      -q, --query-tables Refreshes All QueryTables  
      -p, --pivot-tables Refresh All PivotTables
      -m, --macros       Runs specified macros
      -v, --visible      Shows application while running, defaul invisible

XLRefresh.exe is a compiled version of the above script using ActiveState's PerlApp Perl. The application was compiled on Windows2000 and has been tested used successfully on WindowsXP. It can be found in the bin directory of this distribution.


Examples using Win32::Task Scheduler, AT and Schedule::Cron ...

TODO and possible modifications

  + Add support for charts
  + Add routine to remove old pivot table items cf
  + Add PPM package
  + Complete examples section
  + Support for workbook versioning (?)
  + Allow arguments for macros
  + Validate that the defaults are working correctly


Win32::OLE, "rel2abs" in File::Spec::Functions, Getopt::Mixed, Win32::TaskScheduler, Schedule::At, Schedule::Cron, Perl


Christopher Brown, <ctbrown{at}>


Copyright 2005 by Christopher Brown. This program is free software; you can redistribute it and/or modify it under the same terms as Perl. There software comes with no warranty either expressed or implied.