2011-08-23 17 views
33

मेरे पास वेबसाइट पर एक HTML तालिका में डेटा की एक तालिका है और यह जानने की आवश्यकता है कि उस डेटा को .csv फ़ाइल के रूप में कैसे निर्यात करें।मैं HTML तालिका डेटा को .csv फ़ाइल के रूप में कैसे निर्यात करूं?

यह कैसे किया जाएगा?

+0

कितना डेटा नहीं है बनाते हैं? क्या यह नौकरी से बाहर है या आपको इसे कई बार चलाने की आवश्यकता होगी? –

+0

बहुत यकीन है कि आपको पृष्ठ को पार्स करना होगा और डेटा से सीएसवी मैन्युअल रूप से उत्पन्न करना होगा। – Jim

+0

संभवतः http://stackoverflow.com/questions/2627162/how-to-convert-html-to-csv –

उत्तर

23

सीएसवी को एचटीएमएल निर्यात करने के लिए इस उदाहरण का पालन करने का प्रयास करें। अधिक जानकारी और उदाहरण author's website पर उपलब्ध हैं।

एक html2csv.js फ़ाइल बनाएं और इसमें निम्न कोड डालें।

jQuery.fn.table2CSV = function(options) { 
    var options = jQuery.extend({ 
     separator: ',', 
     header: [], 
     delivery: 'popup' // popup, value 
    }, 
    options); 

    var csvData = []; 
    var headerArr = []; 
    var el = this; 

    //header 
    var numCols = options.header.length; 
    var tmpRow = []; // construct header avalible array 

    if (numCols > 0) { 
     for (var i = 0; i < numCols; i++) { 
      tmpRow[tmpRow.length] = formatData(options.header[i]); 
     } 
    } else { 
     $(el).filter(':visible').find('th').each(function() { 
      if ($(this).css('display') != 'none') tmpRow[tmpRow.length] = formatData($(this).html()); 
     }); 
    } 

    row2CSV(tmpRow); 

    // actual data 
    $(el).find('tr').each(function() { 
     var tmpRow = []; 
     $(this).filter(':visible').find('td').each(function() { 
      if ($(this).css('display') != 'none') tmpRow[tmpRow.length] = formatData($(this).html()); 
     }); 
     row2CSV(tmpRow); 
    }); 
    if (options.delivery == 'popup') { 
     var mydata = csvData.join('\n'); 
     return popup(mydata); 
    } else { 
     var mydata = csvData.join('\n'); 
     return mydata; 
    } 

    function row2CSV(tmpRow) { 
     var tmp = tmpRow.join('') // to remove any blank rows 
     // alert(tmp); 
     if (tmpRow.length > 0 && tmp != '') { 
      var mystr = tmpRow.join(options.separator); 
      csvData[csvData.length] = mystr; 
     } 
    } 
    function formatData(input) { 
     // replace " with “ 
     var regexp = new RegExp(/["]/g); 
     var output = input.replace(regexp, "“"); 
     //HTML 
     var regexp = new RegExp(/\<[^\<]+\>/g); 
     var output = output.replace(regexp, ""); 
     if (output == "") return ''; 
     return '"' + output + '"'; 
    } 
    function popup(data) { 
     var generator = window.open('', 'csv', 'height=400,width=600'); 
     generator.document.write('<html><head><title>CSV</title>'); 
     generator.document.write('</head><body >'); 
     generator.document.write('<textArea cols=70 rows=15 wrap="off" >'); 
     generator.document.write(data); 
     generator.document.write('</textArea>'); 
     generator.document.write('</body></html>'); 
     generator.document.close(); 
     return true; 
    } 
}; 

इस तरह html पृष्ठ में js फ़ाइलों में शामिल हैं:

<script type="text/javascript" src="jquery-1.3.2.js" ></script> 

<script type="text/javascript" src="html2CSV.js" ></script> 

टेबल:

<table id="example1" border="1" style="background-color:#FFFFCC" width="0%" cellpadding="3" cellspacing="3"> 

    <tr> 

     <th>Title</th> 

     <th>Name</th> 

     <th>Phone</th> 

    </tr> 

    <tr> 

     <td>Mr.</td> 

     <td>John</td> 

     <td>07868785831</td> 

    </tr> 

    <tr> 

     <td>Miss</td> 

     <td><i>Linda</i></td> 

     <td>0141-2244-5566</td> 

    </tr> 

    <tr> 

     <td>Master</td> 

     <td>Jack</td> 

     <td>0142-1212-1234</td> 

    </tr> 

    <tr> 

     <td>Mr.</td> 

     <td>Bush</td> 

     <td>911-911-911</td> 

    </tr> 

</table> 

निर्यात बटन:

<input value="Export as CSV 2" type="button" onclick="$('#example1').table2CSV({header:['prefix','Employee Name','Contact']})"> 
+0

हाय, मैं वास्तव में शीघ्र और विस्तृत प्रतिक्रिया की सराहना करता हूं। मैंने आपके कोड की कोशिश की लेकिन जावास्क्रिप्ट में कई त्रुटियां दिखाई देती हैं। मैं जावास्क्रिप्ट गुरु नहीं हूं इसलिए मुझे नहीं पता कि इसे कैसे ठीक किया जाए। – fmz

+0

धन्यवाद। लेकिन क्या आप त्रुटियों का उल्लेख कर सकते हैं। और यह भी बताओ कि आपने पहले उपर्युक्त उदाहरण की कोशिश की थी? – AlphaMale

+1

यह मेरे लिए ठीक काम किया। मैं jQuery 1.7.2 का उपयोग कर रहा हूँ। बहुत बहुत धन्यवाद! – michaelok

0

यदि यह ऐसा कभी-कभी ज़रूरत नहीं है, कई फ़ायरफ़ॉक्स एडॉन्स में से एक को आजमाएं क्लिपबोर्ड पर HTML तालिका डेटा कॉपी करना (उदा।, https://addons.mozilla.org/en-US/firefox/addon/dafizilla-table2clipboard/)। उदाहरण के लिए, 'table2clipboard' के लिए ऐड-ऑन:

  1. तालिका में कहीं भी राइट क्लिक करें फ़ायरफ़ॉक्स में फ़ायरफ़ॉक्स में ऐड-ऑन इंस्टॉल
  2. वेब पेज खोलने (तालिका के साथ) और सेव/स्प्रेडशीट निर्यात सीएसवी के रूप में (आवश्यकतानुसार उचित विभाजक वर्ण का चयन करें)
  3. चुनें 'पूरे तालिका कॉपी'
  4. ऐसे लिब्रे ऑफिस Calc जैसे स्प्रैडशीट आवेदन शुरू
  5. स्प्रेडशीट में पेस्ट।
+0

वह केवल फ़ायरफ़ॉक्स के लिए नहीं चाहता ... अच्छा उदाहरण नहीं –

3

यहाँ एक बहुत जल्दी CoffeeScript/jQuery उदाहरण

csv = [] 
for row in $('#sometable tr') 
    csv.push ("\"#{col.innerText}\"" for col in $(row).find('td,th')).join(',') 
output = csv.join("\n") 
1

आप Chrome के लिए एक एक्सटेंशन, कि अच्छी तरह से काम करता है बार मैं इसे की कोशिश की है इस्तेमाल कर सकते हैं है।

https://chrome.google.com/webstore/search/html%20table%20to%20csv?_category=extensions

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

यह मेरी ज़रूरत के लिए पूरी तरह से काम करता है, जो वेब आधारित टैब्यूलर डेटा का कभी-कभी एक स्प्रेडशीट में रूपांतरण करता है जिसमें मैं काम कर सकता हूं।

0

मैं संक्षिप्त में एक साधारण Google स्प्रेडशीट (importHTML) और अजगर के साथ यह करने के लिए (पांडा read_html और to_csv) एक उदाहरण पायथॉन लिपि रास्ता के साथ-साथ कवर किया गया है मेरी तो यहाँ का जवाब: https://stackoverflow.com/a/28083469/1588795

13

मैं यहां उल्लिखित उत्तर का उपयोग करने में सक्षम था: Export to CSV using jQuery and html और इसे आईई में काम करने के लिए एक संशोधन में जोड़ा गया और तालिका में थैड को पकड़ने के लिए टिप्पणियों में उल्लिखित एक और संशोधन।

function exportTableToCSV($table, filename) { 

    var $rows = $table.find('tr:has(td),tr:has(th)'), 

     // Temporary delimiter characters unlikely to be typed by keyboard 
     // This is to avoid accidentally splitting the actual contents 
     tmpColDelim = String.fromCharCode(11), // vertical tab character 
     tmpRowDelim = String.fromCharCode(0), // null character 

     // actual delimiter characters for CSV format 
     colDelim = '","', 
     rowDelim = '"\r\n"', 

     // Grab text from table into CSV formatted string 
     csv = '"' + $rows.map(function (i, row) { 
      var $row = $(row), $cols = $row.find('td,th'); 

      return $cols.map(function (j, col) { 
       var $col = $(col), text = $col.text(); 

       return text.replace(/"/g, '""'); // escape double quotes 

      }).get().join(tmpColDelim); 

     }).get().join(tmpRowDelim) 
      .split(tmpRowDelim).join(rowDelim) 
      .split(tmpColDelim).join(colDelim) + '"', 



     // Data URI 
     csvData = 'data:application/csv;charset=utf-8,' + encodeURIComponent(csv); 

     console.log(csv); 

     if (window.navigator.msSaveBlob) { // IE 10+ 
      //alert('IE' + csv); 
      window.navigator.msSaveOrOpenBlob(new Blob([csv], {type: "text/plain;charset=utf-8;"}), "csvname.csv") 
     } 
     else { 
      $(this).attr({ 'download': filename, 'href': csvData, 'target': '_blank' }); 
     } 
} 

// This must be a hyperlink 
$("#xx").on('click', function (event) { 

    exportTableToCSV.apply(this, [$('#projectSpreadsheet'), 'export.csv']); 

    // IF CSV, don't do event.preventDefault() or return false 
    // We actually need this to be a typical hyperlink 
}); 

मेरी लिंक इस तरह लग रही के साथ ...

<a href="#" id="xx" style="text-decoration:none;color:#000;background-color:#ddd;border:1px solid #ccc;padding:8px;">Export Table data into Excel</a> 

JsFiddle: https://jsfiddle.net/mnsinger/65hqxygo/

+0

ग्रेट उत्तर। साझा करने के लिए धन्यवाद। यह वही है जो मैं चाहता था! – Rymnel

+0

बिल्कुल मुझे क्या चाहिए! धन्यवाद –

+0

यह सुंदर काम करता है! सरल और तेज़! –

1

gene tsai के लिए धन्यवाद, यहाँ मेरी लक्ष्य पृष्ठ पर चलाने के लिए अपने कोड को कुछ संशोधनों है:

csv = [] 
rows = $('#data tr'); 
for(i =0;i < rows.length;i++) { 
    cells = $(rows[i]).find('td,th'); 
    csv_row = []; 
    for (j=0;j<cells.length;j++) { 
     txt = cells[j].innerText; 
     csv_row.push(txt.replace(",", "-")); 
    } 
    csv.push(csv_row.join(",")); 
} 
output = csv.join("\n") 

सुधार:

  • सामान्य जावास्क्रिप्ट for पाश उपयोग
  • यकीन है कि प्रत्येक कोशिका एक अल्पविराम
संबंधित मुद्दे

 संबंधित मुद्दे