csvkit ❝Convert Excel to CSV : `in2csv data.xls > data.csv` Convert JSON to CSV : `in2csv data.json >…

/382165

    • Ah oui super.

      Je viens de découvrir un truc dingue. Excel suppose que puisqu’on est en France, le séparateur de champs d’un fichier csv est non pas , mais ; ...

      Du coup si quelqu’un nous envoie un véritable fichier csv et bien il ne s’ouvre pas dans Excel FR.

      A moins de faire :

      csvformat -D \; "$source" > "$source.tmp"
      mv "$source.tmp" "$source"

      De même pour convertir un fichier excel en fichier « csv » à la mode excel FR :

      source="$1"
      dest="${1/xlsx/csv}"
      in2csv "$source" > "$dest.tmp"
      csvformat -D \; "$dest.tmp" > "$dest"
      rm "$dest.tmp"
    • @booz, pour ouvrir un fichier .csv avec Excel, il faut préalablement le renommer en .txt ce qui te donne la main sur le choix du séparateur (et des jeux de caractères).

      Tu peux aussi (et ça marche aussi pour l’enregistrement d’Excel vers le csv) dire à ton ordi qu’il n’est pas en France (paramètres régionaux sous Windows ou préférences sous MacOS).

    • Héhé, et pour gérer les accents sous Mac dans un viel excel, faut en plus faire :

      | iconv -f UTF-8 -t macintosh

      Donc pour convertir un csv propre en Excel FR à l’ancienne et que ça s’ouvre en cliquant dessus sans rien faire d’autre :

      csvformat -D \; "$source" | iconv -f UTF-8 -t macintosh > "$dest"

      Et bonus, une version en spip/php pour générer un fichier à télécharger qui sera ouvert dans Excel avec les bons accents que @fil m’avait fait il y a quelques années.

      Dans mon_squelette_fonctions.php :

      <?php
      include_spip('inc/charsets');
      init_mb_string();
      ob_start('convert_utf16');
      function convert_utf16($txt) {
              return "\xFF\xFE" . mb_convert_encoding("\n".$txt, 'UTF-16LE', 'UTF-8');
      }

      Dans mon_squelette.xls.html :

      #HTTP_HEADER{Content-Type: application/vnd.ms-excel; charset=UTF-16LE}
      ...

      #spip #export #excel

    • En fait Excel n’est pas si mauvais que ca. J’ai compris que le coup du séparateur ; avait sont intérêt en fr car la , est utilisée pour les nombres décimaux en francais (c’est un .en anglais). Donc pour parser un fichier csv c’est plus simple avec des données fr si le séparateur est ; pour ne pas confondre un champs et un nombre décimal.

      Par ailleurs j’ai testé csvkit vs Excel vs Googlesheets vs awk avec un fichier csv de 11Mo, et bien C’est Excel qui s’en sort le mieux.

      csvkit et Googlesheets ramment tant qu’ils peuvent, awk s’en sort bien mais ne sait pas parser simplement sur les , en distinguant les , séparateurs de champs des , décimales.

      Excel gère...

      Je me demande du coup si le bon format pour des gros fichiers ne serait pas des données séparées par des tabulations.

    • Je persiste à penser – mais en ce domaine comme dans d’autres, le plus court chemin est celui que l’on connaît – que le moyen le plus simple d’ouvrir un .csv avec Excel est de le mettre en .txt. Tu passes ainsi par l’assistant d’importation de texte qui est court-circuité pour les .csv. Ses 3 étapes te permettent de choisir interactivement (tu visualises le résultat directement)
      • le codage du texte et la ligne de début de l’importation
      • le ou les séparateur(s) (ou le découpage en colonnes si tu es en largeur fixe)
      • et (surtout !) le type de données pour chaque colonne (indispensable pour gérer les différents formats de date), voire de ne pas importer les colonnes qui ne t’intéressent pas (très utile pour les gros fichiers de données : quand tu supprimes les colonnes d’un tableau Excel, l’espace mémoire n’est libéré que lors de l’enregistrement du fichier, les colonnes que tu as importées puis immédiatement supprimées occupent toujours la mémoire).