Actualizar los datos de un archivo de Excel con PowerShell

  • 21 Sep 2021
  • PowerShell

Escenario

Se parte de un simple archivo de Excel que contiene una fuente de datos (a través de un ODBC) y queremos mantener los datos siempre actualizados (n veces al día). 

Crear script de PowerShell

Crear un archivo con el nombre refresh-excel.ps1. Vamos a tomar como ejemplo que lo guardamos en C:\Users\Arthur\Scripts. En la variable $file vamos a indicar la ruta completa del archivo Excel que queremos actualizar la fuente de datos. En este caso el archivo está en una librería de SharePoint Online sincronizada con el equipo.

$file = 'C:\Users\Arthur\OneDrive - Contoso\orders.xlsx'
$x1 = New-Object -ComObject "Excel.Application"
$x1.Visible = $true
$wb = $x1.workbooks.Open($file)
$wb.RefreshAll()

Start-Sleep -Seconds 10

$wb.Save()
$wb.Close()
$x1.Quit()
Remove-Variable wb,x1

Para probar el script, basta hacer click derecho y seleccionar Ejecutar con PowerShell. Si todo sale como lo esperado, podemos cambiar la variable $x1.Visible por $false para que el script y Excel se ejecuten en background.

Programar una tarea

Una vez que el script de PowerShell hace lo que esperamos que haga, vamos a pedirle a Windows que cada x cantidad de tiempo lo ejecute. Para eso, abrimos PowerShell como administrador y ejecutamos:

Set-ExecutionPolicy Unrestricted

A partir de ahora, será posible ejecutar un script de PowerShell desde la linea de comando. En realidad no estoy 100% seguro de que este paso sea fundamental.

Abrir el programador de tares ejecutando taskschd.msc

Del menú principal seleccionamos Acción // Crear tarea y configuramos las pestañas general y acciones del siguiente modo:

General

  • Seleccionar la opción Ejecutar con privilegios más altos

Acciones

Agregar una entrada que ejecute el comando PowerShell

  • Action: Ejecutar programa
  • Programa: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  • Argumentos: -noprofile -executionpolicy unrestricted -noninteractive -file "C:\Users\Arthur\Scripts\refresh-excel-orders.ps1"
  • Iniciar en: C:\Users\Arthur\Scripts\

Finalizar la configuracion de la tarea como se desee.