J'ai un fichier Excel contenant des caractères espagnols (tildes, etc.) que je dois convertir en fichier CSV pour pouvoir être utilisé comme fichier d'importation. Cependant, lorsque je réalise une sauvegarde au format CSV, il modifie les caractères espagnols "spéciaux" qui ne sont pas des caractères ASCII. Cela semble également être le cas avec les guillemets gauche et droit et les longs tirets qui semblent provenir de l’utilisateur original qui a créé le fichier Excel sous Mac.
Comme le format CSV n'est qu'un fichier texte, je suis sûr qu'il peut gérer un codage UTF8. Je suppose donc qu'il s'agit d'une limitation d'Excel, mais je cherche un moyen de passer d'Excel au format CSV tout en conservant les caractères non-ASCII. intact.
Une solution simple consiste à utiliser Google Spreadsheet. Collez (valeurs uniquement si vous avez des formules complexes) ou importez la feuille, puis téléchargez CSV. Je viens d'essayer quelques personnages et ça marche plutôt bien.
REMARQUE: Google Sheets a des limites lors de l'importation. Voir ici .
REMARQUE: faites attention aux données sensibles avec Google Sheets.
EDIT: ne autre alternative - ils utilisent essentiellement la macro ou les addins VB pour forcer la sauvegarde au format UTF8. Je n'ai essayé aucune de ces solutions, mais elles semblent raisonnables.
J'ai trouvé que l'application de tableur de OpenOffice , Calc, est vraiment efficace pour la gestion des données CSV.
Dans la boîte de dialogue "Enregistrer sous ...", cliquez sur "Options de format" pour obtenir différents codages pour CSV. LibreOffice fonctionne de la même façon, autant que je sache.
Enregistrez la feuille Excel en tant que "Texte Unicode (.txt)". La bonne nouvelle est que tous les caractères internationaux sont en UTF16 (remarque, pas en UTF8). Toutefois, le nouveau fichier "* .txt" est délimité par des tabulations, non par des virgules et n'est donc pas un vrai fichier CSV.
(facultatif) Sauf si vous pouvez utiliser un fichier délimité par une tabulation pour l'importation, utilisez votre éditeur de texte favori et remplacez les caractères de la tabulation par des virgules ",".
Importez votre fichier * .txt dans l'application cible. Assurez-vous qu'il accepte le format UTF16.
Si UTF-16 a été correctement implémenté avec la prise en charge de points de code non-BMP, vous pouvez convertir un fichier UTF-16 en UTF-8 sans perdre d'informations. Je vous laisse le soin de trouver votre méthode préférée pour le faire.
J'utilise cette procédure pour importer des données d'Excel vers Moodle.
Je sais que c’est une vieille question, mais j’ai été confronté à cette question tout en luttant avec les mêmes problèmes que le PO.
N'ayant trouvé aucune des solutions proposées comme une option viable, je me suis mis à la recherche d'un moyen de le faire en utilisant simplement Excel.
Heureusement, j'ai constaté que le problème des personnages perdus ne se produit que (dans mon cas) lors de l'enregistrement du format xlsx au format csv. J'ai essayé de sauvegarder le fichier xlsx d'abord en xls, puis en csv. Cela a réellement fonctionné.
S'il vous plaît essayer et voir si cela fonctionne pour vous. Bonne chance.
Vous pouvez utiliser la commande iconv sous Unix (également disponible sous Windows sous le nom libiconv ).
Après avoir enregistré en tant que CSV sous Excel dans la ligne de commande, entrez:
iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv
(souvenez-vous de remplacer cp1250 par votre encodage).
Fonctionne rapidement et convient parfaitement aux gros fichiers tels que la base de données de codes postaux, qui ne peuvent pas être importés dans GoogleDocs (limite de 400 000 cellules).
Le seul "moyen facile" de le faire est le suivant. Tout d’abord, sachez qu’il existe une différence entre ce qui est affiché et ce qui est caché dans le fichier Excel .csv.
Ce fichier est au format UTF-8. Il conserve tous les caractères et les accents et peut être importé, par exemple, dans MySQL et d’autres programmes de base de données.
Cette réponse est tirée de ce forum .
Vous pouvez le faire sur une machine Windows moderne sans logiciel tiers. Cette méthode est fiable et gérera les données contenant des virgules, des tabulations, des caractères CJK, etc.
1. Sauvegarder à partir d'Excel
Dans Excel, enregistrez les données sur file.txt
en utilisant le type Unicode Text (*.txt)
.
2. Démarrer PowerShell
Exécutez powershell
à partir du menu Démarrer.
. Chargez le fichier dans PowerShell
$data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode
4. Enregistrer les données au format CSV
$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation
Un autre que j'ai trouvé utile: "Numbers" permet les paramètres d'encodage lors de l'enregistrement au format CSV.
"nevets1219" a raison sur Google Documents. Toutefois, si vous "importez" simplement le fichier, il ne sera souvent pas converti au format UTF-8.
Toutefois, si vous importez le fichier CSV dans une feuille de calcul Google existante, il est converti au format UTF-8.
Voici une recette:
Le fichier résultant sera en UTF-8
Cela corrigera le fichier CSV corrompu enregistré par Excel et le ré-enregistrera dans le codage approprié.
Excel enregistre dans CP-1252/Windows-1252. Ouvrez le fichier CSV dans Notepad ++. Sélectionner
Encoding > Character Sets > Western European > Windows-1252
Ensuite
Encoding > Convert to UTF-8
File > Save
Commencez par informer Notepad ++ du codage, alors convertir. Certaines de ces autres réponses sont en train de convertir sans définir le bon codage, ce qui altère encore plus le fichier. Ils transformeraient ce qui devrait être ’
en 達
. Si votre personnage ne rentre pas dans le CP-1252, il était déjà perdu lors de son enregistrement au format CSV. Utilisez une autre réponse pour cela.
Pour ceux qui recherchent une solution entièrement programmatique (ou au moins côté serveur), j'ai eu beaucoup de succès avec l'outil xls2csv de catdoc.
Installez catdoc:
apt-get install catdoc
Faire la conversion:
xls2csv -d utf-8 file.xls > file-utf-8.csv
C'est flamboyant.
Notez qu'il est important d'inclure l'indicateur -d utf-8
, sinon le code sera codé en sortie dans le codage par défaut cp1252
et vous risqueriez de perdre des informations.
Notez que xls2csv
ne fonctionne également qu'avec les fichiers .xls
, il ne fonctionne pas avec les fichiers .xlsx
.
Qu'en est-il de l'utilisation de Powershell.
Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8
Moyen le plus simple: Inutile Open Office et Google Docs
csv
que vous venez de renommer et remplacez tous les onglets par des virgules. Pour ce faire, dans Notepad sous Windows 10, sélectionnez simplement un champ de tabulation, puis cliquez sur Ctrl+H
. Dans la fenêtre qui s'ouvre, tapez une virgule ,
dans le champ "Remplacer par", puis cliquez sur "Remplacer tout". Enregistrez votre fichier. Le résultat sera un fichier csv UTF-8 séparé par des virgules.Ne l'ouvrez pas avec MS-Office de toute façon !!!Vous avez maintenant un fichier CSV délimité par des tabulations. Ou un fichier délimité par des virgules si vous avez appliqué l'étape n ° 5.
Aussi drôle que cela puisse paraître, le moyen le plus simple de sauvegarder ma feuille de calcul de 180 Mo dans un fichier CSV UTF8 était de sélectionner les cellules dans Excel, de les copier et de coller le contenu du presse-papiers dans SublimeText.
Sous Excel 2016, nous avons une option d'exportation CSV dédiée au format UTF-8.
Enregistrer le fichier xls (fichier Excel) sous forme de texte Unicode => le fichier sera enregistré au format texte (.txt)
Changez le format de .txt en .csv (renommez le fichier de XYX.txt en XYX.csv
Je n'ai pas été en mesure de trouver une solution VBA pour ce problème sur Mac Excel. Il semblait simplement n'y avoir aucun moyen de produire du texte UTF-8.
J'ai donc finalement dû abandonner VBA, mordre la balle et apprendre AppleScript. Ce n'était pas aussi grave que je l'avais pensé.
La solution est décrite ici: http://talesoftech.blogspot.com/2011/05/Excel-on-mac-goodbye-vba-hello.html
J'ai également rencontré le même problème, mais il existe une solution facile à cela.
Cela fonctionne parfaitement et un fichier csv est généré et peut être importé dans n’importe quel logiciel. J'ai importé ce fichier csv dans ma base de données SQLITE et il fonctionne parfaitement avec tous les caractères unicode intacts.
Un moyen facile de le faire: téléchargez Open Office ( here ), chargez la feuille de calcul et ouvrez le fichier Excel (.xls
ou .xlsx
). Il suffit ensuite de l’enregistrer en tant que fichier texte CSV. Une fenêtre s’ouvre et vous invite à conserver le format actuel ou à enregistrer au format .ODF. sélectionnez "conserver le format actuel" et dans la nouvelle fenêtre, sélectionnez l'option qui vous convient le mieux, en fonction de la langue dans laquelle votre fichier a été écrit. Pour la langue espagnole, sélectionnez l’Europe occidentale (Windows-1252/ WinLatin 1
) et le fichier fonctionne parfaitement. Si vous sélectionnez Unicode (UTF-8
), cela ne fonctionnera pas avec les caractères espagnols.
En supposant un environnement Windows, enregistrez et utilisez le fichier comme d'habitude dans Excel, puis ouvrez le fichier Excel enregistré dans Gnome Gnumeric (gratuit). Enregistrer le tableur de Gnome Gnumeric au format CSV qui, pour moi en tout cas, l'enregistre au format UTF-8 CSV.
Excel enregistre généralement un fichier csv en tant que codage ANSI au lieu de utf8.
Une option pour corriger le fichier est d'utiliser Notepad ou Notepad ++:
J'ai écrit un petit script Python pouvant exporter des feuilles de calcul au format UTF-8.
Vous devez simplement fournir le fichier Excel en tant que premier paramètre, suivi des feuilles que vous souhaitez exporter. Si vous ne fournissez pas les feuilles, le script exportera toutes les feuilles de calcul présentes dans le fichier 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)
Je suis tombé sur le même problème et avons googlé ce post. Aucun de ce qui précède n'a fonctionné pour moi. Enfin, j'ai converti mes fichiers .xls Unicode en fichiers .xml (choisissez Enregistrer sous ... Tableur XML 2003) et le caractère correct a été généré. Ensuite, j'ai écrit du code pour analyser le XML et extrait le contenu pour mon usage.
Encodage -> Convertir en Ansi l'encodera en ANSI/UNICODE. Utf8 est un sous-ensemble de Unicode. Peut-être que ANSI sera correctement encodé, mais nous parlons ici de UTF8, @SequenceDigitale.
Il existe des moyens plus rapides, comme exporter au format csv (délimité par des virgules), puis, ouvrir ce csv avec Notepad ++ (free), puis encoder> Convertir en UTF8. Mais seulement si vous devez le faire une fois par fichier. Si vous devez modifier et exporter régulièrement, le meilleur est la solution LibreOffice ou GDocs.
une autre solution consiste à ouvrir le fichier par winword et à l'enregistrer au format txt, puis à le rouvrir par Excel et cela fonctionnera ISA
Microsoft Excel dispose d'une option pour exporter une feuille de calcul à l'aide du codage Unicode. Voir la capture d'écran suivante.
Boîte de dialogue Enregistrer> Bouton Outils> Options Web> onglet Encodage
Une deuxième option pour "nevets1219" consiste à ouvrir votre fichier CSV dans Notepad ++ et à effectuer une conversion en ANSI.
Choisissez dans le menu du haut: Encodage -> Convertir en Ansi
ouvrez le fichier .csv avec Notepad ++. si vous voyez que l'encodage est bon (vous voyez tous les caractères comme ils devraient l'être), appuyez sur l'encodage, puis convertissez-le en ANSI sinon - découvrez quel est votre encodage actuel
J'ai le même problème et rencontré cela ajouter, et cela fonctionne parfaitement dans Excel 2013 à côté d'Excel 2007 et 2010 pour lequel il est mentionné.
J'avais besoin d'automatiser ce processus sur mon Mac. J'ai initialement essayé d'utiliser catdoc/xls2csv
comme suggéré par mpowered, mais xls2csv
avait des difficultés à détecter le codage d'origine du document et tous les documents n'étaient pas identiques. J'ai fini par définir le codage de sortie de page Web par défaut sur UTF-8
, puis de fournir les fichiers à Automator d'Apple, en appliquant l'action Convert Format of Excel Files
à convertir en Web Page (HTML)
. Puis, en utilisant PHP
, DOMDocument
et XPath
, j'ai interrogé les documents et les ai formatés en CSV
.
Voici le script PHP (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);
?>
Et voici la commande Shell que j'ai utilisée pour convertir les documents HTML en CSV:
find . -name '*.htm' | xargs -I{} php ./process.php {}
C’est une façon vraiment très détournée de faire cela, mais c’est la méthode la plus fiable que j’ai trouvée.