Excel a CSV con codificación UTF8


Tengo un archivo Excel que tiene algunos caracteres españoles (tildes, etc.) que necesito convertir a un archivo CSV para usarlo como archivo de importación. Sin embargo, cuando guardo Como CSV, destroza los caracteres españoles "especiales" que no son caracteres ASCII. También parece hacer esto con las comillas izquierda y derecha y guiones largos que parecen provenir del usuario original que crea el archivo de Excel en Mac.

Dado que CSV es solo un archivo de texto, estoy seguro de que puede manejar una codificación UTF8, así que supongo es una limitación de Excel, pero estoy buscando una manera de pasar de Excel a CSV y mantener intactos los caracteres no ASCII.

Author: K48, 2010-11-19

30 answers

Una solución simple es usar Google Spreadsheet. Pegar (valores solo si tiene fórmulas complejas) o importar la hoja y luego descargar CSV. Acabo de probar algunos caracteres y funciona bastante bien.

NOTA: las hojas de cálculo de Google tienen limitaciones al importar. Ver aquí.

NOTA: Tenga cuidado con los datos confidenciales con las hojas de cálculo de Google.

EDITAR: Otra alternativa - básicamente utilizan macro VB o addins para forzar el guardar como UTF8. No he probado ninguno de estas soluciones pero suenan razonables.

 369
Author: nevets1219,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-18 01:01:55

He encontrado que la aplicación de hoja de cálculo de OpenOffice, Calc, es realmente buena para manejar datos CSV.

En "Guardar como..."diálogo, haga clic en" Opciones de formato " para obtener diferentes codificaciones para CSV. LibreOffice funciona de la misma manera que AFAIK.

diálogo guardar calc

 112
Author: aendrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-15 02:45:20
  1. Guarde la hoja de Excel como " Texto Unicode (.txt)". La buena noticia es que todos los caracteres internacionales están en UTF16 (nota, no en UTF8). Sin embargo, el nuevo"*.txt " archivo está delimitado por tabulaciones, no delimitado por comas, y por lo tanto no es un verdadero CSV.

  2. (opcional) A menos que pueda usar un archivo delimitado por tabulaciones para importar, use su editor de texto favorito y reemplace los caracteres de tabulación con comas ",".

  3. Importe su*.archivo txt en la aplicación de destino. Asegúrese puede aceptar el formato UTF16.

Si UTF-16 se ha implementado correctamente con soporte para puntos de código no BMP, puede convertir un archivo UTF-16 a UTF-8 sin perder información. Le dejo a usted encontrar su método favorito para hacerlo.

Utilizo este procedimiento para importar datos de Excel a Moodle.

 99
Author: elomage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-18 10:14:57

Sé que esta es una vieja pregunta, pero me encontré con esta pregunta mientras luchaba con los mismos temas que la OP.

Al no haber encontrado ninguna de las soluciones ofrecidas una opción viable, me propuse descubrir si hay una manera de hacer esto solo usando Excel.

Afortunadamente, he encontrado que el problema de caracteres perdidos solo ocurre (en mi caso) al guardar desde el formato xlsx al formato csv. Intenté guardar el archivo xlsx en xls primero, luego en csv. En realidad trabajar.

Por favor, inténtelo y vea si funciona para usted. Buena suerte.

 41
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-30 00:36:23

Puede usar el comando iconv bajo Unix (también disponible en Windows como libiconv).

Después de guardar como CSV bajo Excel en la línea de comandos ponga:

iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv

(recuerde reemplazar cp1250 con su codificación).

Funciona rápido y excelente para archivos grandes como la base de datos de códigos postales, que no se pueden importar a GoogleDocs (límite de 400.000 celdas).

 34
Author: pmilewski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-12 10:33:40

La única "manera fácil" de hacer esto es la siguiente. En primer lugar, darse cuenta de que hay una diferencia entre lo que se muestra y lo que se mantiene oculto en el Excel .archivo csv.

(1) Abra un archivo de Excel donde tenga la información (.xls, .xlsx)

(2) En Excel, elija " CSV (Delimitado por comas) (*.csv) como el tipo de archivo y guardar como ese tipo.

(3) En el BLOC DE NOTAS (que se encuentra en "Programas" y luego Accesorios en el menú Inicio), abra el guardado .archivo csv en Bloc de notas

(4) a Continuación, elija Guardar Como..y en la parte inferior del cuadro "guardar como", hay un cuadro de selección etiquetado como"Codificación". Seleccione UTF-8 (no use ANSI o perderá todos los acentos, etc.). Después de seleccionar UTF-8, guarde el archivo en un nombre de archivo ligeramente diferente del original.

Este archivo está en UTF-8 y conserva todos los caracteres y acentos y se puede importar, por ejemplo, en MySQL y otros programas de bases de datos.

Esta respuesta está tomada de este forum .

 22
Author: Nick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-29 22:16:05

Otro que he encontrado útil: " Numbers" permite la configuración de codificación al guardar como CSV.

 21
Author: leander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-04 08:30:15

Puede hacer esto en una máquina Windows moderna sin software de terceros. Este método es confiable y manejará datos que incluyen comas entrecomilladas, caracteres de tabulación entrecomillada, caracteres CJK, etc.

1. Guardar desde Excel

En Excel, guarde los datos en file.txt usando el tipo Unicode Text (*.txt).

2. Iniciar PowerShell

Ejecute powershell desde el menú Inicio.

3. Cargar el archivo en PowerShell

$data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode

4. Guardar los datos como CSV

$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation
 18
Author: Don Cruickshank,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-13 18:22:54

"nevets1219" tiene razón sobre Google docs, sin embargo, si simplemente "importa" el archivo a menudo no lo convierte a UTF-8.

Pero si importa el CSV en una hoja de cálculo de Google existente, se convierte a UTF-8.

Aquí hay una receta:

  • En la pantalla principal de documentos (o Unidad), haga clic en el botón" Crear "y elija"Hoja de cálculo"
  • Desde el menú "Archivo" elija "Importar"
  • Haga clic en"Elegir archivo"
  • Elija "Reemplazar hoja de cálculo"
  • Elija cualquier carácter que esté utilizando como separador
  • Haga clic en"Importar"
  • Desde el menú "Archivo" elija "Descargar como" - > CSV (hoja actual)

El archivo resultante estará en UTF-8

 14
Author: RedYeti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-18 16:06:44

Para aquellos que buscan una solución totalmente programática (o al menos del lado del servidor), he tenido un gran éxito utilizando la herramienta xls2csv de catdoc.

Instalar catdoc:

apt-get install catdoc

Haz la conversión:

xls2csv -d utf-8 file.xls > file-utf-8.csv 

Esto es muy rápido.

Tenga en cuenta que es importante que incluya la bandera -d utf-8, de lo contrario codificará la salida en la codificación predeterminada cp1252, y corre el riesgo de perder información.

Tenga en cuenta que xls2csv también solo funciona con archivos .xls, no trabajar con archivos .xlsx.

 8
Author: mpowered,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-20 20:28:04

Qué hay de usar Powershell.

Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8
 7
Author: Michael Schau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-17 14:28:01

Por divertido que pueda parecer, la forma más fácil que encontré para guardar mi hoja de cálculo de 180MB en un archivo CSV UTF8 fue seleccionar las celdas en Excel, copiarlas y pegar el contenido del portapapeles en SublimeText.

 5
Author: oscaroscar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-27 15:14:27

No pude encontrar una solución de VBA para este problema en Mac Excel. Simplemente parecía que no había forma de generar texto UTF-8.

Así que finalmente tuve que renunciar a VBA, mordió la bala, y aprendí AppleScript. No fue tan malo como pensaba.

La solución se describe aquí: http://talesoftech.blogspot.com/2011/05/excel-on-mac-goodbye-vba-hello.html

 3
Author: anroy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-07 16:15:52

Asumiendo un entorno Windows, guarde y trabaje con el archivo como de costumbre en Excel, pero luego abra el archivo de Excel guardado en Gnome Gnumeric (gratis). Guarde la hoja de cálculo de Gnome Gnumeric como CSV que - para mí de todos modos-la guarda como UTF-8 CSV.

 3
Author: spring_chicken,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-01 18:09:24

Forma fácil de hacerlo: descargar open office ( aquí), cargar la hoja de cálculo y abrir el archivo excel (.xls o .xlsx). Luego simplemente guárdelo como un archivo CSV de texto y se abrirá una ventana pidiéndole que mantenga el formato actual o que lo guarde como un .Formato ODF. seleccione "mantener el formato actual" y en la nueva ventana seleccione la opción que mejor se adapte a usted, de acuerdo con el idioma en el que se ha escrito su archivo. Para el idioma español seleccione Europa Occidental (Windows-1252/ WinLatin 1) y el archivo funciona bien. Si seleccione Unicode (UTF-8), no va a funcionar con los caracteres españoles.

 3
Author: Yessus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-18 08:11:39
  1. Guardar archivo xls (archivo Excel) como texto Unicode=>el archivo se guardará en formato de texto (.txt)

  2. Cambiar formato desde .txt a .csv (renombrar el archivo desde XYX.txt a XYX.csv

 3
Author: Mena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-05 17:24:53

En Excel 2016, tenemos una opción de exportación CSV dedicada al formato UTF-8.

 3
Author: Nolmë Informatique,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-27 08:45:45

También me he encontrado con el mismo problema, pero hay una solución fácil para esto.

  1. Abra su archivo xlsx en Excel 2016 o superior.
  2. En "Guardar como" elija esta opción: "(CSV UTF-8(Delimitado por comas)*.csv)"

Funciona perfectamente y se genera un archivo csv que se puede importar en cualquier software. Importé este archivo csv en mi base de datos SQLITE y funciona perfectamente con todos los caracteres unicode intactos.

 3
Author: Krish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-30 07:39:29

Una segunda opción para "nevets1219" es abrir su archivo CSV en Notepad++ y hacer una conversión a ANSI.

Elija en el menú superior : Codificación - > Convertir a Ansi

 2
Author: SequenceDigitale.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-16 18:57:40

La forma más fácil: no necesita Open office y google docs

  1. Guarde su archivo como "Archivo de texto Unicode";
  2. ahora tienes un archivo de texto unicode
  3. abrirlo con" bloc de notas "y" Guardar como "seleccionando" utf-8 " o otra página de código que desee
  4. cambiar el nombre de la extensión de archivo de "txt" a "csv"

¡No lo abras con Ms-office de todos modos!!! Ahora tiene un archivo CSV delimitado por tabulaciones.

 2
Author: Solivan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-08 10:02:20

He escrito un pequeño script Python que puede exportar hojas de trabajo en UTF-8.

Solo tiene que proporcionar el archivo de Excel como primer parámetro seguido de las hojas que desea exportar. Si no proporciona las hojas, el script exportará todas las hojas de trabajo que estén presentes en el archivo de Excel.

#!/usr/bin/env python

# export data sheets from xlsx to csv

from openpyxl import load_workbook
import csv
from os import sys

reload(sys)
sys.setdefaultencoding('utf-8')

def get_all_sheets(excel_file):
    sheets = []
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    all_worksheets = workbook.get_sheet_names()
    for worksheet_name in all_worksheets:
        sheets.append(worksheet_name)
    return sheets

def csv_from_excel(excel_file, sheets):
    workbook = load_workbook(excel_file,use_iterators=True,data_only=True)
    for worksheet_name in sheets:
        print("Export " + worksheet_name + " ...")

        try:
            worksheet = workbook.get_sheet_by_name(worksheet_name)
        except KeyError:
            print("Could not find " + worksheet_name)
            sys.exit(1)

        your_csv_file = open(''.join([worksheet_name,'.csv']), 'wb')
        wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
        for row in worksheet.iter_rows():
            lrow = []
            for cell in row:
                lrow.append(cell.value)
            wr.writerow(lrow)
        print(" ... done")
    your_csv_file.close()

if not 2 <= len(sys.argv) <= 3:
    print("Call with " + sys.argv[0] + " <xlxs file> [comma separated list of sheets to export]")
    sys.exit(1)
else:
    sheets = []
    if len(sys.argv) == 3:
        sheets = list(sys.argv[2].split(','))
    else:
        sheets = get_all_sheets(sys.argv[1])
    assert(sheets != None and len(sheets) > 0)
    csv_from_excel(sys.argv[1], sheets)
 2
Author: Julian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-06 11:46:19

Excel normalmente guarda un archivo csv como codificación ANSI en lugar de utf8.

Una opción para corregir el archivo es usar Bloc de notas o Bloc de notas++:

  1. Abra el .csv con Bloc de notas o Notepad++.
  2. Copie el contenido al portapapeles de su computadora.
  3. Elimine el contenido del archivo.
  4. Cambie la codificación del archivo a utf8.
  5. Pegue el contenido del portapapeles.
  6. Guarde el archivo.
 2
Author: Jason Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-28 15:13:56

Encoding -> Convert to Ansi lo codificará en ANSI/UNICODE. Utf8 es un subconjunto de Unicode. Tal vez en ANSI se codifica correctamente, pero aquí estamos hablando de UTF8, @SequenceDigitale.

Hay formas más rápidas, como exportar como csv ( delimitado por comas ) y luego, abrir ese csv con Notepad++ ( gratis ), luego Codificar > Convertir a UTF8. Pero solo si tienes que hacer esto una vez por archivo. Si necesita cambiar y exportar con facilidad, entonces lo mejor es LibreOffice o GDocs solución.

 1
Author: Lucas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-07 08:31:06

Microsoft Excel tiene una opción para exportar hojas de cálculo usando codificación Unicode. Vea la siguiente captura de pantalla.

introduzca la descripción de la imagen aquí

 1
Author: vladaman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-10 15:22:00

Abierto .csv está bien con notepad++. si ve que su codificación es buena (ve todos los caracteres como deberían ser) presione codificación, luego convierta a ANSI else-averigüe cuál es su codificación actual

 1
Author: Marius Gri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-18 06:08:41

Otra solución es abrir el archivo por winword y guardarlo como txt y luego volver a abrirlo por excel y funcionará ISA

 1
Author: Essam Altantawi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-02 04:04:57

Diálogo Guardar > Botón Herramientas > Opciones Web > Pestaña Codificación

 1
Author: Elia Weiss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-16 16:24:29

Se encontró con el mismo problema y buscó en Google este post. Nada de lo anterior funcionó para mí. Por fin convertí mi Unicode .xls to .xml (elija Guardar como ... XML Spreadsheet 2003) y produjo el carácter correcto. Luego escribí código para analizar el xml y el contenido extraído para mi uso.

 1
Author: Silent Sojourner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-01 15:57:16

Otra forma es abrir el archivo CSV UTF-8 en el bloc de notas donde se mostrará correctamente. A continuación, reemplace todos los", " con pestañas. Pegue todo esto en un nuevo archivo de Excel.

 0
Author: Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-20 08:18:45

Tengo el mismo problema y me encuentro con este agregar , y funciona perfectamente bien en excel 2013 al lado de excel 2007 y 2010 para los que se menciona.

 0
Author: academic.user,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-28 18:10:22