96 votes

Copier/coller d'Excel vers une page web

Existe-t-il une méthode ou une bibliothèque standard pour copier et coller d'une feuille de calcul Excel vers un formulaire Web ? Lorsque je sélectionne plus d'une cellule dans Excel, je perds (évidemment) le délimiteur et tout est collé dans une seule cellule du formulaire web. Faut-il le faire en VB ? Ou le traitement pourrait-il être effectué une fois que l'action de collage est lancée sur le formulaire Web ?

0 votes

Essayez-vous d'automatiser quelque chose ? Pouvez-vous donner un meilleur exemple...

3 votes

J'avais peur de poser cette question. Merci de l'avoir fait, et d'être si concis :)

102voto

Tatu Ulmanen Points 52098

Vous ne perdez pas les délimiteurs, les cellules sont séparées par des tabulations ( \t ) et les rangées par des retours à la ligne ( \n ) qui ne sont peut-être pas visibles dans le formulaire. Essayez vous-même : copiez le contenu d'Excel vers le Bloc-notes, et vous verrez que vos cellules sont bien alignées. Il est alors facile de diviser les champs par onglets et de les remplacer par autre chose, de cette façon vous pouvez même construire un tableau à partir de ceux-ci. Voici un exemple utilisant jQuery :

var data = $('input[name=excel_data]').val();
var rows = data.split("\n");

var table = $('<table />');

for(var y in rows) {
    var cells = rows[y].split("\t");
    var row = $('<tr />');
    for(var x in cells) {
        row.append('<td>'+cells[x]+'</td>');
    }
    table.append(row);
}

// Insert into DOM
$('#excel_table').html(table);

Donc, en substance, ce script crée un tableau HTML à partir de données Excel collées.

10 votes

J'ai joué avec un problème similaire, il est intéressant de noter que si vous collez dans une zone de texte, vous perdez les nouvelles lignes. En revanche, en collant dans une zone de texte, vous les conservez.

1 votes

Pour des raisons pratiques, vous pourriez faire de cette réponse un snippet pour des utilisations futures.

2 votes

S'il y a une nouvelle ligne dans une cellule, il y a rupture.

34voto

dunderwood Points 31

En réponse à la réponse de Tatu, j'ai créé un jsFiddle rapide pour présenter sa solution :

http://jsfiddle.net/duwood/sTX7y/

HTML

<p>Paste excel data here:</p>  
<textarea name="excel_data" style="width:250px;height:150px;"></textarea><br>
<input type="button" onclick="javascript:generateTable()" value="Genereate Table"/>
<br><br>
    <p>Table data will appear below</p>
<hr>
<div id="excel_table"></div>

JS

function generateTable() {
    var data = $('textarea[name=excel_data]').val();
    console.log(data);
    var rows = data.split("\n");

    var table = $('<table />');

    for(var y in rows) {
    var cells = rows[y].split("\t");
    var row = $('<tr />');
    for(var x in cells) {
        row.append('<td>'+cells[x]+'</td>');
    }
    table.append(row);
}

// Insert into DOM
$('#excel_table').html(table);
}

4 votes

Et voici mon complément à cette réponse, mais avec l'affichage automatique du tableau, tout de suite sur l'événement paste : jsfiddle.net/sTX7y/690 En fait, il simule l'événement "après-collage".

19voto

Morgan Rauscher Points 131

Je viens de trouver cette solution jQuery

http://handsontable.com/

14voto

Nirk Points 9999

Sur OSX y Windows Il existe plusieurs types de presse-papiers pour différents types de contenu. Lorsque vous copiez du contenu dans Excel, les données sont stockées dans le texte en clair et dans le presse-papiers html.

La bonne méthode (qui ne se heurte pas aux problèmes de délimiteurs) consiste à analyser le HTML. http://jsbin.com/uwuvan/5 est une démo simple qui montre comment obtenir le presse-papiers HTML. La clé est de se lier à l'événement onpaste et de lire les données suivantes

event.clipboardData.getData('text/html')

0 votes

Le jsbin n'a pas fonctionné comme prévu pour moi (Firefox 42 sur Win 7, Excel 2013). Quelque chose d'important a-t-il changé depuis que vous avez posté cette réponse, qui fait que cette approche ne fonctionne plus ? Dans la console du navigateur, je vois le contenu text/plain enregistré, mais le contenu text/html est vide.

0 votes

Cela fonctionne avec chrome, que ce soit sous Windows avec excel ou sous ubuntu avec libreOffice. C'est la meilleure solution, car elle conserve le formatage des feuilles d'origine.

0 votes

Cette réponse est tout à fait pertinente mais il faut plus de détails

8voto

Mic Points 13418

La même idée que Tatu (merci j'en aurai bientôt besoin dans notre projet), mais avec une expression régulière.
Ce qui peut être plus rapide pour les grands ensembles de données.

<html>
<head>
    <title>excelToTable</title>
    <script src="../libs/jquery.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
    <textarea>a1    a2  a3
b1  b2  b3</textarea>
    <div></div>
    <input type="button" onclick="convert()" value="convert"/>
    <script>
        function convert(){
            var xl = $('textarea').val();
            $('div').html( 
                '<table><tr><td>' + 
                xl.replace(/\n+$/i, '').replace(/\n/g, '</tr><tr><td>').replace(/\t/g, '</td><td>') + 
                '</tr></table>'
            )
        }
    </script>
</body>
</html>

0 votes

Salut Mic, ce code est génial ! As-tu une idée de la façon dont je pourrais convertir ce tableau en un formulaire à soumettre ?

0 votes

Cela dépend du formulaire que vous voulez soumettre. Je ferais un json stringifié à partir de ça, et je le posterais comme un seul champ au serveur.

0 votes

Au fait, cela fonctionne également pour un tableau Word (l'un des anciens "formulaires" de mes utilisateurs que nous essayons de convertir). Merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X