एक्सेल से एक वेब पेज पर कॉपी / पेस्ट करें


88

वहाँ एक मानक तरीका है या एक कॉपी और एक स्प्रेडशीट से एक वेब फार्म के लिए पेस्ट करने के लिए पुस्तकालय? जब मैं एक्सेल I (जाहिर है) से एक से अधिक सेल का चयन करता हूं तो सीमांकक खो जाता है और सभी को वेब फॉर्म के एक सेल में चिपकाया जाता है। क्या यह वीबी में किया जाना है? या वेब फॉर्म पर पेस्ट क्रिया शुरू होने के बाद प्रसंस्करण किया जा सकता है?


क्या आप कुछ स्वचालित करने की कोशिश कर रहे हैं? क्या आप एक बेहतर उदाहरण दे सकते हैं ...
डेटन ब्राउन

2
मैं यह सवाल पूछने से डरता था। इसे करने के लिए धन्यवाद, और इतना संक्षिप्त होने के लिए। :)
Nostalg.io

जवाबों:


93

आप सीमांकक नहीं खोते हैं, कोशिकाओं को टैब ( \t) और पंक्तियों को न्यूलाइन ( \n) द्वारा अलग किया जाता है जो कि प्रपत्र में दिखाई नहीं दे सकते हैं। इसे स्वयं आज़माएँ: Excel से Notepad तक की सामग्री की प्रतिलिपि बनाएँ, और आप अपनी कोशिकाओं को अच्छी तरह से पंक्तिबद्ध देखेंगे। तब खेतों को टैब द्वारा विभाजित करना आसान होता है और उन्हें किसी और चीज़ से बदल दिया जाता है, इस तरह आप उनसे एक टेबल भी बना सकते हैं। यहाँ 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);

तो संक्षेप में, यह स्क्रिप्ट पेस्ट किए गए एक्सेल डेटा से एक HTML तालिका बनाता है।


9
मैं इसी तरह की समस्या के साथ खेल रहा हूं, यह ध्यान देने योग्य है, एक टेक्स्टबॉक्स में चिपकाने से, आप नई कहानियों को ढीला करते हैं। पाठ क्षेत्र में पेस्ट करते समय आप उन्हें रखते हैं।
wobbily_col

व्यावहारिक कारणों से, आप भविष्य में उपयोग के लिए इस उत्तर को एक स्निपेट बना सकते हैं।
AdrianoRR

1
अगर किसी सेल के भीतर एक नई-लाइन आती है तो यह टूट जाती है।
th3byrdm4n

इस पर बस एक त्वरित नोट - शानदार ढंग से काम करता है लेकिन जब डेटा कॉपी किया जाता है तो एक्सेल एक अनुरेखण पंक्ति जोड़ता है ताकि आप एक खाली के साथ समाप्त हो जाएं td। बस FYI करें
jg2703

यह एक त्वरित लेकिन अल्पकालिक समाधान है, क्या होगा यदि मेरी कोशिकाओं में से एक इसमें \ n हो
MeVimalkumar

27

Tatu द्वारा जवाब के जवाब में मैंने उसका समाधान दिखाने के लिए एक त्वरित jsFiddle बनाया है:

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

एचटीएमएल

<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>

जे एस

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

3
और यहाँ इस जवाब के लिए मेरा जोड़ है, लेकिन स्वचालित रूप से तालिका दिखाने के साथ, पेस्ट इवेंट पर तुरंत: jsfiddle.net/sTX7y/690 मूल रूप से, यह 'afterpaste' ईवेंट का अनुकरण करता है।
userfuser

12

पर OSX और विंडोज , वहाँ विभिन्न प्रकार की सामग्री के लिए clipboards के कई प्रकार हैं। जब आप Excel में सामग्री की प्रतिलिपि बनाते हैं, तो डेटा को सादे टेक्स्ट और html क्लिपबोर्ड में संग्रहीत किया जाता है।

HTML को पार्स करने के लिए सही तरीका (जो कि सीमांकक मुद्दों द्वारा नहीं मिला है)। http://jsbin.com/uwuvan/5 एक सरल डेमो है जो दिखाता है कि HTML क्लिपबोर्ड कैसे प्राप्त करें। कुंजी onpaste इवेंट में बाँधने और पढ़ने के लिए है

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

Jsbin ने मेरे लिए उम्मीद के मुताबिक काम नहीं किया (फ़ायरफ़ॉक्स 42 विन 7, एक्सेल 2013 पर)। क्या आपने इस उत्तर को पोस्ट करने के बाद कुछ महत्वपूर्ण परिवर्तन किया है, जो इस दृष्टिकोण को अब काम नहीं करता है? ब्राउज़र कंसोल में, मुझे पाठ / सादा सामग्री लॉग इन दिखाई देती है, लेकिन पाठ / HTML सामग्री खाली है।
क्रिश्चियन सेमरू

यह क्रोम के साथ या तो विंडोज़ पर एक्सेल के साथ या ubuntu पर libreOffice के साथ काम करता है। सबसे अच्छा समाधान IMO, क्योंकि यह मूल पत्रक से सभी स्वरूपण रखता है।
BiAiB

यह काफी प्रासंगिक जवाब है, लेकिन अधिक विस्तार की आवश्यकता है
MeVimalkumar

8

तातु के रूप में एक ही विचार (धन्यवाद मुझे जल्द ही हमारी परियोजना में इसकी आवश्यकता होगी), लेकिन एक नियमित अभिव्यक्ति के साथ।
जो बड़े डेटासेट के लिए तेज हो सकता है।

<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>

हाय माइक, यह महान कोड है! क्या आपके पास कोई अंतर्दृष्टि है कि मैं इस तालिका रूपांतरण को एक सबमिट करने योग्य रूप में कैसे ले सकता हूं?
BvilleBullet

यह उस फॉर्म पर निर्भर करता है जिसे आप सबमिट करना चाहते हैं। मैं उस से बाहर एक कड़ा हो जाएगा, और यह सर्वर के लिए एक ही क्षेत्र के रूप में पोस्ट।
mic

वैसे, यह एक वर्ड टेबल के लिए काम करता है, भी (मेरे उपयोगकर्ताओं में से एक "रूप" जो हम बदलने की कोशिश कर रहे हैं)। धन्यवाद।
ह्यूग सीग्रेव्स

5

भविष्य के किसी भी गोगलर्स के लिए जो मेरी तरह यहां खत्म हो रहे हैं, मैंने @tatu उलेमेन की अवधारणा का उपयोग किया और इसे वस्तुओं की एक सरणी में बदल दिया। यह साधारण फ़ंक्शन चिपकाया हुआ एक्सेल (या Google शीट) डेटा (अधिमानतः textarea) से स्ट्रिंग लेता है और इसे ऑब्जेक्ट की एक सरणी में बदल देता है। यह कॉलम / संपत्ति के नाम के लिए पहली पंक्ति का उपयोग करता है।

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

उम्मीद है कि यह भविष्य में किसी की मदद करे।


1

अद्यतन: यह केवल सही है यदि आप MS Excel के बजाय ONLYOFFICE का उपयोग करते हैं।

यहाँ प्रदान किए गए सभी उत्तरों में वास्तव में एक प्रवाह है और स्वीकृत में भी। प्रवाह यह है कि जब भी आपके पास एक्सेल में एक खाली सेल होता है और कॉपी करते हैं, तो क्लिपबोर्ड में आपके पास एक दूसरे के बगल में 2 टैब चार्ट होते हैं, इसलिए विभाजन के बाद आपको सरणी में एक अतिरिक्त आइटम मिलता है, जो तब उस पंक्ति में एक अतिरिक्त सेल के रूप में दिखाई देता है और एक-एक करके सभी अन्य कोशिकाओं को स्थानांतरित करता है। तो इससे बचने के लिए आपको मूल रूप से सभी डबल टैब (एक दूसरे के बगल वाले टैब) को एक टैब चार के साथ एक स्ट्रिंग में बदलने की जरूरत है और उसके बाद ही इसे विभाजित करें।

@ Userfuser का jsfiddle का अपडेटेड वर्जन यहाँ है कि इस समस्या को दूर करने के लिए 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');
    })
  })
})

मुझे वास्तव में पता चला कि ऐसा केवल तभी होता है जब आप ONLYOFFICE सॉफ़्टवेयर की स्प्रैडशीट से कॉपी करते हैं। हम्म .. इसे छोड़कर अगर कोई इस पर ठोकर खाए।
अराम

0

एक्सेल 2007 में "डेटा" टैब के तहत ऐसा करने की सुविधा है जो बहुत अच्छी तरह से काम करता है।


0

यदि कोई भविष्य में इसके पार आता है, तो इसे खोदना। मैंने उपरोक्त कोड का उपयोग इरादा के रूप में किया था, लेकिन फिर एक डेटाबेस में प्रस्तुत किए जाने के बाद तालिका को प्रदर्शित करने वाले मुद्दे में भाग गया। अपनी क्वेरी में नई लाइनों और टैब को बदलने के लिए PHP का उपयोग करने के लिए डेटा संग्रहीत करने के बाद यह बहुत आसान है। आप सबमिट करने पर प्रतिस्थापित कर सकते हैं, $ _POST [अनुरोध] आपके टेक्स्टारिया का नाम होगा:

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

अब बस अपने डेटाबेस में $ अनुरोध डालें, और इसे एक HTML तालिका के रूप में संग्रहीत किया जाएगा।


-1

शायद यह बेहतर होगा यदि आप PHP से अपनी एक्सेल फ़ाइल पढ़ेंगे, और फिर या तो इसे एक डीबी में सहेजें या उस पर कुछ प्रसंस्करण करें।

यहाँ PHP के साथ एक्सेल डेटा को पढ़ने और लिखने के तरीके पर एक इन-डिपार्ट ट्यूटोरियल:
http://www.ibm.com/developerworks/opensource/library/os-phpexcel/index.html


यह एक बहुत ही भयानक समाधान है। मैं इस धागे के लिए आया था क्योंकि मैं वर्तमान में यह कर रहा हूं और यह अविश्वसनीय रूप से त्रुटि प्रवण है। एक्सेल कभी-कभी पूर्णांक के रूप में संख्याओं को बाहर निकालता है, कभी-कभी स्ट्रिंग्स के रूप में तैरता है।
wobbily_col

उपयोगकर्ता के परिदृश्य भी लागू होते हैं, जहां आपको अपने बैंक की तरह अविश्वसनीय स्रोतों से चिपकाने की आवश्यकता होती है, जिनकी xls / csv फाइलें बकवास से भरी होती हैं जिन्हें मैन्युअल रूप से छाने की आवश्यकता होती है
ZJR
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.