Antes que você me diga para pesquisar mais e ver as perguntas e respostas de outras pessoas, 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, gostaria de evitar ter que usar o assistente de importação de texto.
Tenho arquivos CSV que desejo abrir clicando duas vezes. O Excel os abre automaticamente, mas mesmo que eu tenha feito o truque do regedit de usar 65001 (UTF-8) como codificação padrão, os arquivos ainda não são exibidos corretamente.
Existe alguma maneira de forçar essa codificação noaberturade um arquivo em vez de ter queimportaristo?
desde já, obrigado
(usando o Excel 2016 em inglês dos EUA e minha configuração regional do Windows 7 está definida para espanhol (Estados Unidos), não sei se isso é importante, mas na verdade era para lidar com 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 após fazer o truque do regedit de forçar o utf-8 para a importação. Porém, não estou importando (o truque funciona como esperado); Estou abrindo o arquivo diretamente.
Responder1
Você pode usar um script do PowerShell para abrir arquivos CSV e passá-los automaticamente para o 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 bônus, trata os valores sempre como texto
Coloque um atalho para este script no seuenviar parapasta para que você possa abrir todos os arquivos CSV via Right click » SendTo » myScript
(método fácil)
(ou)
Você pode usarPS2EXEpara 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 uma nova planilha na mesma pasta de trabalho
Todos os valores são tratados como texto puro. Nenhuma interpretação do manipulador CSV integrado do Excel
- ou seja.
0001
permanece0001
e não é convertido em1
- ou seja.
-A122:23
ou=AZ1+32
não são interpretados como fórmula e permanecem como estão
- ou seja.
Como usar
- Crie um novo arquivo de texto e cole o script abaixo. Uma versão comentada pode ser encontradaaqui
$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 WinR»
shell:sendto
» Enter - Crie um novo atalho clicando com o botão direito »Novo» Atalho e cole esta linha. Não se esqueça de mudar o caminho para o seu próprio onde você colocou seu script
"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe " -NoProfile -NonInteractive -WindowStyle Hidden -File"C:\minha\pasta\myScript.ps1"
Comparação
- Nova forma: Aberto via script (através de sendto ou executável convertido PS2EXE)
- Maneira antiga: Aberto com clique duplo
Observações
PS2EXE não funciona no Windows 10 porque o .NET versão 4.5 ou superior não é compatível com PS2EXE. O programa funciona no Windows 7 com .NET 4.0
Em meus primeiros testes, o Excel mostrou algo sem sentido ao tentar exibir caracteres UTF-8 chineses. No entanto, durante meus testes, esse comportamento mudou e agora ambos os métodos lidam com UTF-8 corretamente. Não tenho ideia do que causou isso