Czy istnieje standardowy sposób lub biblioteka kopiowania i wklejania z arkusza kalkulacyjnego do formularza internetowego? Kiedy wybieram więcej niż jedną komórkę z Excela, (oczywiście) tracę ogranicznik i wszystko jest wklejane do jednej komórki formularza internetowego. Czy trzeba to zrobić w VB? czy może przetwarzanie może zostać wykonane po rozpoczęciu czynności wklejania w formularzu internetowym?
javascript
html
forms
excel
Jego głupota
źródło
źródło
Odpowiedzi:
Nie tracisz ograniczników, komórki są oddzielone tabulatorami (
\t
), a wiersze znakami nowej linii (\n
), które mogą nie być widoczne w formularzu. Spróbuj sam: skopiuj zawartość z Excela do Notatnika, a zobaczysz, że twoje komórki są ładnie ułożone. Łatwo jest wtedy podzielić pola na zakładki i zastąpić je czymś innym, w ten sposób można zbudować z nich nawet tabelę. Oto przykład użycia 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);
Zasadniczo ten skrypt tworzy tabelę HTML z wklejonych danych programu Excel.
źródło
td
. Do Twojej wiadomościW odpowiedzi na odpowiedź Tatu stworzyłem szybkie jsFiddle do zaprezentowania jego rozwiązania:
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); }
źródło
W systemach OSX i Windows istnieje wiele typów schowków dla różnych typów treści. Podczas kopiowania treści w programie Excel dane są przechowywane w postaci zwykłego tekstu oraz w schowku html.
Właściwym sposobem (który nie powoduje problemów z separatorami) jest przeanalizowanie kodu HTML. http://jsbin.com/uwuvan/5 to proste demo pokazujące, jak uzyskać schowek HTML. Kluczem jest powiązanie ze zdarzeniem onpaste i przeczytanie
event.clipboardData.getData('text/html')
źródło
Ten sam pomysł co Tatu (dzięki, będę go potrzebował wkrótce w naszym projekcie), ale z wyrażeniem regularnym.
Co może być szybsze w przypadku dużego zbioru danych.
<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>
źródło
Dla przyszłych pracowników Google, którzy trafią tutaj, tak jak ja, wykorzystałem koncepcję @tatu Ulmanen i po prostu przekształciłem ją w szereg obiektów. Ta prosta funkcja pobiera ciąg wklejonych danych programu Excel (lub arkusza Google) (najlepiej z a
textarea
) i zamienia go w tablicę obiektów. Używa pierwszego wiersza dla nazw kolumn / właściwości.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; }
Mam nadzieję, że pomoże to komuś w przyszłości.
źródło
AKTUALIZACJA: jest to prawdą tylko wtedy, gdy używasz ONLYOFFICE zamiast MS Excel.
Właściwie jest przepływ we wszystkich udzielonych tutaj odpowiedziach, a także w zaakceptowanej. Przepływ jest taki, że za każdym razem, gdy masz pustą komórkę w programie Excel i kopiujesz ją, w schowku masz 2 znaki tabulacji obok siebie, więc po podzieleniu otrzymujesz jeden dodatkowy element w tablicy, który następnie pojawia się jako dodatkowa komórka w tym wierszu i przesuwa wszystkie inne komórki o jeden. Aby tego uniknąć, w zasadzie musisz zamienić wszystkie podwójne znaki tabulacji (tylko tabulatory obok siebie) w ciągu na jeden znak tabulacji i dopiero wtedy go podzielić.
Zaktualizowana wersja jsfiddle @ userfuser jest tutaj, aby naprawić ten problem, filtrując wklejone dane za pomocą 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'); }) }) })
źródło
Excel 2007 ma do tego funkcję na karcie „Dane”, która działa całkiem nieźle.
źródło
Odkopać to na wypadek, gdyby ktoś natknął się na to w przyszłości. Użyłem powyższego kodu zgodnie z przeznaczeniem, ale napotkałem problem z wyświetlaniem tabeli po przesłaniu jej do bazy danych. Po zapisaniu danych jest znacznie łatwiej, aby użyć PHP do zastąpienia nowych linii i zakładek w zapytaniu. Możesz dokonać zamiany po przesłaniu, $ _POST [żądanie] będzie nazwą Twojego obszaru tekstowego:
$postrequest = trim($_POST[request]); $dirty = array("\n", "\t"); $clean = array('</tr><tr><td>', '</td><td>'); $request = str_replace($dirty, $clean, $postrequest);
Teraz po prostu wstaw $ request do swojej bazy danych, a zostanie ona zapisana jako tabela HTML.
źródło
Może byłoby lepiej, gdybyś przeczytał swój plik Excela z PHP, a następnie albo zapisał go w bazie danych, albo dokonał na nim przetwarzania.
tutaj szczegółowy samouczek dotyczący odczytywania i zapisywania danych Excela w PHP:
http://www.ibm.com/developerworks/opensource/library/os-phpexcel/index.html
źródło