Copier / Coller d'Excel vers une page Web

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

Vous ne perdez pas les délimiteurs, les cellules sont séparées par des onglets ( \t ) et des lignes par des lignes nouvelles ( \n ) qui pourraient ne pas être visibles sous la forme. Essayez-le vous-même: copiez le contenu d'Excel vers le Bloc-notes, et vous verrez que vos cellules sont parfaitement alignées. Il est facile de diviser les champs par des onglets et de les remplacer par quelque chose d'autre, de cette façon, vous pouvez même créer une table. Voici un exemple en 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 une table HTML à partir de données Excel collées.

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); } 

La même idée que Tatu (merci, j'en aurai besoin bientôt dans notre projet), mais avec une expression régulière.
Ce qui peut être plus rapide pour un grand ensemble 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> 

Pour les futurs googlers qui se retrouvent ici comme moi, j'ai utilisé le concept de @tatu Ulmanen et je l'ai simplement transformé en un ensemble d'objets. Cette fonction simple prend une série de données Excel (ou feuille Google) collées (de préférence à partir d'une zone de textarea ) et la transforme en un ensemble d'objets. Il utilise la première ligne pour les noms de colonne / propriété.

 function excelToObjects(stringData){ var objects = []; //split into rows var rows = stringData.split('\n'); //Make columns columns = rows[0].split('\t'); //Note how we start at rowNr = 1, because 0 is the column row for (var rowNr = 1; rowNr < rows.length; rowNr++) { var o = {}; var data = rows[rowNr].split('\t'); //Loop through all the data for (var cellNr = 0; cellNr < data.length; cellNr++) { o[columns[cellNr]] = data[cellNr]; } objects.push(o); } return objects; } 

J'espère que cela aidera quelqu'un dans le futur.

Sur OSX et 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.

Le bon chemin (qui ne se déclenche pas par des problèmes de délimitation) est d'analyser le code HTML. http://jsbin.com/uwuvan/5 est une démo simple qui montre comment obtenir le presse-papiers HTML. La clé est de lier l'événement onpaste et de lire

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

Peut-être que ce serait mieux si vous lisez votre fichier Excel à partir de PHP, puis enregistrez-le dans une base de données ou faites un peu de traitement.

Ici un didacticiel in-dept sur la façon de lire et d'écrire des données Excel avec PHP:
http://www.ibm.com/developerworks/opensource/library/os-phpexcel/index.html

Excel 2007 a une fonctionnalité pour le faire sous l'onglet "Données" qui fonctionne très bien.

En creusant cela, au cas où quelqu'un le rencontrerait dans le futur. J'ai utilisé le code ci-dessus comme prévu, mais j'ai rencontré un problème affichant le tableau après avoir été soumis à une base de données. C'est beaucoup plus facile une fois que vous avez stocké les données pour utiliser PHP pour remplacer les nouvelles lignes et onglets dans votre requête. Vous pouvez effectuer le remplacement lors de la soumission, $ _POST [demande] serait le nom de votre zone de texte:

 $postrequest = trim($_POST[request]); $dirty = array("\n", "\t"); $clean = array('</tr><tr><td>', '</td><td>'); $request = str_replace($dirty, $clean, $postrequest); 

Maintenant, insérez simplement la requête $ dans votre base de données, et elle sera stockée sous forme de table HTML.