2 votos

Microsoft Excel UTF-8 codificación sin importar

Antes de decirme que busque más y que mire las preguntas de otras personas y sus respuestas, lee 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 usar el asistente de importación de texto en absoluto.

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

¿Hay alguna forma de forzar esta codificación en la apertura de un archivo en lugar de tener que importarlo?

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 lo fue para tratar con las comas predeterminadas como separadores)

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

3voto

KevinM1 Puntos 181

Puedes usar 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 bonificación trata siempre los valores como texto

Coloca un acceso directo a este script en tu carpeta sendto para que puedas abrir todos los archivos CSV vía Clic derecho » Enviar a » miScript (método fácil)

(o)

Puedes usar PS2EXE para convertir tu script en un ejecutable (.exe). Ahora puedes dar clic derecho en un archivo .csv y bajo 'Abrir con' elegir este .exe como tu programa predeterminado para abrir archivos CSV (método avanzado)

Qué hace

  • Los caracteres UTF-8 se muestran correctamente
  • Puede abrir varios archivos CSV. Guarda cada contenido CSV como una nueva hoja de cálculo en el mismo libro
  • Todos los valores se tratan como texto puro. Sin interpretación del manejador de CSV incorporado de Excel

    • es decir. 0001 se mantendrá como 0001 y no se convertirá en 1
    • es decir. -A122:23 o =AZ1+32 no se interpretan como fórmula y se mantienen tal como están

Cómo usarlo

  • Crea un archivo de texto nuevo y pega el siguiente script. Una versión comentada se puede encontrar 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 alguna ubicación como C:\Herramientas\myScript.ps1. (Nota la extensión .ps1)

  • Abre tu carpeta sendto vía WinR » shell:sendto » Enter

  • Crea un nuevo acceso directo vía Clic derecho » Nuevo » Acceso directo y pega esta línea. No olvides cambiar la ruta por la tuya donde hayas puesto tu script

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

Comparación

  • Nueva forma: Abierto a través del script (ya sea a través de sendto o mediante el ejecutable convertido por PS2EXE)

enter image description here

  • Forma antigua: Abierto con doble clic

enter image description here


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 mostraba caracteres UTF-8 chinos de forma confusa. Sin embargo, durante mis pruebas este comportamiento cambió y ahora ambos métodos manejan correctamente UTF-8. No tengo idea de qué causó esto

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X