O Microsoft Excel é uma daquelas ferramentas onipresentes da qual a maioria de nós não pode escapar, mesmo que tente. Muitos profissionais de TI usam o Excel como um pequeno banco de dados, armazenando toneladas de dados em várias rotinas de automação. Qual é o melhor cenário para automação com o Excel? PowerShell e Excel!
Planilhas do Excel sempre foram notoriamente difíceis de criar scripts e automatizar. Ao contrário de seu equivalente de arquivo CSV com menos recursos (e mais simples), os livros do Excel não são apenas arquivos de texto simples. Livros do Excel exigiam o PowerShell para manipular objetos complicados do Modelo de Objeto de Componente (COM), sendo necessário ter o Excel instalado. Não mais.
Felizmente, um perspicaz membro da comunidade do PowerShell, Doug Finke, criou um módulo PowerShell chamado ImportExcel para nós simples mortais. O módulo ImportExcel abstrai toda essa complexidade. Torna possível gerenciar facilmente livros do Excel e usar o PowerShell para scripts!
Neste artigo, vamos explorar o que você pode fazer com PowerShell e Excel usando o módulo ImportExcel e alguns casos de uso populares.
Pré-requisitos
Ao executar o módulo ImportExcel em um sistema Windows, não são necessárias dependências separadas. No entanto, se você estiver trabalhando no macOS, será necessário instalar o pacote mono-libgdiplus usando brew install mono-libgdiplus
. Todos os exemplos neste artigo serão construídos usando o macOS, mas todos os exemplos devem funcionar em várias plataformas.
Se estiver usando macOS, certifique-se de reiniciar sua sessão do PowerShell antes de continuar.
Instalando o Módulo ImportExcel
Comece baixando e instalando o módulo via PowerShell Gallery, executando Install-Module ImportExcel -Scope CurrentUser
. Após alguns momentos, estará pronto para usar.
Usando PowerShell e Excel para Exportar para uma Planilha
Você pode estar familiarizado com os cmdlets padrão do PowerShell Export-Csv
e Import-Csv
. Esses cmdlets permitem que você leia e exporte objetos do PowerShell para arquivos CSV. Infelizmente, não há Export-Excel
e Import-Excel
cmdlets. Mas usando o módulo ImportExcel, você pode criar sua própria funcionalidade.
Uma das solicitações mais comuns de um sysadmin é exportar objetos do PowerShell para uma planilha do Excel. Usando o cmdlet Export-Excel
no módulo ImportExcel, você pode facilmente fazer isso acontecer.
Por exemplo, talvez você precise encontrar alguns processos em execução no seu computador local e inseri-los em uma pasta de trabalho do Excel.
O cmdlet
Export-Excel
aceita qualquer objeto exatamente da mesma forma que oExport-Csv
faz. Você pode encaminhar qualquer tipo de objeto para este cmdlet.
Para encontrar processos em execução em um sistema com o PowerShell, use o cmdlet Get-Process
, que retorna cada processo em execução e várias informações sobre cada processo. Para exportar essas informações para o Excel, use o cmdlet Export-Excel
fornecendo o caminho do arquivo para a pasta de trabalho do Excel que será criada. Você pode ver um exemplo do comando e uma captura de tela do arquivo do Excel gerado abaixo.

Parabéns! Você agora exportou todas as informações assim como o Export-Csv
, mas, ao contrário do Export-Csv
, podemos tornar esses dados muito mais elegantes. Vamos garantir que o nome da planilha seja Processos, que os dados estejam em uma tabela e que as linhas tenham tamanho automático.
Ao usar o parâmetro de comutação AutoSize
para ajustar automaticamente todas as linhas, TableName
para especificar o nome da tabela que incluirá todos os dados e o nome do parâmetro WorksheetName
para Processos, você pode ver na captura de tela abaixo o que pode ser construído.

O cmdlet
Export-Excel
possui uma tonelada de parâmetros que você pode usar para criar pastas de trabalho do Excel de todos os tipos. Para obter uma lista completa de tudo que oExport-Excel
pode fazer, executeGet-Help Export-Excel
.
Usando PowerShell para Importar para o Excel
Então você exportou algumas informações para um arquivo chamado processes.xlsx na seção anterior. Talvez agora você precise mover este arquivo para outro computador e importar/ler estas informações com PowerShell e Excel. Sem problemas. Você tem o Import-Excel
à sua disposição.
Em seu uso mais básico, você só precisa fornecer o caminho para o documento/pasta de trabalho do Excel usando o parâmetro Path
como mostrado abaixo. Você verá que ele lê a primeira planilha, neste caso, a planilha Processos, e retorna objetos do PowerShell.

Talvez você tenha várias planilhas em uma pasta de trabalho do Excel? Você pode ler uma planilha específica usando o parâmetro WorksheetName
.
Você precisa apenas ler determinadas colunas da planilha do Excel? Use o parâmetro HeaderName
para especificar apenas os parâmetros que você gostaria de ler.
O cmdlet
Import-Excel
possui outros parâmetros que você pode usar para ler pastas de trabalho do Excel de todos os tipos. Para obter uma visão completa de tudo queImport-Excel
pode fazer, executeGet-Help Import-Excel
.
Usando o PowerShell para Obter (e Definir) Valores de Células no Excel
Agora você sabe como ler uma planilha inteira com o PowerShell e o Excel, mas e se você precisar apenas de um valor de célula? Tecnicamente, você poderia usar Import-Excel
e filtrar o valor necessário com Where-Object
, mas isso não seria muito eficiente.
Em vez disso, usando o cmdlet Open-ExcelPackage
, você pode “converter” uma pasta de trabalho do Excel em um objeto PowerShell que pode ser lido e manipulado. Para encontrar um valor de célula, primeiro, abra a pasta de trabalho do Excel para trazê-la para a memória.
O cmdlet
Open-ExcelPackage
é semelhante ao uso deNew-Object -comobject excel.application
ao trabalhar diretamente com objetos COM.
Em seguida, escolha a planilha dentro da pasta de trabalho.
Esse processo é semelhante à maneira de objetos COM de abrir pastas de trabalho com
excel.workbooks.open
.
Depois de atribuir a planilha a uma variável, você pode agora aprofundar-se em linhas, colunas e células individuais. Talvez você precise encontrar todos os valores de célula na linha A1. Basta fazer referência à propriedade Cells
, fornecendo um índice de A1, como mostrado abaixo.
Você também pode alterar o valor das células em uma planilha atribuindo um valor diferente, por exemplo,
$worksheet.Cells['A1'] = 'valorDiferente'
Uma vez em memória, é importante liberar o pacote do Excel usando o cmdlet Close-ExcelPackage
.
Convertendo Planilhas para Arquivos CSV com PowerShell e Excel
Depois de ter o conteúdo de uma planilha do Excel representado por meio de objetos do PowerShell, “converter” planilhas do Excel para CSV simplesmente requer enviar esses objetos para o cmdlet Export-Csv
.
Usando a pasta de trabalho processes.xlsx criada anteriormente, leia a primeira planilha que obtém todos os dados em objetos do PowerShell e, em seguida, exporte esses objetos para CSV usando o comando abaixo.
Se você abrir o arquivo CSV resultante, verá os mesmos dados dentro da planilha Processes (neste exemplo).
Convertendo Múltiplas Planilhas
Se você tiver uma pasta de trabalho do Excel com várias planilhas, também pode criar um arquivo CSV para cada planilha. Para fazer isso, você pode encontrar todas as planilhas em uma pasta de trabalho usando o cmdlet Get-ExcelSheetInfo
. Depois de obter os nomes das planilhas, você pode passar esses nomes para o parâmetro WorksheetName
e também usar o nome da planilha como o nome do arquivo CSV.
Abaixo, você encontra o código de exemplo necessário usando PowerShell e Excel.
Conclusão
Usando PowerShell e Excel, você pode importar, exportar e gerenciar dados em pastas de trabalho do Excel exatamente como faria com CSVs sem precisar instalar o Excel!
Neste artigo, você aprendeu o básico de como ler e escrever dados em uma pasta de trabalho do Excel, mas isso apenas arranha a superfície. Usando PowerShell e o módulo ImportExcel, você pode criar gráficos, tabelas dinâmicas e aproveitar outros recursos poderosos do Excel!