2013-09-06 7 views
6

से एक्सेल डाउनलोड करने योग्य फ़ाइल लौटें तो मेरे पास एक स्प्रिंग नियंत्रक है, और मैं एक एक्सेल फ़ाइल बनाना चाहता हूं और इसे वापस कर सकता हूं ताकि यह ब्राउज़र द्वारा डाउनलोड किया जा सके।वसंत

मैं जेएक्ससेलएपी का उपयोग कर रहा हूं।

यह मेरा नियंत्रक कोड

@RequestMapping(value="/excel/cols/{colString}/rows/{rowString}/", method = RequestMethod.GET) 
@ResponseBody 
public ResponseEntity<String> exportExcel(HttpServletResponse response, 
    @PathVariable List<String> colString, 
    @PathVariable List<String> rowString) throws JSONException, IOException, WriteException { 
    WritableWorkbook workbook = Workbook.createWorkbook(new File("exported.xls")); 
    WritableSheet sheet = workbook.createSheet("Exported",0); 
    String[] cols = colString.get(0).split(","); 
    String[] rows = rowString.get(0).split(","); 
    for(int i = 0; i < cols.length;i++){ 
     Label label = new Label(i,0, cols[i]); 
     sheet.addCell(label); 
    } 
    int excelCol = 0; 
    int excelRow = 1; 
    for(int i = 0; i < rows.length;i++){ 
     Label label = new Label(excelCol,excelRow, rows[i]); 
     sheet.addCell(label); 
     excelCol++; 
     if((i+1) % cols.length == 0){ 
      excelCol = 0; 
      excelRow++; 
     } 
    } 
    workbook.write(); 
    workbook.close(); 
    return null; 
} 

मैं ऐसा कैसे करते है? मुझे संदेह है कि कुछ सामग्री शीर्षलेख है जिसे मैं सेट कर सकता हूं। मुझे पता है कि स्प्रिंग के सार एक्सेल व्यू क्लास का उपयोग करने के लिए एक तरीका है, लेकिन क्या कोई आसान तरीका है?

उत्तर

8

आपको Content-Disposition शीर्षलेख सेट करने की आवश्यकता है।

response.setHeader("Content-disposition","attachment; filename=" + yourFileName); 

और सीधे OutputStream प्रतिक्रिया के लिए अपने बाइट्स लिखें।

File xls = new File("exported.xls"); // or whatever your file is 
FileInputStream in = new FileInputStream(xls); 
OutputStream out = response.getOutputStream(); 

byte[] buffer= new byte[8192]; // use bigger if you want 
int length = 0; 

while ((length = in.read(buffer)) > 0){ 
    out.write(buffer, 0, length); 
} 
in.close(); 
out.close(); 

ऊपर अपेक्षाकृत पुराना है। आप अब ResponseEntityFileSystemResource के साथ बना सकते हैं। एक ResourceHttpMessageConverter तब बाइट्स की प्रतिलिपि बनायेगा, जैसा कि मैंने ऊपर दिया है, आपके लिए। स्प्रिंग एमवीसी आपको सर्वलेट विनिर्देश से इंटरफेस के साथ बातचीत करने के बजाए आपके लिए आसान बनाता है।

+0

मैं बाइट्स कैसे लिखूं? – praks5432

+0

@ praks5432 फ़ाइल से बाइट पढ़ें और उन्हें आउटपुटस्ट्रीम प्रतिक्रिया के लिए लिखें। –

+0

तो क्या यह कार्यपुस्तिका वस्तु पर किया जा रहा है? – praks5432