2011-06-17 13 views
7

जेएसपी पेज से, मुझे एक्सेल फ़ाइल ब्राउज़ करने और सिस्टम पर फ़ाइल चुनने के बाद, मुझे उस एक्सेल फ़ाइल सामग्री को पढ़ने और अपना फॉर्म भरने की आवश्यकता है।क्लाइंट साइड पर एक्सेल फ़ाइल सामग्री कैसे पढ़ा जाए?

वर्तमान में मैंने नीचे कोड के साथ प्रयास किया है, लेकिन यह केवल IE में काम कर रहा है जिसमें ActiveXObject के लिए IE इंटरनेट विकल्पों में कुछ बदलाव हैं। यह बाकी ब्राउज़रों में काम नहीं कर रहा है।

<script> 
    function mytest2() { 
     var Excel; 
     Excel = new ActiveXObject("Excel.Application"); 
     Excel.Visible = false; 
     form1.my_textarea2.value = Excel.Workbooks.Open("C:/Documents and Settings/isadmin/Desktop/test.xlsx").ActiveSheet.Cells(1,1).Value; 
     Excel.Quit(); 
    } 
</script> 

कृपया कुछ समाधान सुझाएं ताकि यह सभी ब्राउज़रों में काम करे।

उत्तर

0

ब्राउज़र में जावास्क्रिप्ट के माध्यम से किसी भी फ़ाइल को पढ़ने/लिखना आम तौर पर संभव नहीं है। तो बिना किसी अतिरिक्त प्लग-इन के आप ब्राउज़र से एक्सेल फ़ाइलों को पढ़ने/लिखने में सक्षम नहीं होंगे। Excel की ActiveX ऑब्जेक्ट्स आपको ऐसा करने देती हैं, लेकिन केवल IE ActiveX ऑब्जेक्ट्स का समर्थन करती है।

अन्य ब्राउज़रों के लिए अन्य प्लगइन्स भी हो सकते हैं, लेकिन मुझे किसी के बारे में पता नहीं है।

पहली जगह में, आप ऐसा क्यों करना चाहते हैं? क्या आप एक उपयोग केस दे सकते हैं? शायद आप जो भी कोशिश कर रहे हैं उससे बेहतर विकल्प उपलब्ध हैं।

अद्यतन

आप एक्सेल सर्वर से फ़ाइल और सर्वर साइड में एक्सेल के पढ़ने (उदाहरण के लिए एक सर्वलेट में) पास करना होगा।

आप एक बहुखण्डीय रूप
<form name="myForm" action="myServlet" enctype="multipart/form-data" method="post">

सर्वर साइड पर भीतर JSP में एक <input type='file'> का उपयोग करना होगा, आप Apache Commons File Upload उपयोग कर सकते हैं।

मैं यह सब एक बार जब आप फ़ाइल (या उस पर एक धारा) आप का उपयोग करते हुए कहते हैं, Apache POI HSSF/XSSF फ़ाइल को पार्स और फिर एक डेटाबेस के लिए डेटा को अपडेट करने या इसे वापस एक JSP

+0

परियोजना आवश्यकता - उपयोगकर्ता Excel स्वचालित रूप से सभी jsp पेज से अपने सिस्टम पर फाइल और उसके बाद का चयन करने के है फार्म फ़ील्ड आबादी मिलनी चाहिए। कृपया सुझाव दें कि मैं यह कैसे कर सकता हूं? – Jyoti

+0

@ ज्योति मैंने जवाब – Nivas

+0

अद्यतन किया है "ब्राउज़र में जावास्क्रिप्ट के माध्यम से किसी भी फ़ाइल को पढ़ने/लिखना आम तौर पर संभव नहीं है।" तो यह संभव है, लेकिन एक प्लगइन आपकी सबसे अच्छी शर्त है? लेकिन आप जो कुछ भी पसंद करते हैं वह कर सकते हैं और गंदी काम करने के लिए सेवा का उपयोग करने से अटक नहीं गए हैं? हालांकि xlsx.js इसे भयानक डीएक्स के साथ पूरा करता है, यह बहुत सारे शोध के साथ किया जा सकता है। मैंने काम करने के कई उदाहरण देखे हैं। – Urasquirrel

1

को पारित कर सकते हैं समय - मेरे प्रोटोटाइप को हितधारकों को एक्सेल को संशोधित करने और इसे बिना किसी सर्वर के एचटीएमएल प्रोटोटाइप को पॉप्युलेट करने के लिए डिज़ाइन किया गया है।

  1. एक्सेल एक्सएमएल के रूप में सहेजें
  2. लोड एक्सएमएल AJAX के माध्यम से और संरचना

() यहाँ एक आसान बटन मैक्रो मैं अपने एक्सेल फाइल में डाल दिया है, दर्द रहित बचत की इजाजत दी पार्स आउट

Sub SaveAndExportXML() 
     Dim fname As String 
     Dim fnamexml As String 
     fname = ThisWorkbook.FullName 
     fnamexml = Replace(fname, ".xls", ".xml", 1, 1, vbTextCompare) 

     If MsgBox("Will save the following (runtime XML and source XLS) files: " & vbNewLine & "XML: " & fnamexml & vbNewLine & "Src: " & fname & vbNewLine & vbNewLine & "Ok? If so, please click Yes here and on the next 3 prompts...", vbYesNo) = vbNo Then Exit Sub 
     ActiveWorkbook.SaveAs Filename:=fnamexml, FileFormat:=xlXMLSpreadsheet, ReadOnlyRecommended:=False, CreateBackup:=False 
     're-save as xls: 
     ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, CreateBackup:=False 
    End Sub 

() पार्स करने जेएस है अधिक complicat: एक्सएमएल (और पुनः बचत xls के रूप में) के रूप में एड लेकिन आधार सरल है। वर्कशीट, टेबल, पंक्ति, सेल और डेटा जैसे एक्सएमएल ऑब्जेक्ट्स होंगे। एसएस नामक एक एक्सएमएल विशेषता भी है: इंडेक्स मुझे कभी-कभी आसान लगता है।

8

एक xlsx स्प्रेडशीट एक ज़िप फ़ाइल है जिसमें xml फ़ाइलों का समूह है। zip.js जैसे कुछ का उपयोग करके, आप एक्सएमएल फाइलों को निकाल सकते हैं और ब्राउज़र में उन्हें पार्स कर सकते हैं। xlsx.js यह करता है। Here's my simple example।यहाँ सुविधा के लिए कॉपी किया गया:

/* 
    Relies on jQuery, underscore.js, Async.js (https://github.com/caolan/async), and zip.js (http://gildas-lormeau.github.com/zip.js). 
    Tested only in Chrome on OS X. 

    Call xlsxParser.parse(file) where file is an instance of File. For example (untested): 

    document.ondrop = function(e) { 
     var file = e.dataTransfer.files[0]; 
     excelParser.parse(file).then(function(data) { 
      console.log(data); 
     }, function(err) { 
      console.log('error', err); 
     }); 
    } 
*/ 

xlsxParser = (function() { 
    function extractFiles(file) { 
     var deferred = $.Deferred(); 

     zip.createReader(new zip.BlobReader(file), function(reader) { 
      reader.getEntries(function(entries) { 
       async.reduce(entries, {}, function(memo, entry, done) { 
        var files = ['xl/worksheets/sheet1.xml', 'xl/sharedStrings.xml']; 
        if (files.indexOf(entry.filename) == -1) return done(null, memo); 

        entry.getData(new zip.TextWriter(), function(data) { 
         memo[entry.filename.split('/').pop()] = data; 
         done(null, memo); 
        }); 
       }, function(err, files) { 
        if (err) deferred.reject(err); 
        else deferred.resolve(files); 
       }); 
      }); 
     }, function(error) { deferred.reject(error); }); 

     return deferred.promise(); 
    } 

    function extractData(files) { 
     var sheet = $(files['sheet1.xml']), 
      strings = $(files['sharedStrings.xml']), 
      data = []; 

     var colToInt = function(col) { 
      var letters = ["", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]; 
      var col = $.trim(col).split(''); 

      var n = 0; 

      for (var i = 0; i < col.length; i++) { 
       n *= 26; 
       n += letters.indexOf(col[i]); 
      } 

      return n; 
     }; 

     var Cell = function(cell) { 
      cell = cell.split(/([0-9]+)/); 
      this.row = parseInt(cell[1]); 
      this.column = colToInt(cell[0]); 
     }; 

     var d = sheet.find('dimension').attr('ref').split(':'); 
     d = _.map(d, function(v) { return new Cell(v); }); 

     var cols = d[1].column - d[0].column + 1, 
      rows = d[1].row - d[0].row + 1; 

     _(rows).times(function() { 
      var _row = []; 
      _(cols).times(function() { _row.push(''); }); 
      data.push(_row); 
     }); 

     sheet.find('sheetData row c').each(function(i, c) { 
      var $cell = $(c), 
       cell = new Cell($cell.attr('r')), 
       type = $cell.attr('t'), 
       value = $cell.find('v').text(); 

      if (type == 's') value = strings.find('si t').eq(parseInt(value)).text(); 

      data[cell.row - d[0].row][cell.column - d[0].column] = value; 
     }); 

     return data; 
    } 

    return { 
     parse: function(file) { 
      return extractFiles(file).pipe(function(files) { 
       return extractData(files); 
      }); 
     } 
    } 
})(); 
1

आप लोड और most modern browsers में फ़ाइल क्लाइंट पक्ष खोलने HTML5 File API

का उपयोग कर सकते हैं जब आप फ़ाइल को आप एक पुस्तकालय के साथ सामग्रियों को पार्स कर सकते हैं कि उत्पादन प्रारूपों उत्कृष्टता कुछ का समर्थन करता है भरी हुई है (जैसे सीएसवी/एक्सएलएसएक्स)।

यहाँ कुछ विकल्प होते हैं ...

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