it-swarm.com.de

Excel nach CSV mit UTF8-Codierung

Ich habe eine Excel-Datei mit einigen spanischen Zeichen (Tilden usw.), die ich in eine CSV-Datei konvertieren muss, um sie als Importdatei zu verwenden. Wenn ich jedoch als CSV speichere, werden die "speziellen" spanischen Zeichen, die keine ASCII -Zeichen sind, unkenntlich gemacht. Dies scheint auch mit den linken und rechten Anführungszeichen und langen Bindestrichen zu tun zu sein, die scheinbar vom ursprünglichen Benutzer stammen, der die Excel-Datei auf dem Mac erstellt hat.

Da CSV nur eine Textdatei ist, bin ich mir sicher, dass es eine UTF8-Codierung verarbeiten kann. Ich vermute, dass dies eine Excel-Einschränkung ist. Ich suche jedoch nach einer Möglichkeit, von Excel zu CSV zu gelangen und die Nicht-ASCII-Zeichen beizubehalten intakt.

575
Jeff Treuting

Eine einfache Problemumgehung besteht darin, Google Spreadsheet zu verwenden. Einfügen (Werte nur bei komplexen Formeln) oder Importieren des Blatts und Herunterladen der CSV-Datei. Ich habe nur ein paar Charaktere ausprobiert und es funktioniert ziemlich gut.

HINWEIS: Für Google Sheets gelten beim Importieren Einschränkungen. Siehe hier .

HINWEIS: Achten Sie bei Google Sheets auf vertrauliche Daten.

BEARBEITEN: Eine weitere Alternative - Grundsätzlich verwenden sie das Makro VB oder Add-Ins, um das Speichern als UTF8 zu erzwingen. Ich habe keine dieser Lösungen ausprobiert, aber sie klingen vernünftig.

387
nevets1219

Ich habe festgestellt, dass OpenOffice s Tabellenkalkulationsanwendung Calc wirklich gut mit CSV-Daten umgehen kann.

Klicken Sie im Dialogfeld "Speichern unter ..." auf "Formatoptionen", um verschiedene Codierungen für CSV zu erhalten. LibreOffice funktioniert genauso wie AFAIK.

calc save dialog

125
aendrew
  1. Speichern Sie das Excel-Blatt als "Unicode-Text (.txt)". Die gute Nachricht ist, dass alle internationalen Zeichen in UTF16 vorliegen (Anmerkung, nicht in UTF8). Die neue "* .txt" -Datei ist jedoch durch Tabulatoren und nicht durch Kommas getrennt und daher keine echte CSV-Datei.

  2. (Optional) Verwenden Sie Ihren bevorzugten Texteditor und ersetzen Sie die TAB-Zeichen durch Kommas ",", es sei denn, Sie können eine durch TAB getrennte Datei zum Importieren verwenden.

  3. Importieren Sie Ihre * .txt-Datei in die Zielanwendung. Stellen Sie sicher, dass das UTF16-Format akzeptiert wird.

Wenn UTF-16 ordnungsgemäß implementiert wurde und Nicht-BMP-Codepunkte unterstützt, können Sie eine UTF-16-Datei in UTF-8 konvertieren, ohne Informationen zu verlieren. Ich überlasse es Ihnen, Ihre Lieblingsmethode dafür zu finden.

Ich verwende dieses Verfahren, um Daten aus Excel nach Moodle zu importieren.

110
elomage

Ich weiß, dass dies eine alte Frage ist, aber ich bin zufällig auf diese Frage gestoßen, als ich mit denselben Problemen wie beim OP zu kämpfen hatte.

Nachdem ich keine der angebotenen Lösungen für eine praktikable Option befunden hatte, machte ich mich daran, herauszufinden, ob es eine Möglichkeit gibt, dies nur mit Excel zu tun.

Glücklicherweise habe ich festgestellt, dass das Problem mit verlorenen Zeichen (in meinem Fall) nur beim Speichern vom XLSX-Format in das CSV-Format auftritt. Ich habe versucht, die xlsx-Datei zuerst in xls und dann in csv zu speichern. Es hat tatsächlich funktioniert.

Bitte probieren Sie es aus und sehen Sie, ob es für Sie funktioniert. Viel Glück.

41
Eric

Sie können den Befehl iconv unter Unix verwenden (auch verfügbar unter Windows als libiconv ).

Nach dem Speichern als CSV unter Excel in der Kommandozeile Folgendes eingeben:

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

(Denken Sie daran, cp1250 durch Ihre Kodierung zu ersetzen).

Funktioniert schnell und eignet sich hervorragend für große Dateien wie Postleitzahlen-Datenbanken, die nicht in GoogleDocs importiert werden können (maximal 400.000 Zellen).

35
pmilewski

Der einzige "einfache Weg", dies zu tun, ist wie folgt. Stellen Sie zunächst fest, dass es einen Unterschied zwischen dem gibt, was in der Excel-CSV-Datei angezeigt und versteckt wird.

  1. Öffnen Sie eine Excel-Datei, in der Sie die Informationen haben (.xls, .xlsx)
  2. Wählen Sie in Excel "CSV (Comma Delimited) (* .csv)" als Dateityp und speichern Sie als diesen Typ.
  3. Öffnen Sie in NOTEPAD (unter "Programme" und dann Zubehör im Startmenü) die gespeicherte CSV-Datei im Editor
  4. Wählen Sie dann -> Speichern unter ... und unten im Feld "Speichern unter" befindet sich ein Auswahlfeld mit der Bezeichnung "Codierung". Wählen Sie UTF-8 (verwenden Sie NICHT ANSI oder Sie verlieren alle Akzente usw.). Speichern Sie die Datei nach Auswahl von UTF-8 unter einem anderen Dateinamen als das Original.

Diese Datei ist in UTF-8 und behält alle Zeichen und Akzente bei und kann zum Beispiel in MySQL und andere Datenbankprogramme importiert werden.

Diese Antwort stammt aus diesem Forum .

24
Nick

Dies ist auf einem modernen Windows-Computer ohne Software von Drittanbietern möglich. Diese Methode ist zuverlässig und verarbeitet Daten, die Anführungszeichen, Tabulatorzeichen, CJK-Zeichen usw. enthalten.

1. Aus Excel speichern

Speichern Sie in Excel die Daten unter file.txt mit dem Typ Unicode Text (*.txt).

2. Starten Sie PowerShell

Führen Sie im Startmenü powershell aus.

. Laden Sie die Datei in PowerShell

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

4. Speichern Sie die Daten als CSV

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

Eine andere, die ich als nützlich empfunden habe: "Numbers" ermöglicht die Codierungseinstellungen beim Speichern als CSV.

22
leander

"nevets1219" ist in Bezug auf Google-Dokumente richtig. Wenn Sie die Datei jedoch einfach "importieren", wird sie häufig nicht in UTF-8 konvertiert.

Wenn Sie die CSV-Datei jedoch in eine vorhandene Google-Tabelle importieren, wird sie in UTF-8 konvertiert.

Hier ist ein Rezept:

  • Klicken Sie im Hauptfenster von Docs (oder Drive) auf die Schaltfläche "Erstellen" und wählen Sie "Tabellenkalkulation".
  • Wählen Sie im Menü "Datei" die Option "Importieren".
  • Klicken Sie auf "Choose File"
  • Wählen Sie "Tabellenkalkulation ersetzen"
  • Wählen Sie das Zeichen aus, das Sie als Trennzeichen verwenden
  • Klicken Sie auf "Importieren"
  • Wählen Sie im Menü "Datei" "Herunterladen als" -> CSV (aktuelles Blatt)

Die resultierende Datei befindet sich in UTF-8

14
RedYeti

Notepad ++ verwenden

Dadurch wird die von Excel gespeicherte beschädigte CSV-Datei behoben und in der richtigen Codierung erneut gespeichert.

  • Exportieren Sie CSV aus Excel
  • In Notepad ++ laden
  • Kodierung korrigieren
  • Sparen

Excel speichert in CP-1252/Windows-1252. Öffnen Sie die CSV-Datei in Notepad ++. Wählen

Encoding > Character Sets > Western European > Windows-1252

Dann

Encoding > Convert to UTF-8
File > Save

Teilen Sie Notepad ++ zuerst die Codierung mit, dann convert. Einige dieser anderen Antworten werden konvertiert, ohne dass zuerst die richtige Codierung festgelegt wurde, wodurch die Datei noch mehr entstellt wird. Sie würden das, was sein sollte, in verwandeln. Wenn Ihr Charakter nicht in CP-1252 passt, war er bereits verloren, als er als CSV gespeichert wurde. Verwenden Sie dafür eine andere Antwort.

10
Chloe

Für diejenigen, die eine vollständig programmatische (oder zumindest serverseitige) Lösung suchen, habe ich mit dem xls2csv-Tool von catdoc große Erfolge erzielt.

Installieren Sie catdoc:

apt-get install catdoc

Führen Sie die Konvertierung durch:

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

Das ist rasend schnell.

Beachten Sie, dass es wichtig ist, dass Sie das -d utf-8 -Flag einschließen, andernfalls wird die Ausgabe in der Standardcodierung cp1252 codiert, und Sie laufen Gefahr, Informationen zu verlieren.

Beachten Sie, dass xls2csv auch nur mit .xls -Dateien funktioniert, nicht jedoch mit .xlsx -Dateien.

8
mpowered

Was ist mit Powershell.

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

Einfachster Weg: Keine Notwendigkeit, Open Office und Google Docs

  1. Speichern Sie Ihre Datei als "Unicode-Textdatei".
  2. jetzt haben Sie eine Unicode-Textdatei
  3. öffnen Sie es mit "Editor" und "Speichern unter", indem Sie "utf-8" oder eine andere gewünschte Codepage auswählen
  4. benennen Sie die Dateierweiterung von "txt" in "csv" um. Dies führt zu einer durch Tabulatoren getrennten UTF-8-CSV-Datei.
  5. Wenn Sie eine durch Kommas getrennte Datei möchten, öffnen Sie die csv -Datei, die Sie gerade umbenannt haben, und ersetzen Sie alle Tabulatoren durch Kommas. Wählen Sie dazu in Notepad unter Win 10 einfach ein Registerfeld aus und klicken Sie auf Ctrl+H. Geben Sie im folgenden Fenster ein Komma , in das Feld "Ersetzen durch" ein und klicken Sie auf "Alle ersetzen". Speichern Sie Ihre Datei. Das Ergebnis ist eine durch Kommas getrennte UTF-8-CSV-Datei.

Öffnen Sie es ohnehin nicht mit MS-Office !!!Jetzt haben Sie eine durch Tabulatoren getrennte CSV-Datei. Oder eine durch Kommas getrennte, wenn Sie Schritt 5 angewendet haben.

6
Solivan

So lustig es auch scheinen mag, der einfachste Weg, mein 180-MB-Arbeitsblatt in einer UTF8-CSV-Datei zu speichern, bestand darin, die Zellen in Excel auszuwählen, zu kopieren und den Inhalt der Zwischenablage in SublimeText einzufügen.

5
oscaroscar

Unter Excel 2016 haben wir eine CSV-Exportoption für das UTF-8-Format.

4
  1. XLS-Datei (Excel-Datei) als Unicode-Text speichern => Datei wird im Textformat (.txt) gespeichert

  2. Ändern Sie das Format von TXT in CSV (benennen Sie die Datei von XYX.txt in XYX.csv um)

3
Mena

Für dieses Problem konnte in Mac Excel keine VBA-Lösung gefunden werden. Es schien einfach keine Möglichkeit zu geben, UTF-8-Text auszugeben.

Also musste ich endlich auf VBA verzichten, die Kugel beißen und AppleScript lernen. Es war nicht annähernd so schlimm, wie ich gedacht hatte.

Die Lösung ist hier beschrieben: http://talesoftech.blogspot.com/2011/05/Excel-on-mac-goodbye-vba-hello.html

3
anroy

Ich bin auch auf das gleiche Problem gestoßen, aber es gibt eine einfache Lösung dafür.

  1. Öffnen Sie Ihre XLSX-Datei in Excel 2016 oder höher.
  2. Wählen Sie unter "Speichern unter" diese Option: "(CSV UTF-8 (durch Kommas getrennt) *. Csv)"

Es funktioniert einwandfrei und es wird eine CSV-Datei generiert, die in jede Software importiert werden kann. Ich habe diese CSV-Datei in meine SQLITE-Datenbank importiert und sie funktioniert einwandfrei, wenn alle Unicode-Zeichen intakt sind.

3
Krish

Einfache Vorgehensweise: Laden Sie Open Office herunter ( hier ), laden Sie die Tabelle und öffnen Sie die Excel-Datei (.xls oder .xlsx). Speichern Sie es dann einfach als Text-CSV-Datei, und ein Fenster wird geöffnet, in dem Sie gefragt werden, ob Sie das aktuelle Format beibehalten oder als ODF-Format speichern möchten. Wählen Sie "Aktuelles Format beibehalten" und wählen Sie im neuen Fenster die Option, die für Sie besser geeignet ist, je nach der Sprache, in der Ihre Datei geschrieben wurde. Wählen Sie für die spanische Sprache Westeuropa (Windows-1252/ WinLatin 1) und die Datei funktioniert einwandfrei. Wenn Sie Unicode (UTF-8) auswählen, funktioniert dies nicht mit den spanischen Zeichen.

3
Yessus

Unter der Annahme einer Windows-Umgebung können Sie die Datei wie gewohnt in Excel speichern und bearbeiten. Öffnen Sie dann die gespeicherte Excel-Datei in Gnome Gnumeric (kostenlos). Speichern Sie die Tabelle von Gnome Gnumeric als CSV-Datei, die - für mich jedenfalls - als UTF-8-CSV-Datei gespeichert wird.

3
spring_chicken

Excel speichert normalerweise eine CSV-Datei als ANSI-Codierung anstelle von utf8.

Eine Möglichkeit, die Datei zu korrigieren, ist die Verwendung von Notepad oder Notepad ++:

  1. Öffnen Sie das CSV mit Editor oder Notepad ++.
  2. Kopieren Sie den Inhalt in die Zwischenablage Ihres Computers.
  3. Löschen Sie den Inhalt aus der Datei.
  4. Ändern Sie die Kodierung der Datei in utf8.
  5. Fügen Sie den Inhalt wieder aus der Zwischenablage ein.
  6. Speicher die Datei.
2
Jason Williams

Ich habe ein kleines Python Skript geschrieben, das Arbeitsblätter in UTF-8 exportieren kann.

Sie müssen lediglich die Excel-Datei als ersten Parameter gefolgt von den zu exportierenden Arbeitsblättern angeben. Wenn Sie die Arbeitsblätter nicht bereitstellen, exportiert das Skript alle Arbeitsblätter, die in der Excel-Datei vorhanden sind.

#!/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
Julian

Kam über das gleiche Problem und googelte diesen Beitrag aus. Keines der oben genannten hat bei mir funktioniert. Zuletzt habe ich meine Unicode .xls in .xml konvertiert (wählen Sie Speichern als ... XML-Tabelle 2003) und es wurde das richtige Zeichen erzeugt. Dann habe ich Code geschrieben, um die XML-Datei zu analysieren und den Inhalt für meine Verwendung zu extrahieren.

2

Encoding -> Convert to Ansi codiert es in ANSI/UNICODE. Utf8 ist eine Teilmenge von Unicode. Vielleicht wird in ANSI richtig codiert, aber hier geht es um UTF8, @SequenceDigitale.

Es gibt schnellere Möglichkeiten, z. B. das Exportieren als CSV (durch Kommas getrennt) und das anschließende Öffnen dieser CSV mit Notepad ++ (kostenlos) und dann Kodieren> In UTF8 konvertieren. Aber nur, wenn Sie dies einmal pro Datei tun müssen. Wenn Sie häufig Änderungen vornehmen und exportieren müssen, ist die LibreOffice- oder GDocs-Lösung die beste.

1
Lucas

eine andere Lösung besteht darin, die Datei mit Winword zu öffnen und als txt zu speichern und sie dann mit Excel erneut zu öffnen, damit ISA funktioniert

1
Essam Altantawi

Microsoft Excel bietet die Möglichkeit, Tabellenkalkulationen mit Unicode-Codierung zu exportieren. Siehe folgenden Screenshot.

enter image description here

1
vladaman

Dialogfeld speichern> Schaltfläche Extras> Registerkarte Weboptionen> Codierung

1
Elia Weiss

Eine zweite Option für "nevets1219" ist das Öffnen der CSV-Datei in Notepad ++ und die Konvertierung nach ANSI.

Wählen Sie im oberen Menü: Encoding -> Convert to Ansi

öffnen Sie .csv gut mit Editor ++. Wenn Sie feststellen, dass Ihre Kodierung gut ist (Sie sehen alle Zeichen so, wie sie sein sollten), drücken Sie die Kodierung, und konvertieren Sie in ANSI else. Ermitteln Sie die aktuelle Kodierung

1
Marius Gri

Ich habe das gleiche Problem und stoße auf this add in, und es funktioniert einwandfrei in Excel 2013 neben Excel 2007 und 2010, für die es erwähnt wird.

0
academic.user

Ich musste diesen Prozess auf meinem Mac automatisieren. Ich habe ursprünglich versucht, catdoc/xls2csv wie von mpowered vorgeschlagen zu verwenden, aber xls2csv hatte Probleme, die ursprüngliche Kodierung des Dokuments zu erkennen, und nicht alle Dokumente waren gleich. Am Ende habe ich die Standardcodierung für die Webseitenausgabe auf UTF-8 gesetzt und die Dateien anschließend an Apples Automator übergeben. Dabei habe ich die Aktion Convert Format of Excel Files angewendet, um sie in Web Page (HTML) zu konvertieren. Dann habe ich mit PHP, DOMDocument und XPath die Dokumente abgefragt und in CSV formatiert.

Dies ist das PHP Skript (process.php):

<?php
$pi = pathinfo($argv[1]);
$file = $pi['dirname'] . '/' . $pi['filename'] . '.csv';
$fp = fopen($file,'w+');
$doc = new DOMDocument;
$doc->loadHTMLFile($argv[1]);
$xpath = new DOMXPath($doc);
$table = [];
foreach($xpath->query('//tr') as $row){
    $_r = [];
    foreach($xpath->query('td',$row) as $col){
        $_r[] = trim($col->textContent);
    }
    fputcsv($fp,$_r);
}
fclose($fp);
?>

Und dies ist der Shell-Befehl, mit dem ich die HTML-Dokumente in csv konvertiert habe:

find . -name '*.htm' | xargs -I{} php ./process.php {}

Dies ist ein wirklich, wirklich umgehender Weg, aber es war die zuverlässigste Methode, die ich gefunden habe.

0
Kyle