Codificação Microsoft Excel UTF-8 sem importar

0

Antes que você me diga para pesquisar mais e para ver as perguntas de outras pessoas e suas respostas, leia minha pergunta precisa.

A maioria dos outros tópicos aqui trata de como tornar o UTF-8 a opção padrão no assistente de importação de texto. No entanto, eu gostaria de evitar ter que usar o assistente de importação de texto.

Eu tenho arquivos CSV que eu quero abrir clicando duas vezes. O Excel os abre automaticamente, mas mesmo se eu fizesse o truque do regedit de usar o 65001 (UTF-8) como a codificação padrão, os arquivos ainda não seriam exibidos corretamente.

Existe alguma maneira de forçar esta codificação no abertura de um arquivo em vez de ter que importar isto?

desde já, obrigado

(usando o Excel 2016 em inglês dos EUA e minha configuração regional do Windows 7 está definida como Espanhol (Estados Unidos), não sei se isso é importante, mas na verdade era para lidar com as vírgulas padrão como separadores)

EDIT para esclarecimento: acentos e caracteres de outros idiomas ainda aparecem como códigos estranhos ao abrir um arquivo CSV depois de fazer o truque de regedit de forçar o utf-8 para a importação. Eu não estou importando embora (o truque funciona como esperado lá); Estou abrindo o arquivo diretamente.

Nicolás Fernández Fioretti
fonte

Respostas:

0

Você pode usar um script do PowerShell para abrir arquivos CSV e transmiti-los automaticamente ao Excel. O script usa silenciosamente o método de importação de texto do Excel, que lida com a codificação UTF-8 e como um bônus trata os valores sempre como texto

Coloque um atalho para este script no seu enviar para pasta para que você possa abrir todos os arquivos CSV via Right click » SendTo » myScript (método fácil)

(ou)

Você pode usar PS2EXE para converter seu script em um executável (.exe). Agora você pode clicar com o botão direito em um arquivo .csv e em ' Abrir com 'você escolhe este .exe como seu programa padrão para abrir arquivos CSV (método avançado)

O que faz

  • Os caracteres UTF-8 são exibidos corretamente
  • Pode abrir vários arquivos CSV. Armazena cada conteúdo CSV como nova planilha na mesma pasta de trabalho
  • Todos os valores são tratados como texto puro. Nenhuma interpretação do manipulador de CSV do buildin do Excel

    • ie. 0001 estadias 0001 e não é convertido para 1
    • ie. -A122:23 ou =AZ1+32 não são interpretados como fórmula e permanecem como são

Como usar

  • Crie um novo arquivo de texto e cole o script abaixo. Uma versão comentada pode ser encontrada Aqui
$CSVs = @()
$args.ForEach({
    If ((Test-Path $_) -and ($_ -Match ".csv$|.txt$")) {
        $CSVs += ,$_
    } 
})

if (-Not $null -eq $CSVs) {

    $excel = New-Object -ComObject excel.application 
    $excel.visible = $true
    $excel.SheetsInNewWorkbook = $CSVs.Count    
    $workbook = $excel.Workbooks.Add()

    for ($i=0; $i -lt $CSVs.Count; $i++){

        $csv = Get-Item $CSVs[$i]
        $worksheet = $workbook.worksheets.Item($i + 1)
        $worksheet.Name = $csv.basename

        $TxtConnector = ("TEXT;" + $csv.fullname)
        $Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1"))
        $query = $worksheet.QueryTables.item($Connector.name)
        $query.TextFilePlatform = 65001
        $query.TextFileTextQualifier = 1
        $query.TextFileOtherDelimiter = $Excel.Application.International(5) 
        $query.TextFileParseType  = 1
        $arrFormats = ,2 * $worksheet.Cells.Columns.Count
        $query.TextFileColumnDataTypes = $arrFormats
        $query.AdjustColumnWidth = 1
        $query.Refresh()
        $query.Delete()
    }
}

  • Salve-o em algum lugar como C:\Tools\myScript.ps1. (Observe a extensão .ps1 )
  • Abra sua pasta sendto via Ganhar R » shell:sendto » Entrar
  • Crie um novo atalho com o botão direito do mouse »Novo» Atalho e cole esta linha. Não se esqueça de mudar o caminho para o seu próprio, onde você colocou o seu script

"% SystemRoot% \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe" -NãoProfile -NonInteractive -WindowStyle Oculto -Arquivo "C: \ my \ folder \ myScript.ps1"

Comparação

  • Nova maneira: Aberta via script (através do executável convertido em sendto ou PS2EXE)

enter image description here

  • Caminho antigo: aberto via duplo clique

enter image description here


Observações

  • PS2EXE não é executado no Windows 10 porque o .NET versão 4.5 ou superior não é suportado pelo PS2EXE. O programa funciona no Windows 7 com o .NET 4.0

  • Nos meus primeiros testes, o Excel mostrou conteúdo sem sentido ao tentar exibir caracteres UTF-8 chineses. No entanto, durante meus testes, esse comportamento mudou e agora ambos os métodos manipulam o UTF-8 corretamente. Eu não tenho ideia do que causou isso

nixda
fonte
Obrigado @nixda Isso parece incrível. Eu não posso fazer isso funcionar. Eu tentei o script sendto, e apesar de seguir as instruções, nada acontece. Depois eu clique com o botão direito - & gt; sendto - & gt; script, nada acontece. O que parece ser uma janela cmd aparece muito brevemente e desaparece, mas o excel não é executado. Eu também tentei o método PS2EXE, mas quando eu corro o script a mensagem "A VERSÃO POWERSHELL É DESCONHECIDA", que, de acordo com o arquivo ps2exe.ps1 (aberto no bloco de notas) pertence a if( $psversion -eq 0 ) { write-host "THE POWERSHELL VERSION IS UNKNOWN!" exit -1 }
Nicolás Fernández Fioretti
@ NicolásFernándezFioretti Será que você não permitiu que o Windows executasse o script Powershell? O padrão é restricted. Verifique no PowerShell com Get-ExecutionPolicy. E, se necessário, inicie o PS como administrador e configure-o para set-executionpolicy remotesigned ou Set-ExecutionPolicy unrestricted
nixda
Estou usando um computador corporativo, portanto, posso ter restrições especiais das quais não conheço. Posso executar o powershell como administrador e get-executionpolicy devolve unrestricted, mas set-executionpolicy diz que não tenho acesso para modificar o registro. Estou suspeitando que, mesmo que eu esteja clicando com o botão direito do mouse em powershell e selecionando "executar como administrador", estou executando normalmente, pois não há nenhuma indicação de administrador na barra de título da janela do PowerShell.
Nicolás Fernández Fioretti
@ NicolásFernándezFioretti Para ver onde está o problema, por favor, tente o seguinte: Abra Powershell ISE (que é o editor de compilação) e cole o script acima nele. Agora adicione como primeira linha esta $args = "C:\my\test.csv". Altere o caminho para um teste de CSV existente na sua unidade. Abre o Excel e importa o CSV?
nixda
Funciona! colando o script no powershell e usando o caminho para o arquivo abriu-o com o tratamento correto para o utf8. Eu também tentei novamente o método "enviar para", e funcionou bem. Eu pareço ter problemas ao criar um .exe com o PS2EXE. Devo pedir ajuda em outro lugar?
Nicolás Fernández Fioretti