Apakah ada cara standar atau pustaka untuk menyalin dan menempelkan dari lembar spreasheet ke formulir web? Ketika saya memilih lebih dari satu sel dari Excel I (jelas) kehilangan pembatas dan semua disisipkan ke dalam satu sel formulir web. Apakah itu harus dilakukan di VB? atau dapatkah pemrosesan dilakukan setelah tindakan tempel dimulai di formulir web?
javascript
html
forms
excel
Ketolosannya
sumber
sumber
Jawaban:
Anda tidak kehilangan pemisah, sel dipisahkan oleh tab (
\t
) dan baris oleh baris baru (\n
) yang mungkin tidak terlihat di formulir. Cobalah sendiri: salin konten dari Excel ke Notepad, dan Anda akan melihat sel Anda berbaris rapi. Maka mudah untuk membagi bidang dengan tab dan menggantinya dengan yang lain, dengan cara ini Anda bahkan dapat membuat tabel dari mereka. Berikut contoh menggunakan 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);
Jadi intinya, script ini membuat tabel HTML dari data Excel yang ditempelkan.
sumber
td
. FYIMenanggapi jawaban oleh Tatu, saya telah membuat jsFiddle cepat untuk menampilkan solusinya:
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); }
sumber
Di OSX dan Windows , ada beberapa jenis papan klip untuk berbagai jenis konten. Saat Anda menyalin konten di Excel, data disimpan dalam teks biasa dan di papan klip html.
Cara yang benar (yang tidak tersandung oleh masalah pembatas) adalah dengan mengurai HTML. http://jsbin.com/uwuvan/5 adalah demo sederhana yang menunjukkan bagaimana mendapatkan clipboard HTML. Kuncinya adalah mengikat acara onpaste dan membaca
event.clipboardData.getData('text/html')
sumber
Ide yang sama dengan Tatu (terima kasih, saya akan membutuhkannya segera di proyek kami), tetapi dengan ekspresi reguler.
Yang mungkin lebih cepat untuk kumpulan data besar.
<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>
sumber
Untuk setiap calon karyawan Google yang berakhir di sini seperti saya, saya menggunakan konsep @tatu Ulmanen dan mengubahnya menjadi serangkaian objek. Fungsi sederhana ini mengambil string data excel (atau Google sheet) yang ditempelkan (sebaiknya dari a
textarea
) dan mengubahnya menjadi array objek. Ini menggunakan baris pertama untuk nama kolom / properti.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; }
Semoga membantu seseorang di masa depan.
sumber
UPDATE: Ini hanya berlaku jika Anda menggunakan ONLYOFFICE daripada MS Excel.
Sebenarnya ada aliran dalam semua jawaban yang diberikan di sini dan juga di jawaban yang diterima. Alurnya adalah setiap kali Anda memiliki sel kosong di excel dan menyalinnya, di clipboard Anda memiliki 2 karakter tab di samping satu sama lain, jadi setelah memisahkan Anda mendapatkan satu item tambahan dalam array, yang kemudian muncul sebagai sel ekstra di baris itu. dan memindahkan semua sel lain satu per satu. Jadi untuk menghindari itu pada dasarnya Anda perlu mengganti semua karakter tab ganda (tab di samping satu sama lain hanya) dalam string dengan satu karakter tab dan hanya kemudian membaginya.
Versi terbaru dari @ userfuser jsfiddle hadir untuk memperbaiki masalah itu dengan memfilter data yang ditempelkan dengan removeExtraTabs
http://jsfiddle.net/sTX7y/794/
function removeExtraTabs(string) { return string.replace(new RegExp("\t\t", 'g'), "\t"); } function generateTable() { var data = removeExtraTabs($('#pastein').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); } $(document).ready(function() { $('#pastein').on('paste', function(event) { $('#pastein').on('input', function() { generateTable(); $('#pastein').off('input'); }) }) })
sumber
Excel 2007 memiliki fitur untuk melakukan ini di bawah tab "Data" yang berfungsi cukup baik.
sumber
Menggali ini, jika ada yang menemukannya di masa depan. Saya menggunakan kode di atas seperti yang dimaksudkan, tetapi kemudian mengalami masalah saat menampilkan tabel setelah dikirimkan ke database. Jauh lebih mudah setelah Anda menyimpan data untuk menggunakan PHP untuk mengganti baris dan tab baru dalam kueri Anda. Anda dapat melakukan penggantian saat pengiriman, $ _POST [request] akan menjadi nama textarea Anda:
$postrequest = trim($_POST[request]); $dirty = array("\n", "\t"); $clean = array('</tr><tr><td>', '</td><td>'); $request = str_replace($dirty, $clean, $postrequest);
Sekarang masukkan saja $ request ke database Anda, dan itu akan disimpan sebagai tabel HTML.
sumber
Mungkin akan lebih baik jika Anda membaca file excel Anda dari PHP, dan kemudian menyimpannya ke DB atau melakukan pemrosesan padanya.
di sini tutorial mendalam tentang cara membaca dan menulis data Excel dengan PHP:
http://www.ibm.com/developerworks/opensource/library/os-phpexcel/index.html
sumber