Da Excel a CSV con codifica UTF8 [chiuso]


607

Ho un file Excel con alcuni caratteri spagnoli (tilde, ecc.) Che devo convertire in un file CSV da utilizzare come file di importazione. Tuttavia, quando faccio Save As CSV, rovina i caratteri "speciali" spagnoli che non sono caratteri ASCII. Sembra anche fare questo con le virgolette sinistra e destra e i trattini lunghi che sembrano provenire dall'utente originale che crea il file Excel in Mac.

Dato che CSV è solo un file di testo, sono sicuro che può gestire una codifica UTF8, quindi suppongo che sia una limitazione di Excel, ma sto cercando un modo per passare da Excel a CSV e mantenere i caratteri non ASCII intatto.


15
Ho visto quella domanda prima di postarla ma riguarda già avere un CSV UTF8 e aprirlo in Excel non viceversa.
Jeff Treuting,

7
Le risposte seguenti sembrano funzionare, ma sono solo soluzioni alternative. Qualcuno sa come fare Excel fare questo?
NielW,

2
Volevo perdere i miei 2 centesimi: dopo un sacco di tentativi ed errori, tentativi di usare le funzioni VBA, ecc ... (Sto usando Excel 97 per vari motivi) ... semplicemente salvando-come in "CSV (MSDOS) "il formato ha risolto questo problema per me. Nel mio caso, i dati CSV del webinar Citrix (GotoWebinar) finiscono con i caratteri per spezzare un po 'di codice Apex da parte nostra - il salvataggio in "CSV (MSDOS)" mi risolve (precedentemente) caricando l'esportazione CSV in Notepad ++ e incollandolo in un UTF- 8 file vuoti e salvataggio. :-P :-)
AMM

2
Questa è una limitazione di Excel molto fastidiosa. Ho aperto una richiesta di servizio su questo servizio: excel.uservoice.com/forums/… , sentiti libero di votare e farlo accadere
Doron Yaacoby,

7
secondo l'uservoice di Excel, Microsoft ha iniziato a lavorare su UTF-8 per .csv il mese scorso excel.uservoice.com/forums/…
moloko

Risposte:


405

Una semplice soluzione consiste nell'utilizzare Google Spreadsheet. Incolla (valori solo se hai formule complesse) o importa il foglio, quindi scarica CSV. Ho appena provato alcuni personaggi e funziona piuttosto bene.

NOTA: Fogli Google presenta delle limitazioni durante l'importazione. Vedi qui .

NOTA: fai attenzione ai dati sensibili con Fogli Google.

EDIT: Un'altra alternativa - fondamentalmente usano macro VB o componenti aggiuntivi per forzare il salvataggio come UTF8. Non ho provato nessuna di queste soluzioni ma sembrano ragionevoli.


63
Forse Joel Slotsky (ex PM di Excel) potrebbe inviare loro il suo post decennale su Il minimo assoluto Ogni sviluppatore di software assolutamente, positivamente, deve conoscere Unicode e set di caratteri ?
Indolenza

8
Con il normale Blocco note di Windows (usando save as, e quindi scegliendo utf-8 nell'opzione di codifica) ha funzionato per me. Per me questo è l'approccio migliore per me, dal momento che deve essere fatto da utenti che non hanno diritti di amministratore sui loro computer, quindi non è richiesta l'installazione di software aggiuntivo.
Fer

9
OpenOffice JustWorks (tm) senza problemi - Penso che dovrebbe essere incluso
Rbjz

9
Uhhh. Ho appena avuto un brivido lungo la schiena. Cosa succede se il tuo file Excel ha 200.000 righe? O contiene dati sensibili che non vuoi includere in un spreadsheat di Excel? Usa Openoffice / Libreoffice se necessario.
Seb

2
Che cosa succede se la dimensione del file è grande? I fogli di Goolge hanno un limite di dimensioni di circa 75 M se ricordo bene. Ho un file di 700M
News_is_Selection_Bias il

133

Ho scoperto che l' applicazione per fogli di calcolo di OpenOffice , Calc, è davvero brava a gestire i dati CSV.

Nella finestra di dialogo "Salva con nome ...", fai clic su "Opzioni formato" per ottenere codifiche diverse per CSV. LibreOffice funziona allo stesso modo di AFAIK.

finestra di dialogo di salvataggio calc


Sono sicuro che funzioni, ma non ho già OpenOffice, quindi Google Docs è stato più facile nella mia situazione. ma grazie per il suggerimento
Jeff Treuting il

19
OpenOffice Calc ha più e migliori opzioni per l'apertura e il salvataggio di file "CSV" (separatori di campi, codifica ecc.) Rispetto a Google Documenti ed Excel. Inoltre, Google Docs attualmente soffre di un limite di 400.000 celle per foglio di calcolo, a differenza di OpenOffice Calc.
Christian Davén,

3
Posso confermare che LibreOffice funziona anche: offre opzioni di codifica dei caratteri durante l'esportazione che purtroppo mancano in Excel.
Rupert Rawnsley,

1
Questa è un'ottima opzione per chi lavora con dati sensibili. La suite OpenOffice può essere un'installazione portatile per chi ha macchine bloccate.
Nathan,

119
  1. Salvare il foglio Excel come "Testo Unicode (.txt)". La buona notizia è che tutti i personaggi internazionali sono in UTF16 (nota, non in UTF8). Tuttavia, il nuovo file "* .txt" è delimitato da TAB, non delimitato da virgole e pertanto non è un vero CSV.

  2. (facoltativo) A meno che non sia possibile utilizzare un file delimitato da TAB per l'importazione, utilizzare l'editor di testo preferito e sostituire i caratteri TAB con virgole ",".

  3. Importa il tuo file * .txt nell'applicazione di destinazione. Assicurarsi che possa accettare il formato UTF16.

Se UTF-16 è stato implementato correttamente con supporto per punti di codice non BMP, è possibile convertire un file UTF-16 in UTF-8 senza perdere informazioni. Lascio a te trovare il tuo metodo preferito per farlo.

Uso questa procedura per importare dati da Excel a Moodle.


5
Finalmente qualcosa che ha funzionato! Ho provato le opzioni di Excel sopra su Excel 2013 senza successo. Ho appena passato a usare \ t come carattere diviso quando l'ho analizzato e ha funzionato perfettamente!
Mattias Lindberg,

1
Necessario esportare un XLS come CSV per importare in MySQL. Usando Excel 2003 ho esportato nel formato "Unicode Text (.txt)", poi ho usato Notepad ++ per sostituire la TAB ;, quindi ho importato il file txt in phpmyadmin con "Set di caratteri del file: utf-8", Formato "CSV utilizzando LOAD DATA ". Tutta la codifica è stata trasferita correttamente.
Kai Noack,

3
Grazie. Questo ha senso. Perché MS rifiuta ancora di usare UTF come standard mi batte.
Oskar Limka,

4
@OskarLimka: Quando dici "UTF", intendi UTF-8 o UTF-16? Perché Microsoft usa UTF-16 abbastanza.
Flimm,

7
"La buona notizia è che tutti i personaggi internazionali sono in UTF16 (nota, non in UTF8)." : completa assurdità . UTF-8 e UTF-16 sono due modi per codificare l'intero set di punti di codice Unicode.

43

So che questa è una vecchia domanda, ma mi è capitato di imbattermi in questa domanda mentre lottavo con gli stessi problemi del PO.

Non avendo trovato nessuna delle soluzioni offerte un'opzione praticabile, ho deciso di scoprire se c'è un modo per farlo usando solo Excel.

Fortunatamente, ho scoperto che il problema con il personaggio perso si verifica (nel mio caso) solo quando si salva dal formato xlsx al formato CSV. Ho provato prima a salvare il file xlsx su xls, quindi su CSV. In realtà ha funzionato.

Per favore, provalo e vedi se funziona per te. In bocca al lupo.


3
Per me, su Excel per Mac 2011, funziona, ma solo se lo scelgo Windows comma separated (CSV). Non funziona se utilizzo le opzioni CSV predefinite o DOS: entrambe sostituiscono i caratteri accentati con caratteri spazzatura casuali. Testato per i personaggi tra cui é, è, â... Non so se è vero UTF8 ma i personaggi non vengono alterati.
user56reinstatemonica8

12
Conferma rapida: i file prodotti con questo metodo su (Excel per Mac 2011) non producono CSV UTF-8, MA producono CSV che contengono almeno i caratteri corretti e possono quindi essere convertiti indolore in UTF8 in un editor di testo , che rappresenta un grande passo in avanti rispetto alla ridicola spazzatura maledetta che Excel sputa di default.
user56reinstatemonica8

Sì, d'accordo, questo ha funzionato anche per me (Excel Mac 2011) e merita davvero più voti.
cbmanica,

1
Questo non ha funzionato abbastanza per me (usando Excel 2007). Avevo 2 caratteri non ASCII nel mio file e uno di loro è stato salvato in questo modo, l'altro no.
EM0

1
Si noti che il file CSV risultante sarà in UTF-16, non UTF-8 come la domanda posta.
Flimm,

38

Puoi usare il comando iconv sotto Unix (disponibile anche su Windows come libiconv ).

Dopo aver salvato come CSV sotto Excel nella riga di comando inserisci:

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

(ricorda di sostituire cp1250 con la tua codifica).

Funziona velocemente e alla grande per file di grandi dimensioni come database di codici postali, che non possono essere importati in GoogleDocs (limite di 400.000 celle).


5
Ciò è inutile se il contenuto contiene caratteri che non possono essere codificati nel 1250, un modo migliore sarebbe esportare come "Unicode .txt" in Excel e usare iconv per convertire da Utf16. Magari fai anche un sedo trper tradurre da '\ t' a ','
Sebastian

5
La codifica predefinita di Excel sembra essere CP858 quando si salva come CSV o CSV MS-DOS e Windows 1252 quando si salva come CSV Windows (come testato su Excel per Mac 2011).
Claymation,

4
Sono completamente d'accordo sul fatto che ciò sia inutile, poiché quando Excel salva in formato .csv, perde informazioni quando si tratta di punti di codice Unicode che non possono essere codificati in una codifica a byte singolo per codice.
Flimm,

26

Puoi farlo su un moderno computer Windows senza software di terze parti. Questo metodo è affidabile e gestirà i dati che includono virgolette, caratteri di tabulazione, caratteri CJK, ecc.

1. Salva da Excel

In Excel, salva i dati file.txtutilizzando il tipoUnicode Text (*.txt) .

2. Avviare PowerShell

Correre powershell dal menu Start.

3. Caricare il file in PowerShell

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

4. Salvare i dati come CSV

$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation

2
Questo metodo ha funzionato perfettamente per un file CSV con oltre 15.000 record, con righe di oltre il limite di 1024 caratteri imposte dal Blocco note. Richiede pochi secondi e non utilizza software di terze parti. Grazie!
assoluto

Ahh, anche quando ho provato a utilizzare Fogli Google, ho riscontrato lo stesso problema. Quindi forse questa strategia di PowerShell avrebbe funzionato. Ecco il mio problema Per alcuni personaggi come alcuni emoji, devi usare CHARACTER SET utf8mb4come descritto qui: stackoverflow.com/a/10959780/470749
Ryan

1
@Ryan Questo problema è specifico di MySQL. Ho appena provato il carattere problematico in quella domanda e ha funzionato bene in Excel e PowerShell.
Don Cruickshank,

24

L'unico "modo semplice" per farlo è il seguente. Innanzitutto, renditi conto che esiste una differenza tra ciò che viene visualizzato e ciò che viene nascosto nel file .csv di Excel.

  1. Apri un file Excel in cui hai le informazioni (.xls, .xlsx)
  2. In Excel, seleziona "CSV (Comma Delimited) (* .csv) come tipo di file e salva come quel tipo.
  3. In NOTEPAD (disponibile in "Programmi" e quindi Accessori nel menu Start), apri il file .csv salvato nel Blocco note
  4. Quindi scegli -> Salva con nome ... e nella parte inferiore della casella "Salva con nome", c'è una casella di selezione etichettata come "Codifica". Seleziona UTF-8 (NON utilizzare ANSI o perdi tutti gli accenti ecc.). Dopo aver selezionato UTF-8, quindi salvare il file con un nome file leggermente diverso dall'originale.

Questo file è in UTF-8 e conserva tutti i caratteri e gli accenti e può essere importato, ad esempio, in MySQL e altri programmi di database.

Questa risposta è tratta da questo forum .


9
Ciò non è corretto, a causa del passaggio 2, salvataggio come CSV. Il problema è che Excel salva il file CSV in cp1252, che è una codifica a un byte per punto di codice. Questo porta alla perdita di informazioni per i caratteri che non possono rientrare in un byte.
Flimm,

Ha funzionato per me, ma non riesco a capire perché. Il mio file generato da JavaScript è sempre letto in modo errato in Excel (come una codifica diversa). Ma quando apro il blocco note e salvo come utf-8, funziona benissimo! Quindi, sembra che ci siano metadati con la codifica. Come funziona? Se il blocco note può salvare i file CSV UTF-8 ed Excel li legge, è possibile nel mio programma generare file CSV UTF-8 corretti, che Excel può leggere?
Felipeaf,

Ha funzionato per me. In un XSLX convertito da Access. I formati per i segni diacritici e solo LF e ISO sono tutti OK. L'uno o l'altro non funzionava con soluzioni più popolari.
RolfBly,

21

Un altro che ho trovato utile: " Numbers " consente le impostazioni di codifica quando si salva come CSV.


8
^ è un'applicazione in Mac OSX
Sruit A.Suk

fai anche attenzione con Numbers in quanto ha una limitazione nel numero di righe e ho convertito i dati in questo modo prima di non rendermi conto che ne erano stati tagliati alcuni. Excel / CSV ha limiti molto più alti.
MrE

14

"nevets1219" ha ragione sui documenti di Google, tuttavia se si "importa" semplicemente il file spesso non lo converte in UTF-8.

Ma se importi CSV in un foglio di lavoro Google esistente, viene convertito in UTF-8.

Ecco una ricetta:

  • Nella schermata principale di Documenti (o Drive) fai clic sul pulsante "Crea" e scegli "Foglio di calcolo"
  • Dal menu "File", seleziona "Importa"
  • Fai clic su "Scegli file"
  • Scegli "Sostituisci foglio di lavoro"
  • Scegli il personaggio che stai usando come Separatore
  • Fai clic su "Importa"
  • Dal menu "File", seleziona "Scarica come" -> CSV (foglio corrente)

Il file risultante sarà in UTF-8


2
Il problema con questa risposta è innanzitutto come hai generato il file CSV. Se lo hai fatto semplificando il salvataggio come CSV in Excel, il file CSV sarà in cp1252, che è una codifica di un byte per punto di codice. Ciò comporterà la perdita di informazioni quando si tratta di caratteri che non possono rientrare in un byte.
Flimm,

Bene, questo è un problema con una di queste risposte. E sarà con qualsiasi risposta a come convertire in UTF-8 poiché non c'è modo di sapere o controllare quale fosse la codifica originale.
RedYeti,

1
Alcune delle risposte parlano di come risolvere questo problema, ad esempio stackoverflow.com/a/15500052/247696
Flimm

13

Utilizzando Notepad ++

Ciò risolverà il file CSV danneggiato salvato da Excel e lo salverà nuovamente nella codifica corretta.

  • Esporta CSV da Excel
  • Carica in Notepad ++
  • Correggi la codifica
  • Salva

Excel salva in CP-1252 / Windows-1252. Apri il file CSV in Notepad ++. Selezionare

Encoding > Character Sets > Western European > Windows-1252

Poi

Encoding > Convert to UTF-8
File > Save

Prima comunica a Notepad ++ la codifica, quindi converti. Alcune di queste altre risposte si stanno convertendo senza prima impostare la codifica corretta, alterando ulteriormente il file. Avrebbero trasformano quello che dovrebbe essere in . Se il tuo personaggio non si adatta a CP-1252, era già perso quando è stato salvato come CSV. Usa un'altra risposta per questo.


Potrei sbagliarmi, ma non puoi salvare il file come ".csv" in Notepad ++ e questo è ciò di cui si tratta.
Daniel Maurer,

1
Si, puoi. Stai solo salvando un file di testo ed .csvè un file di testo. Questa risposta aprirà il file CSV danneggiato da Excel, lo riparerà, quindi lo salverà di nuovo con la codifica corretta.
Chloe,

Ciò che stai comunicando ha conseguenze di vasta portata. Utilizzando questo metodo eminente, possiamo ottenere una qualità dei dati superiore! Bravo! (Quiz: perché questo commento è così interrogativo?)
thymaro

9

In Excel 2016 e versioni successive (incluso Office 365), è disponibile un'opzione CSV dedicata al formato UTF-8.

In Office 365, fai clic su Salva con nome; dove prima si sarebbe potuto scegliere CSV (delimitato da virgole), ora uno dei tipi di file che è possibile salvare come CSV UTF-8 (delimitato da virgole) (* .csv)


1
Dovresti fornire alcune istruzioni su come usare quell'opzione.
Rovyko,

1
@dexgecko certo: si chiama pulsante / menu "Salva". Esistono ora quattro tipi di esportazione CSV in Excel 2016 su Windows: CSV salva come "ANSI" (latino1 più o meno equivalente, ma potrebbe essere diverso con un'installazione del sistema operativo non occidentale, non sono sicuro), CSV UTF-8 salva come UTF-8 con BOM, CSV (DOS) salva come CP850 (di nuovo, dipende dall'installazione?) e CSV (Mac) salva come MacRoman.

Tuttavia, Excel sarà in grado di leggere solo file CSV UTF-8 e ANSI (Excel può usare la distinta base per scegliere). Per importare da un'altra codifica, rinominalo come .txt, apri da Excel (hai quindi un lungo elenco di codifiche tra cui scegliere) e poiché non interpreterà correttamente il separatore, usa il pulsante "converti" per dividere le righe. Puoi anche usare questo trucco quando importi un CSV da una convenzione di lingua diversa (in francese, ad esempio, il separatore archiviato è un punto e virgola, poiché la virgola è già utilizzata come separatore decimale).

1
@ Jean-ClaudeArbaut Strano, non vedo un'opzione CSV UTF-8 nel mio Excel 2016.
Rovyko

1
@dexgecko Strano, davvero. Secondo questa pagina (in francese, scusate), la funzionalità è stata aggiunta a novembre 2016, nella versione build 1610. Attualmente ho la versione 1802. Tuttavia, ho pensato che solo Office 365 avesse avuto quel tipo di evoluzioni e sto usando Office Pro 2016 (non il sapore 365). Forse prova ad aggiornare il tuo Office.

8

Per coloro che cercano una soluzione interamente programmatica (o almeno lato server), ho avuto un grande successo usando lo strumento xls2csv di catdoc.

Installa catdoc:

apt-get install catdoc

Fai la conversione:

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

Questo è velocissimo.

Si noti che è importante includere il -d utf-8flag, altrimenti codificherà l'output nella cp1252codifica predefinita e si corre il rischio di perdere informazioni.

Nota che funziona xls2csvanche solo con i .xlsfile, non funziona con i .xlsxfile.


O scegli una codifica di output diversa, non puoi risolvere i problemi di tutti con una sola risposta :-)
mpowered

2
Lo so che è un peccato, ma il fatto è che questa risposta sarà causare problemi per alcuni utenti. Il fatto che tu abbia mai eseguito questo con personaggi che si adattano a cp1252 è semplicemente fortunato, non hai fornito alcun avviso su questo rischio nella risposta, hai appena detto che "ha funzionato senza intoppi". Non ti è stato chiesto di risolvere i problemi di tutti, solo OP, che molte persone condividono.
Flimm,

1
Ecco fatto, ho risolto il problema nel post di risposta e rimosso il downvote.
Flimm,

7

Che dire dell'utilizzo di Powershell.

Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8

1
Il testo dei caratteri spagnoli non ascii verrà modificato dal carattere originale spagnolo alla stringa di codifica utilizzata da ANSI. Quindi, il testo non sarà lo stesso dell'originale.
Jason Williams,

7

Il modo più semplice: non è necessario Open Office e Google Documenti

  1. Salva il tuo file come "file di testo Unicode";
  2. ora hai un file di testo unicode
  3. aprilo con "blocco note" e "Salva con nome" selezionando "utf-8" o altra tabella codici che desideri
  4. rinomina l'estensione del file da "txt" a "csv". Ciò si tradurrà in un file csv UTF-8 delimitato da tabulazioni.
  5. Se si desidera un file delimitato da virgole , aprire il csvfile appena rinominato e sostituire tutte le schede con virgole. Per fare ciò in Blocco note su Win 10, seleziona semplicemente un campo scheda quindi fai clic su Ctrl+H. Nella finestra che si apre, digita una virgola ,nel campo "Sostituisci con", quindi fai clic su "Sostituisci tutto". Salva il tuo file. Il risultato sarà un file csv UTF-8 delimitato da virgole.

Non aprirlo comunque con MS-Office !!! Ora hai un file CSV delimitato da tabulazioni. Oppure, delimitato da virgole se hai applicato il passaggio numero 5.


2
Per un file delimitato da tabulazioni potrebbe essere meglio usare .txtun'estensione. csv, cioè file separati da virgole, è solo confuso.
dof1985,

5

Per quanto possa sembrare divertente, il modo più semplice che ho trovato per salvare il mio foglio di calcolo da 180 MB in un file CSV UTF8 era selezionare le celle in Excel, copiarle e incollare il contenuto degli Appunti in SublimeText.


1
Questo funziona perché Excel fornisce una versione TSV della selezione tramite gli Appunti. Puoi anche usare Notepad invece di SublimeText ma ricordati di salvare con la codifica UTF-8 se lo fai!
Don Cruickshank,


3

Supponendo un ambiente Windows, salva e lavora con il file come al solito in Excel, ma poi apri il file Excel salvato in Gnome Gnumeric (gratuito). Salva il foglio di lavoro di Gnome Gnumeric come CSV che, per me comunque, lo salva come CSV UTF-8.


3

Modo semplice per farlo: scarica open office ( qui ), carica il foglio di calcolo e apri il file excel ( .xlso .xlsx). Quindi basta salvarlo come file CSV di testo e si apre una finestra che chiede di mantenere il formato corrente o di salvarlo come formato .ODF. seleziona "mantieni il formato corrente" e nella nuova finestra seleziona l'opzione che funziona meglio per te, in base alla lingua in cui è stato scritto il tuo file. Per la lingua spagnola selezionare Europa occidentale ( Windows-1252/ WinLatin 1) e il file funziona perfettamente. Se si seleziona Unicode ( UTF-8), non funzionerà con i caratteri spagnoli.


3
Non vi è alcun motivo per cui UTF-8 non funzioni con i caratteri spagnoli.
Flimm,

3
  1. Salva il file xls (file Excel) come file di testo Unicode => verrà salvato in formato testo (.txt)

  2. Cambia formato da .txt a .csv (rinomina il file da XYX.txt a XYX.csv


3
Questo non funziona perché le istruzioni non includono il passaggio necessario per convertire le schede in virgole nei dati del file.
Matthew Rodatus,

1
Il "testo Unicode" di Excel è UTF-16, non UTF-8 come richiesto nella domanda.
Flimm,

3

Ho anche riscontrato lo stesso problema, ma esiste una soluzione semplice per questo.

  1. Apri il tuo file xlsx in Excel 2016 o versioni successive.
  2. In "Salva con nome" selezionare questa opzione: "(CSV UTF-8 (delimitato da virgole) *. Csv)"

Funziona perfettamente e viene generato un file CSV che può essere importato in qualsiasi software. Ho importato questo file CSV nel mio database SQLITE e funziona perfettamente con tutti i caratteri Unicode intatti.


Questa opzione non è disponibile nella mia copia di Excel 2016. Stai utilizzando la versione di Office 365?
Don Cruickshank,

2

Ho riscontrato lo stesso problema e ho cercato su Google questo post. Nessuna delle precedenti ha funzionato per me. Alla fine ho convertito il mio Unicode .xls in .xml (scegli Salva come ... XML Spreadsheet 2003) e ha prodotto il carattere corretto. Quindi ho scritto il codice per analizzare l'xml ed estratto il contenuto per il mio uso.


2

Ho scritto un piccolo script Python che può esportare fogli di lavoro in UTF-8.

Devi solo fornire il file Excel come primo parametro seguito dai fogli che desideri esportare. Se non si forniscono i fogli, lo script esporterà tutti i fogli di lavoro presenti nel file 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)

Ho aggiornato un po 'l'implementazione e ho
Julian

2

Excel in genere salva un file CSV come codifica ANSI anziché utf8.

Un'opzione per correggere il file è utilizzare Notepad o Notepad ++:

  1. Apri .csv con Notepad o Notepad ++.
  2. Copia il contenuto negli appunti del tuo computer.
  3. Elimina i contenuti dal file.
  4. Cambia la codifica del file in utf8.
  5. Copia il contenuto dagli appunti.
  6. Salva il file.

Non sei sicuro delle vecchie versioni di NP ++, ma nella versione corrente puoi semplicemente selezionare Codifica> Converti in UTF-8. sostituisce i passaggi 2-5
Felk

1

Una seconda opzione per "nevets1219" è aprire il file CSV in Notepad ++ ed eseguire una conversione in ANSI.

Scegli nel menu in alto: Codifica -> Converti in Ansi


Non ho idea del perché sei stato sottovalutato. Notepad ++ l'ha fatto per me. Impossibile archiviare il mio file nel foglio di calcolo di Google in quanto è riservato.
Zane,

3
Il problema con questa risposta è innanzitutto come generare il file CSV. Se si salva semplicemente come CSV da Excel, la codifica sarà cp1252, che è una codifica di un byte per punto di codice e quindi perderà le informazioni per i caratteri che non rientrano in questo. Inoltre, alla fine, dovresti convertirti in UTF-8 e non in Ansi, se vuoi fare ciò che la domanda ha posto.
Flimm,

Questa è di gran lunga la risposta più semplice dell'IMO. Sto usando Excel 2016 e l'ho trovato salvato nella codifica ANSI per impostazione predefinita, ma l'ho trovato in UTF-8 che è quello che volevo.
Rovyko,

1

Codifica -> Converti in Ansi lo codificherà in ANSI / UNICODE. Utf8 è un sottoinsieme di Unicode. Forse in ANSI verrà codificato correttamente, ma qui stiamo parlando di UTF8, @SequenceDigitale.

Ci sono modi più veloci, come esportare come CSV (delimitato da virgole) e quindi, aprire quel CSV con Notepad ++ (gratuito), quindi Codifica> Converti in UTF8. Ma solo se devi farlo una volta per file. Se è necessario modificare ed esportare periodicamente, la migliore è la soluzione LibreOffice o GDocs.


5
"Utf8 è un sottoinsieme di Unicode": questo non ha senso. UTF-8 è una codifica di Unicode.
jameshfisher,

Non sono sicuro di trovare questa opzione "Codifica -> Converti in Ansi".
Flimm,

Semplicemente un csv ANSI in Notepad ++ e cambiando la codifica del file in utf8, i caratteri spagnoli non ascii originali vengono convertiti in stringhe di codifica che non corrispondono al testo originale.
Jason Williams,

1

Microsoft Excel ha un'opzione per esportare il foglio di calcolo usando la codifica Unicode. Vedi la seguente schermata.

inserisci qui la descrizione dell'immagine


14
"Unicode Text" salva in UTF-16 LE (Little Endian), non in UTF-8 come richiesto dall'OP.
ax.

Sì, ma è il modo migliore per ottenere il supporto Unicode per i tuoi valori separati da x in Excel. Ho avuto ogni sorta di problemi nel tentativo di far giocare Excel con UTF-8! Maggiori informazioni
mcNux,

1

apri .csv bene con notepad ++. se vedi che la tua codifica è buona (vedi tutti i caratteri come dovrebbero essere) premi la codifica, quindi converti in ANSI altrimenti - scopri qual è la tua attuale codifica


che ha funzionato per me .. ha avuto problemi con i caratteri greci quando exportedmysql db come csv e lo ha importato per eccellere ..
nikolas

1
Il problema con questo è come generare il file CSV in primo luogo. Se si salva semplicemente come file CSV in Excel, lo salverà in cp1252, che è una codifica di un byte per punto di codice e quindi perde informazioni.
Flimm,

1

un'altra soluzione è aprire il file con winword e salvarlo come txt, quindi riaprirlo con Excel e funzionerà ISA


1

Finestra di dialogo Salva> Pulsante Strumenti> Opzioni Web> Scheda Codifica


Questo non funziona per me. Per come lo capisco, ha effetto solo quando si salva come formato web (HTML ecc.), Non quando si salva come CSV.
jogojapan,

Funziona per me - ufficio 2007
Elia Weiss,

non funziona su Office 2010 scegliendo un profilo CSV.
Hart,

0

Ho lo stesso problema e mi imbatto in questo componente aggiuntivo, e funziona perfettamente in Excel 2013 oltre Excel 2007 e 2010 per cui è menzionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.