Estou tentando automatizar uma tarefa administrativa (PC local) do Excel via PowerShell; para abrir um arquivo do Excel, ler/carregar seu conteúdo/dados e, em seguida, consultar o conteúdo/dados como um banco de dados para vários cenários específicos de "consulta de banco de dados" (por exemplo, onde colA=X e colD=Y, então contar/ou fazer algo útil e, em seguida, imprimir a saída na tela do terminal).
Posso abrir um arquivo Excel no meu PC, ler as planilhas (por exemplo, nomes das guias) e seus nomes de colunas (A1:Z1).
Meu problema é tentar consultar cabeçalhos de colunas específicos, para tipos de dados e cenários específicos e imprimir em texto simples
Pelo que entendi, existem basicamente dois métodos principais para abrir um arquivo (por exemplo, myExcel.xlsx) via PowerShell:
Usando a abordagem moderna orientada a objetos do objeto COM
$file_obj_handler = New-Object -ComObject Excel.Application
Usando a abordagem antiga e menos eficiente de import-csv
$file_obj_handler = import-csv filepathname <extra parameters here>
Para sua informação, não sou contra nenhuma das abordagens e já tentei ambas. Mas meu problema comum é que, enquanto o array relevante é criado, seu conteúdo é codificado em algum formato simbólico estranho (parece Unicode/XML — em vez de texto simples humano).
Verifiquei o tamanho e o tipo do array usando os comandos:
$file_obj_handler.Count #my array size was 4194
$file_obj_handler.GetType() #printed System.Object[]
Tentei usar o parâmetro de comando em linha (-encoding utf8) e coisas do tipo, mas sem sucesso.
Existe uma maneira melhor, idealmente, de converter a matriz em texto simples ao abrir o manipulador de arquivo de objeto por meio de qualquer um dos métodos (1 ou 2), em vez de tentar contornar/reformatar a matriz depois que os dados do arquivo do Excel já tiverem sido lidos/carregados?
Eu sei que talvez eu precise usar um delimitador para os elementos do array (estágio 2), mas minha principal tarefa (estágio 1) é primeiro conseguir ler (o conteúdo da string em formato humano).
Eu uso as referências de arquivo aberto:
$workbook=$file_obj_handler.Workbooks.Open($excelFile)
Mas o mesmo problema ocorre sempre que faço um loop/imprimo o conteúdo do array - não imprime em texto simples/legível por humanos:
$workbook.Worksheets.Item(1)
$worksheets.Cells.Items(1,$i).Text