Excel a CSV con codificación UTF8 [cerrado]

607

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 Guardar como CSV, manipula los caracteres españoles "especiales" que no son caracteres ASCII. También parece hacer esto con las comillas izquierda y derecha y los guiones largos que parecen provenir del usuario original que crea el archivo Excel en Mac.

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

Jeff Treuting
fuente
15
Vi esa pregunta antes de publicar, pero se trata de tener un CSV UTF8 y abrirlo en Excel, no al revés.
Jeff Treuting
77
Las respuestas a continuación parecen funcionar, pero son solo soluciones. ¿Alguien sabe cómo hacer que Excel haga esto?
NielW
2
Quería soltar mis 2 centavos: después de muchas pruebas y errores, intentos de usar las funciones de VBA, etc. (estoy usando Excel 97 por varias razones) ... simplemente Guardar como "CSV (MSDOS) "el formato resolvió este problema por mí. En mi caso, los datos CSV del seminario web de Citrix (GotoWebinar) terminan con caracteres para romper algún código de Apex en nuestro extremo; guardar en "CSV (MSDOS)" me resuelve (anteriormente) cargar la exportación CSV en Notepad ++ y pegarla en un UTF- 8 archivo en blanco y resaving. :-P :-)
AMM
2
Esta es una limitación de Excel muy molesta. Abrí una solicitud de función de voz de usuario sobre esto: excel.uservoice.com/forums/… , siéntase libre de votar y hacerlo realidad
Doron Yaacoby
77
Según la voz del usuario de Excel, Microsoft comenzó a trabajar en UTF-8 para .csv el mes pasado excel.uservoice.com/forums/…
moloko

Respuestas:

405

Una solución simple es usar la hoja de cálculo de Google. Pegue (valores solo si tiene fórmulas complejas) o importe la hoja y luego descargue CSV. Acabo de probar algunos personajes y funciona bastante bien.

NOTA: Google Sheets tiene limitaciones al importar. Ver aquí .

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

EDITAR: Otra alternativa : básicamente usan macro VB o complementos para forzar el guardado como UTF8. No he probado ninguna de estas soluciones, pero suenan razonables.

nevets1219
fuente
63
¿Quizás Joel Slotsky (ex primer ministro de Excel) podría enviarles su publicación de una década en The Absolute Minimum que todo desarrollador de software debe saber absolutamente, positivamente sobre Unicode y los conjuntos de caracteres ?
Irrupción
8
Con el Bloc de notas de Windows normal (usando guardar como, y luego eligiendo utf-8 en la opción de codificación) funcionó para mí. Para mí, ese es el mejor enfoque para mí, ya que debe ser realizado por usuarios que no tienen derechos de administrador en sus máquinas, por lo que no es necesario instalar software adicional.
Fer
99
OpenOffice JustWorks (tm) sin problemas - Creo que debería incluirse
Rbjz
99
Uhhh Solo tuve un escalofrío en mi espalda. ¿Qué pasa si su archivo de Excel tiene 200,000 líneas? ¿O contiene datos confidenciales que no desea incluir en una hoja de cálculo de Excel? Use Openoffice / Libreoffice si lo necesita.
Seb
2
¿Qué pasa si el tamaño del archivo es grande? La hoja de Goolge tiene un límite de tamaño de alrededor de 75M si no recuerdo mal. Tengo un archivo de 700M
News_is_Selection_Bias
133

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

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

calc save dialog

aendrew
fuente
Estoy seguro de que esto funciona, simplemente ya no tengo OpenOffice, por lo que Google Docs fue más fácil en mi situación. pero gracias por la sugerencia
Jeff Treuting
19
OpenOffice Calc tiene más y mejores opciones al abrir y guardar archivos "CSV" (separadores de campo, codificación, etc.) que Google Docs y Excel. Además, Google Docs actualmente tiene un límite de 400,000 celdas por hoja de cálculo, que OpenOffice Calc no tiene.
Christian Davén
3
Puedo confirmar que LibreOffice también funciona: ofrece opciones de codificación de caracteres en la exportación que lamentablemente faltan en Excel.
Rupert Rawnsley
1
Esta es una gran opción para quienes trabajan con datos confidenciales. La suite OpenOffice puede ser una instalación portátil para aquellos con máquinas bloqueadas.
Nathan
119
  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 archivo "* .txt" está delimitado por TAB, no delimitado por comas y, por lo tanto, no es un verdadero CSV.

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

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

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

Utilizo este procedimiento para importar datos de Excel a Moodle.

elomage
fuente
55
Finalmente algo que funcionó! Probé las opciones de Excel anteriores en Excel 2013 sin éxito. ¡Simplemente cambié a usar \ t como carácter dividido cuando lo analicé y funcionó perfecto!
Mattias Lindberg
1
Necesario para exportar un XLS como CSV para importar en MySQL. Usando Excel 2003 exporté en formato "Texto Unicode (.txt)", luego usé Notepad ++ para reemplazar el TAB ;, luego importé el archivo txt a phpmyadmin con el "Juego de caracteres predeterminado del archivo: utf-8", Formato "CSV usando LOAD DATA ". Toda la codificación se transfirió correctamente.
Kai Noack
3
Gracias. Esto tiene sentido. Por qué MS todavía se niega a usar UTF como un estándar me supera.
Oskar Limka
44
@OskarLimka: Cuando dices "UTF", ¿te refieres a UTF-8 o UTF-16? Porque Microsoft usa bastante UTF-16.
Flimm
77
"La buena noticia es que todos los caracteres internacionales están en UTF16 (nota, no en UTF8)". : completa tontería . UTF-8 y UTF-16 son dos formas de codificar el conjunto completo de puntos de código Unicode.
43

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

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

Afortunadamente, descubrí que el problema del personaje perdido solo ocurre (en mi caso) cuando se guarda del formato xlsx al formato csv. Intenté guardar el archivo xlsx en xls primero, luego en csv. En realidad funcionó.

Pruébalo y comprueba si te funciona. Buena suerte.

Eric
fuente
3
Para mí, en Excel para Mac 2011, esto funciona, pero solo si lo elijo Windows comma separated (CSV). No funciona si uso las opciones CSV predeterminadas o DOS: ambas sustituyen los caracteres acentuados por caracteres basura aleatorios. La prueba de caracteres, incluyendo é, è, â... No sé si es UTF8 real, pero los personajes no se truncan.
user56reinstatemonica8
12
Confirmación rápida: los archivos producidos con este método en (Excel para Mac 2011) no producen CSV UTF-8, PERO , sí producen CSV que al menos contienen los caracteres correctos y, por lo tanto, pueden convertirse sin problemas a UTF8 en un editor de texto , que es un gran paso adelante de la ridícula basura destrozada que Excel escupe por defecto.
user56reinstatemonica8
Sí, de acuerdo, esto también funcionó para mí (Excel Mac 2011) y realmente merece más votos a favor.
cbmanica
1
Esto no funcionó para mí (usando Excel 2007). Tenía 2 caracteres no ASCII en mi archivo y uno de ellos se guardó bien de esta manera, el otro no.
EM0
1
Tenga en cuenta que el archivo CSV resultante estará en UTF-16, no en UTF-8 como se hizo la pregunta.
Flimm
38

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

Después de guardar como CSV en Excel en la línea de comando poner:

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).

pmilewski
fuente
55
Eso es inútil si su contenido contiene caracteres que no pueden codificarse en 1250, una mejor manera sería exportar como "Unicode .txt" en Excel y usar iconv para convertir desde Utf16. Tal vez también haga un sedo trpara traducir de '\ t' a ','
Sebastian
55
La codificación predeterminada de Excel parece ser CP858 cuando se guarda como CSV o CSV de MS-DOS, y Windows 1252 cuando se guarda como CSV de Windows (como se probó en Excel para Mac 2011).
claymation
44
Estoy completamente de acuerdo en que esto es inútil, ya que cuando Excel guarda en formato .csv, pierde información cuando se trata de puntos de código Unicode que no se pueden codificar en una codificación de un byte por punto de código.
Flimm
26

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

1. Guardar desde Excel

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

2. Inicie PowerShell

Ejecute powershelldesde el menú Inicio.

3. Cargue el archivo en PowerShell

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

4. Guarde los datos como CSV

$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation
Don Cruickshank
fuente
2
Este método funcionó perfectamente para un archivo CSV con más de 15,000 registros, con líneas de más del límite de 1024 caracteres impuesto por Notepad. Toma segundos y no utiliza software de terceros. ¡Gracias!
absoluta
Ahh, incluso cuando intenté usar Google Sheets, me encontré con el mismo problema. Entonces, tal vez esta estrategia de PowerShell hubiera funcionado. Aquí estaba mi problema. Para ciertos caracteres, como ciertos emojis, debe usar CHARACTER SET utf8mb4como se describe aquí: stackoverflow.com/a/10959780/470749
Ryan
1
@ Ryan Este problema es específico de MySQL. Acabo de probar el carácter problemático en esa pregunta y funcionó bien tanto en Excel como en PowerShell.
Don Cruickshank
24

La única "forma fácil" de hacerlo es la siguiente. Primero, tenga en cuenta que hay una diferencia entre lo que se muestra y lo que se mantiene oculto en el archivo .csv de Excel.

  1. Abra un archivo de Excel donde tenga la información (.xls, .xlsx)
  2. En Excel, elija "CSV (delimitado por comas) (* .csv) como tipo de archivo y guárdelo como ese tipo.
  3. En NOTEPAD (que se encuentra en "Programas" y luego Accesorios en el menú Inicio), abra el archivo .csv guardado en el Bloc de notas
  4. Luego 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 con un nombre de archivo ligeramente diferente del original.

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

Esta respuesta está tomada de este foro .

Mella
fuente
99
Esto es incorrecto, debido al paso 2, guardar como CSV. El problema con esto es que Excel guarda el archivo CSV en cp1252, que es una codificación de un byte por punto de código. Esto conduce a la pérdida de información para los caracteres que no caben en un byte.
Flimm
Funcionó para mí, pero no puedo entender por qué. Mi archivo generado por JavaScript siempre se lee incorrectamente en Excel (como una codificación diferente). Pero cuando abro en el bloc de notas y guardo como utf-8, ¡funciona bien! Entonces, parece que hay un metadato con la codificación. ¿Cómo funciona? Si el bloc de notas puede guardar archivos CSV UTF-8 y Excel puede leerlos, ¿es posible en mi programa generar archivos CSV UTF-8 correctos, que Excel pueda leer?
felipeaf
Trabajó para mi. En un XSLX convertido de Access. Los formatos diacríticos y de solo LF e ISO están bien. Uno u otro no funcionó con soluciones más populares.
RolfBly
21

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

leander
fuente
8
^ es una aplicación en Mac OSX
Sruit A.Suk
También tenga cuidado con los números, ya que tiene una limitación en el número de filas, y he convertido datos como este antes de no darme cuenta de que había recortado algunos de ellos. Excel / CSV tiene límites mucho más altos.
MrE
14

"nevets1219" tiene razón sobre los documentos de Google, 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 Drive), haga clic en el botón "Crear" y seleccione "Hoja de cálculo"
  • En el menú "Archivo", elija "Importar"
  • Haga clic en "Elegir archivo"
  • Elija "Reemplazar hoja de cálculo"
  • Elige el personaje que estés usando como separador
  • Haga clic en "Importar"
  • En el menú "Archivo", elija "Descargar como" -> CSV (hoja actual)

El archivo resultante estará en UTF-8

RedYeti
fuente
2
El problema con esta respuesta es cómo generó el archivo CSV en primer lugar. Si lo hizo al simplificar el guardado como CSV en Excel, el archivo CSV estará en cp1252, que es una codificación de un byte por punto de código. Esto conducirá a la pérdida de información cuando se trata de caracteres que no pueden caber en un byte.
Flimm
Bueno, eso es un problema con cualquiera de estas respuestas. Y estará con cualquier respuesta sobre cómo convertir a UTF-8 ya que no hay forma de saber o controlar cuál era la codificación original.
RedYeti
1
Algunas de las respuestas hablan sobre cómo solucionar ese problema, por ejemplo, stackoverflow.com/a/15500052/247696
Flimm
13

Usando Notepad ++

Esto reparará el archivo CSV dañado guardado por Excel y lo volverá a guardar en la codificación adecuada.

  • Exportar CSV desde Excel
  • Cargar en Notepad ++
  • Fix codificación
  • Salvar

Excel guarda en CP-1252 / Windows-1252. Abra el archivo CSV en Notepad ++. Seleccione

Encoding > Character Sets > Western European > Windows-1252

Entonces

Encoding > Convert to UTF-8
File > Save

Primero dígale a Notepad ++ la codificación, luego convierta. Algunas de estas otras respuestas se están convirtiendo sin establecer primero la codificación adecuada, lo que daña aún más el archivo. Ellos a su vez lo que debería ser en . Si tu personaje no cabe en el CP-1252, entonces ya se perdió cuando se guardó como CSV. Usa otra respuesta para eso.

Chloe
fuente
Puede que me equivoque, pero no puede guardar el archivo como ".csv" en Notepad ++ y de eso se trata.
Daniel Maurer
1
Sí tu puedes. Solo está guardando un archivo de texto, y .csves un archivo de texto. Esta respuesta abrirá el archivo CSV dañado por Excel, lo arreglará y luego lo volverá a guardar con la codificación adecuada.
Chloe
Lo que estás comunicando tiene consecuencias de largo alcance. ¡Empleando este método eminente, podemos lograr una mayor calidad de datos! ¡Bravo! (Prueba: ¿por qué este comentario es tan curioso?)
thymaro
9

En Excel 2016 y versiones posteriores (incluido Office 365), hay una opción CSV dedicada al formato UTF-8.

En Office 365, haga Guardar como; donde anteriormente uno podría haber elegido CSV (delimitado por comas), ahora uno de los tipos de archivos que puede guardar es CSV UTF-8 (delimitado por comas) (* .csv)

Nolmë Informatique
fuente
1
Debe proporcionar algunas instrucciones sobre cómo usar esa opción.
rovyko
1
@dexgecko seguro: se llama el botón / menú "Guardar". Ahora hay cuatro tipos de exportación CSV en Excel 2016 en Windows: CSV se guarda como "ANSI" (Latin1 más o menos equivalente, pero eso puede ser diferente con una instalación de sistema operativo no occidental, no estoy seguro), UTF-8 CSV guarda como UTF-8 con BOM, CSV (DOS) guarda como CP850 (de nuevo, ¿más depende de la instalación?) y CSV (Mac) guarda como MacRoman.
Sin embargo, Excel solo podrá leer archivos UTF-8 y ANSI CSV (Excel puede usar la lista de materiales para elegir). Para importar desde otra codificación, cambie el nombre como .txt, ábralo desde Excel (entonces tiene una larga lista de codificaciones para elegir), y dado que no interpretará el separador correctamente, use el botón "convertir" para dividir las filas. También puede usar este truco al importar un CSV desde una convención de idioma diferente (en francés, por ejemplo, el separador archivado es un punto y coma, ya que la coma ya se usa como separador decimal).
1
@ Jean-ClaudeArbaut Extraño, no veo una opción
CST
1
@dexgecko Extraño, de hecho. De acuerdo con esta página (en francés, lo siento), la funcionalidad se agregó en noviembre de 2016, en la versión de compilación 1610. Actualmente tengo la versión 1802. Sin embargo, pensé que solo Office 365 tuvo ese tipo de evoluciones, y estoy usando Office Pro 2016 (no el sabor 365). Quizás intente actualizar su oficina.
8

Para aquellos que buscan una solución completamente programática (o al menos del lado del servidor), he tenido un gran éxito al usar 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 increíblemente rápido.

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

Tenga en cuenta que xls2csvtambién solo funciona con .xlsarchivos, no funciona con.xlsx archivos.

mpowered
fuente
O elija una codificación de salida diferente, no puede solucionar los problemas de todos con una sola respuesta :-)
mpowered
2
Sé que es lamentable, pero el hecho es que esta respuesta va a causar problemas para algunos usuarios. El hecho de que solo haya ejecutado esto con caracteres que encajan en cp1252 es una suerte, no proporcionó ninguna advertencia sobre este riesgo en la respuesta, simplemente dijo que "funcionó sin problemas". No se le ha pedido que solucione los problemas de todos, solo los OP, que mucha gente comparte.
Flimm
1
Ahí tienes, solucioné el problema en la publicación de respuesta y eliminé el voto negativo.
Flimm
7

¿Qué pasa con el uso de Powershell?

Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8
Michael Schau
fuente
1
El texto de los caracteres españoles que no sean ascii se cambiará del carácter español original a la cadena de codificación utilizada por ANSI. Entonces, el texto no será el mismo que el original.
Jason Williams
7

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

  1. Guarde su archivo como "archivo de texto Unicode";
  2. ahora tienes un archivo de texto unicode
  3. ábralo con "bloc de notas" y "Guardar como" seleccionando "utf-8" u otra página de códigos que desee
  4. cambie el nombre de la extensión de archivo de "txt" a "csv". Esto dará como resultado un archivo csv UTF-8 delimitado por tabulaciones.
  5. Si desea un archivo delimitado por comas , abra el csvarchivo que acaba de cambiar de nombre y reemplace todas las pestañas con comas. Para hacer esto en el Bloc de notas en Win 10, simplemente seleccione un campo de pestaña y luego haga clic Ctrl+H. En la ventana que se abre, escriba una coma ,en el campo "Reemplazar por" y luego haga clic en "Reemplazar todo". Guarda tu archivo. El resultado será un archivo csv UTF-8 delimitado por comas.

¡No lo abras con MS-Office de todos modos! Ahora tiene un archivo CSV delimitado por tabulaciones. O bien, delimitado por comas si aplicó el paso número 5.

Solivan
fuente
2
Para un archivo delimitado por tabulaciones, puede ser mejor usar una .txtextensión. csv, es decir, archivos separados por comas, es confuso.
dof1985
5

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

oscaroscar
fuente
1
Esto funciona porque Excel proporciona una versión TSV de la selección a través del portapapeles. También puede usar el Bloc de notas en lugar de SublimeText, pero recuerde guardar con la codificación UTF-8 si lo hace.
Don Cruickshank
3

Suponiendo un entorno de 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.

pollo primavera
fuente
3

Manera fácil de hacerlo: descargue open office ( aquí ), cargue la hoja de cálculo y abra el archivo de Excel ( .xlso .xlsx). Luego, 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 formato .ODF. seleccione "mantener el formato actual" y en la nueva ventana seleccione la opción que mejor funcione para usted, de acuerdo con el idioma en el que se haya escrito su archivo. Para el idioma español, seleccione Europa occidental ( Windows-1252/ WinLatin 1) y el archivo funciona bien. Si selecciona Unicode ( UTF-8), no funcionará con los caracteres españoles.

Yessus
fuente
3
No hay ninguna razón por la que UTF-8 no funcione con caracteres españoles.
Flimm
3
  1. Guardar archivo xls (archivo Excel) como texto Unicode => el archivo se guardará en formato de texto (.txt)

  2. Cambie el formato de .txt a .csv (cambie el nombre del archivo de XYX.txt a XYX.csv

Mena
fuente
3
Esto no funciona porque sus instrucciones no incluyen el paso necesario de convertir pestañas a comas en los datos del archivo.
Matthew Rodatus
1
El "texto Unicode" de Excel es UTF-16, no UTF-8 como se solicita en la pregunta.
Flimm
3

También me encontré 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.

Krish
fuente
Esta opción no está disponible en mi copia de Excel 2016. ¿Está utilizando la versión de Office 365?
Don Cruickshank
2

Encontré el mismo problema y busqué en Google esta publicación. Nada de lo anterior funcionó para mí. Finalmente, convertí mi .xls Unicode a .xml (elija Guardar como ... Hoja de cálculo XML 2003) y produjo el carácter correcto. Luego escribí el código para analizar el xml y extraje el contenido para mi uso.

Sojourner silencioso
fuente
2

He escrito un pequeño script de 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)
Julian
fuente
He actualizado un poco la implementación y he
Julian
2

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

Una opción para corregir el archivo es usar Notepad o Notepad ++:

  1. Abra el archivo .csv con Notepad o Notepad ++.
  2. Copie el contenido al portapapeles de su computadora.
  3. Eliminar el contenido del archivo.
  4. Cambia la codificación del archivo a utf8.
  5. Pegue el contenido desde el portapapeles.
  6. Guarda el archivo.
Jason Williams
fuente
No estoy seguro acerca de las versiones anteriores de NP ++, pero en la versión actual solo puede seleccionar Codificación> Convertir a UTF-8. reemplaza los pasos 2-5
Felk
1

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

SequenceDigitale.com
fuente
No tengo idea de por qué te votaron mal. Notepad ++ lo hizo por mí. No puedo almacenar mi archivo en la hoja de cálculo de Google, ya que es confidencial.
Zane
3
El problema con esta respuesta es cómo generar el archivo CSV en primer lugar. Si simplemente guarda como CSV desde Excel, la codificación será cp1252, que es una codificación de un byte por punto de código y, por lo tanto, perderá información para los caracteres que no encajan en eso. Además, al final, debe convertir a UTF-8, y no a Ansi, si desea hacer lo que le pidió la pregunta.
Flimm
Esta es, con mucho, la respuesta más fácil de la OMI. Estoy usando Excel 2016 y lo encontré guardado en la codificación ANSI de forma predeterminada, pero lo obtuve en UTF-8, que es lo que quería.
rovyko
1

Codificación -> Convertir a Ansi lo codificará en ANSI / UNICODE. Utf8 es un subconjunto de Unicode. Quizás en ANSI se codifique 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 tiene que hacer esto una vez por archivo. Si necesita cambiar y exportar con frecuencia, lo mejor es la solución LibreOffice o GDocs.

Lucas
fuente
55
"Utf8 es un subconjunto de Unicode": esto no tiene sentido. UTF-8 es una codificación de Unicode.
jameshfisher
No estoy seguro de poder encontrar esta opción "Codificación -> Convertir a Ansi".
Flimm
Simplemente un ANSI csv en Notepad ++ y cambiar la codificación del archivo a utf8 hace que los caracteres originales en español no ascii se conviertan en cadenas de codificación que no coinciden con el texto original.
Jason Williams
1

Microsoft Excel tiene una opción para exportar una hoja de cálculo con codificación Unicode. Ver la siguiente captura de pantalla.

ingrese la descripción de la imagen aquí

vladaman
fuente
14
El "Texto Unicode" se guarda en UTF-16 LE (Little Endian), no en UTF-8 como lo solicitó el OP.
hacha
Sí, pero es la mejor manera de obtener soporte Unicode para sus valores separados por x en Excel. ¡He tenido todo tipo de problemas tratando de hacer que Excel juegue con UTF-8! Leer más
mcNux
1

Abra .csv bien con el bloc de notas ++. si ve que su codificación es buena (ve todos los caracteres como deberían ser) presione codificación, luego convierta a ANSI más; descubra cuál es su codificación actual

Marius Gri
fuente
eso funcionó para mí ... tuve problemas con los caracteres griegos cuando exporté mysql db como csv y lo importé para sobresalir ...
nikolas
1
El problema con esto es cómo generar el archivo CSV en primer lugar. Si simplemente guarda como archivo CSV en Excel, lo guardará en cp1252, que es una codificación de un byte por punto de código y, por lo tanto, pierde información.
Flimm
1

otra solución es abrir el archivo con winword y guardarlo como txt y luego volver a abrirlo con Excel y funcionará ISA

Essam Altantawi
fuente
1

Cuadro de diálogo Guardar> Botón Herramientas> Opciones web> Pestaña Codificación

Elia Weiss
fuente
Esto no funciona para mi. Según tengo entendido, solo tiene efecto cuando se guarda como formato web (HTML, etc.), no cuando se guarda como CSV.
jogojapan
Funciona para mí - oficina 2007
Elia Weiss
no funciona en Office 2010 eligiendo cualquier perfil CSV.
Hart
0

Tengo el mismo problema y me encuentro con este complemento, y funciona perfectamente bien en Excel 2013, además de Excel 2007 y 2010, por lo que se menciona.

académico.usuario
fuente