Codificación Microsoft Excel UTF-8 sin importar

Codificación Microsoft Excel UTF-8 sin importar

Antes de que me digas que busque más y mire las preguntas de otras personas y sus respuestas, lea mi pregunta precisa.

La mayoría de los otros temas aquí tratan sobre cómo hacer que UTF-8 sea la opción predeterminada dentro del asistente de importación de texto. Sin embargo, me gustaría evitar tener que utilizar el asistente de importación de texto.

Tengo archivos CSV que quiero abrir haciendo doble clic. Excel los abre automáticamente, pero incluso si hice el truco de regedit de usar 65001 (UTF-8) como codificación predeterminada, los archivos todavía no se muestran correctamente.

¿Hay alguna manera de forzar esta codificación en elaperturade un archivo en lugar de tener queimportar¿él?

gracias de antemano

(usando Excel 2016 en inglés de EE. UU. y mi configuración regional de Windows 7 está configurada en español (Estados Unidos), no sé si eso es importante, pero en realidad fue para tratar con comas predeterminadas como separadores)

EDITAR para aclarar: los acentos y caracteres de otros idiomas todavía aparecen como códigos extraños al abrir un archivo CSV después de realizar el truco regedit de forzar utf-8 para la importación. Sin embargo, no estoy importando (el truco funciona como se esperaba allí); Estoy abriendo el archivo directamente.

Respuesta1

Puede utilizar un script de PowerShell para abrir archivos CSV y pasarlos automáticamente a Excel. El script utiliza silenciosamente el método de importación de texto de Excel que maneja la codificación UTF-8 y, como beneficio adicional, trata los valores siempre como texto.

Coloque un acceso directo a este script en suenviar acarpeta para que pueda abrir todos los archivos CSV mediante Right click » SendTo » myScript(método fácil)

(o)

Puedes usarPS2EXEpara convertir su script a un ejecutable (.exe). Ahora puede hacer clic derecho en un archivo .csv y en 'Abrir con' eliges este .exe como tu programa predeterminado para abrir archivos CSV (método avanzado)

Que hace

  • Los caracteres UTF-8 se muestran correctamente
  • Puede abrir varios archivos CSV. Almacena cada contenido CSV como una nueva hoja de trabajo en el mismo libro
  • Todos los valores se tratan como texto puro. No hay interpretación del controlador CSV integrado de Excel

    • es decir. 0001permanece 0001y no se convierte en1
    • es decir. -A122:23o =AZ1+32no se interpretan como fórmula y se quedan como están

Cómo utilizar

  • Cree un nuevo archivo de texto y pegue el siguiente script. Se puede encontrar una versión comentada.aquí
$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()
    }
}

  • Guárdalo en algún lugar como C:\Tools\myScript.ps1. (Tenga en cuenta la extensión .ps1)
  • Abra su carpeta de envío a través de WinR» shell:sendto» Enter
  • Cree un nuevo acceso directo haciendo clic derecho »Nuevo» Acceso directo y pegue esta línea. No olvides cambiar la ruta a la tuya propia donde pusiste tu script.

"%SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe " -NoProfile -NonInteractive -WindowStyle Oculto -File"C:\mi\carpeta\myScript.ps1"

Comparación

  • Nueva forma: abierto mediante script (ya sea a través de sendto o ejecutable convertido en PS2EXE)

ingrese la descripción de la imagen aquí

  • Forma antigua: se abre mediante doble clic

ingrese la descripción de la imagen aquí


Observaciones

  • PS2EXE no se ejecuta en Windows 10 porque la versión .NET 4.5 o superior no es compatible con PS2EXE. El programa funciona en Windows 7 con .NET 4.0

  • En mis primeras pruebas, Excel mostró galimatías al intentar mostrar caracteres chinos UTF-8. Sin embargo, durante mis pruebas, este comportamiento cambió y ahora ambos métodos manejan UTF-8 correctamente. No tengo idea de qué causó esto

información relacionada