web-dev-qa-db-fra.com

convertir un fichier Excel (xls) en un fichier csv séparé par une virgule sans interface graphique

Existe-t-il un moyen simple de traduire un fichier XLS en un fichier au format CSV sans démarrer l'application fenêtrée Excel?

Je dois traiter certains classeurs Excel XLS avec des scripts. Pour cela, j'ai besoin de convertir le fichier xls en un fichier csv. Cela peut être fait avec une sauvegarde de l'application Excel. Mais, je voudrais automatiser cela (donc ne pas ouvrir la fenêtre de l'application Excel). 

Il suffira que la première feuille du classeur soit traduite au format CSV ..__J'ai besoin de traiter uniquement les données de cette feuille.

Cygwin et Excel sont installés sur mon système, si cela peut vous aider.

Edit: Ok, j'ai une solution de travail avec Perl. Mise à jour pour une utilisation future par d'autres.

J'ai installé le Tableur :: ParseExcel module . et ensuite utilisé read-Excel.pl sample.

Mon code est une légère variation de cet exemple de code, comme ci-dessous.

#!/usr/bin/Perl -w
# For each tab (worksheet) in a file (workbook),
# spit out columns separated by ",",
# and rows separated by c/r.

use Spreadsheet::ParseExcel;
use strict;

my $filename = shift || "Book1.xls";
my $e = new Spreadsheet::ParseExcel;
my $eBook = $e->Parse($filename);
my $sheets = $eBook->{SheetCount};
my ($eSheet, $sheetName);

foreach my $sheet (0 .. $sheets - 1) {
    $eSheet = $eBook->{Worksheet}[$sheet];
    $sheetName = $eSheet->{Name};
    print "#Worksheet $sheet: $sheetName\n";
    next unless (exists ($eSheet->{MaxRow}) and (exists ($eSheet->{MaxCol})));
    foreach my $row ($eSheet->{MinRow} .. $eSheet->{MaxRow}) {
        foreach my $column ($eSheet->{MinCol} .. $eSheet->{MaxCol}) {
            if (defined $eSheet->{Cells}[$row][$column])
            {
                print $eSheet->{Cells}[$row][$column]->Value . ",";
            } else {
                print ",";
            }
        }
        print "\n";
    }
}

Mettre à jour: Voici un script Powershell qui pourrait également être facile à utiliser; Tel quel depuis ce blog MSDNet, SO Référence .

$Excel = New-Object -comobject Excel.Application
$workbooks = $Excel.Workbooks.Open("C:\test.xlsx")
$worksheets = $workbooks.Worksheets
$worksheet = $worksheets.Item(1)
$range = $worksheet.UsedRange
foreach($row in $range.Rows)
{
    foreach($col in $row.Columns)
    {
        echo $col.Text
    }
}

Mise à jour: Je suis récemment tombé sur un outil Windows CSVed at this Réponse du superutilisateur / qui pourrait être utile à certaines personnes.

21
nik

Utilisez un script Perl. L'utilisation du module Spreadsheet :: ParseExcel Perl de CPAN pour analyser le fichier xls suivi de la sortie au format csv devrait fonctionner correctement.

http://search.cpan.org/dist/Spreadsheet-ParseExcel

Vous pouvez également essayer d'utiliser VBScript.

3
PatrickBateman

Vous pouvez utiliser xls2csv à partir du paquet catdoc si vous êtes sur Debian/Ubuntu

6
Rory

De Documents Gnumeric :

Gnumeric peut convertir des fichiers automatiquement sans intervention de l'utilisateur. Cela permet à un grand nombre de fichiers d'être convertis à l'aide d'un script. Gnumeric est distribué avec un programme appelé ssconvert qui est le programme utilisé pour convertir les fichiers automatiquement. Tous les formats de fichier pris en charge par Gnumeric peuvent être utilisés à l'exception des formats de fichier Postscript et PDF qui fonctionnent via le système d'impression.

Cette application est utilisée, à partir de la ligne de commande, en spécifiant les options souhaitées, un fichier d'entrée et un fichier de sortie. Par exemple,

ssconvert myfile.xls myfile.gnumeric

convertirait un fichier au format Excel en un fichier au format Gnumeric.

Les formats de fichier d'importation et d'exportation disponibles que ssconvert peut lire peuvent être listés à l'aide de

ssconvert --list-importers

ou

ssconvert --list-exporters

respectivement.

Comme d'autres applications en ligne de commande GNU, ssconvert inclut une page de manuel. Cette page est accessible en tapant:

man ssconvert

qui ouvrira la page de manuel. Cette page peut être parcourue en tapant la barre d'espace ou en utilisant les boutons Page précédente et Page suivante. Le programme man peut être ignoré en tapant la touche q.

Je l'utilise et fonctionne bien.

4
Marcello Nuccio

Dans le monde Java, vous pouvez utiliser Apache Poi. Vous pouvez commencer à partir de l'extrait Groovy suivant.

FileInputStream fis = new FileInputStream(filename);
Workbook wb = new HSSFWorkbook(fis); 
Sheet sheet = wb.getSheetAt(0);
for (Row row : sheet) {
  for (Cell cell : row) {
    doSomething(cell.toString())
  }

}
4
jens

Utilisez l'une des bibliothèques portables [Python]:

pyxlreader.sourceforge.net/

sourceforge.net/projects/pyexcelerator

et faire une couche de script supplémentaire dessus.

2
Denis Barmenkov

Excel peut être utilisé comme source de données et des pilotes sont disponibles pour accéder à Excel en tant que base de données.

1.) Créez et ouvrez une connexion au fichier Excel que vous souhaitez convertir en CSV.

2.) Lancez une requête du type "SELECT * From Sheet1", qui chargera toutes les données de Sheet1 dans un jeu d’enregistrements ou de données.

3.) Étant donné que j'utilise .net, je peux conserver ces enregistrements sur des données et les convertir en CSV en utilisant la méthode d'extension suivante.

        public static string ToCSV(this DataTable _dataTable)
        {
            StringBuilder csv = new StringBuilder();
            StringWriter sw = new StringWriter(csv);
            int icolcount = _dataTable.Columns.Count;
            for (int i = 0; i < icolcount; i++)
            {
                sw.Write(_dataTable.Columns[i]);
                if (i < icolcount - 1)
                {
                    sw.Write(",");
                }
            }
            sw.Write(sw.NewLine);
            foreach (DataRow drow in _dataTable.Rows)
            {
                for (int i = 0; i < icolcount; i++)
                {
                    if (!Convert.IsDBNull(drow[i]))
                    {
                        sw.Write(drow[i].ToString());
                    }
                    if (i < icolcount - 1)
                    {
                        sw.Write(",");
                    }
                }
                sw.Write(sw.NewLine);
            }
            sw.Close();
            return csv.ToString();
        }

Vous pouvez appliquer cette approche sur le la plateforme sur laquelle vous travaillez.

Merci.

2

Le script VBS et ça marche génial http://www.go4expert.com/forums/showthread.php?t=18188

Définissez objArgs = WScript.Arguments Pour I = 0 à objArgs.Count - 1

FullName = objArgs(I)
FileName = Left(objArgs(I), InstrRev(objArgs(I), ".") )

Set objExcel = CreateObject("Excel.application")
set objExcelBook = objExcel.Workbooks.Open(FullName)

objExcel.application.visible=false
objExcel.application.displayalerts=false

objExcelBook.SaveAs FileName & "csv", 23

objExcel.Application.Quit
objExcel.Quit   

Set objExcel = Nothing
set objExcelBook = Nothing

Suivant

1
Rasterman

@ John Machin: Je ne peux pas ajouter de commentaire car je newbee pour ce forum :)

Je n'ai pas utilisé l'ancien paquet pyXLreader mais je poste mon message avec xlrd in mind;)

Je l'ai vu il y a un mois mais je ne l'ai pas utilisé dans des projets.

WBR

0
Denis Barmenkov

Recommandez Convert XLS: http://www.softinterface.com/Convert-XLS%5CConvert-XLS.htm

«Convert XLS» est un utilitaire de conversion Excel simple à utiliser mais sophistiqué, spécialement conçu pour les fichiers Excel, texte et CSV (délimités par des caractères/virgules). Si vous avez besoin de convertir/manipuler un ou des milliers de fichiers, situés dans un ou plusieurs dossiers, c'est l'outil! Les conversions peuvent être effectuées 10 à 15 fois plus rapidement sans MS Excel.

Automatisez vos tâches de conversion Excel en utilisant:

  • Planificateur intégré
  • La ligne de commande
  • interface COM interface
0
William Leara

Vous pouvez le faire avec Alacon - utilitaire de ligne de commande pour Alasql database.

Cela fonctionne avec Node.js, vous devez donc installer Node.js puis Alasql package:

> npm install alasql

Pour convertir un fichier Excel en CVS (ot TSV), vous pouvez entrer:

> node alacon "SELECT * INTO CSV('mydata.csv', {headers:true}) FROM XLS('mydata.xls', {headers:true})"

Alacon prend en charge d'autres types de conversions (CSV, TSV, TXT, XLSX, XLS) et des constructions en langage SQL (voir Manuel de l'utilisateur pour des exemples).

0
agershun

Si vous avez Cygwin, vous aurez probablement Python. Sinon, installez python et utilisez ce script . C'est beaucoup plus que ce dont vous avez besoin, mais la conversion sera facile et rapide.

0
praavDa

je suis assez nouveau sur ces forums, et ce serait bien s'ils mettaient l'année sur l'horodatage (bête noire), alors je sais quel âge ont les messages. Je vais supposer qu'ils sont à partir de 2009.

mais une bonne solution en python consiste à utiliser xlrd pour lire dans vos fichiers xls. Voici un didacticiel d’introduction assez simple: http://scienceoss.com/read-Excel-files-from-python/

le seul problème que j'ai eu était les dates Excel. voici une solution rapide pour eux:

date = xlrd.xldate_as_Tuple (int (sheet.cell (rowNum, colNum) .value), workBookName.datemode)

que créer un fichier csv avec le module csv intégré, comme je suis un nouvel utilisateur je ne peux poster qu’un hyper lien. mais google le module csv api. 

j'espère que c'était utile

0

ma solution: 

use Spreadsheet::BasicRead;

my $xls = 'file.xls';   
my $csv = 'file.csv';

   my $ss = new Spreadsheet::BasicRead($xls) or die "Could not open '$xls': $!";
   my $name = '';
   my $row = 0;

   open(FILE, ">$csv") or die "Could not open : $!\n";
      flock(FILE, 2) or die "Could not lock file\n"; 

        while (my $data = $ss->getNextRow()){
            $row++;
            $name = join(';',@$data);         
            print FILE $name."\n" if ($name ne "");
        }

      flock(FILE, 8); 
   close FILE; 
0
Mr.P