2015-11-07 4 views
1

Я создал фабрику в угловой для вызова службы весеннего отдыха, чтобы загрузить файл xls.Как загрузить файл xls с функцией углового и весеннего отдыха?

это моя фабрика:

angular.module('app') 
.factory('SportsbookServiceCustom', function ($http) { 
    return { 
     exportToXLS: function() { 
      return $http.get('api/sportsbooks/downloadXLS').then(function (response) { 
       return response.data; 
      }); 
     } 
    }; 
}); 

У меня есть этот код для моей службы отдыха:

@RequestMapping(value = "/sportsbooks/downloadXLS") 
public void downloadXLS(HttpServletResponse response) { 
    Pageable pageable = new PageRequest(0, 20, Direction.ASC, "id"); 
    Page<Sportsbook> page = sportsbookRepositoryCustom.findAll(pageable, null, null, null); 
    List<Sportsbook> sportsbookList = page.getContent(); 

    HSSFWorkbook workbook = new HSSFWorkbook(); 
    HSSFSheet sheet = workbook.createSheet("Sample sheet"); 

    Map<String, Object[]> data = new HashMap<String, Object[]>(); 
    data.put("1", new Object[] { "Emp No.", "Name", "Salary" }); 
    data.put("2", new Object[] { 1d, "John", 1500000d }); 
    data.put("3", new Object[] { 2d, "Sam", 800000d }); 
    data.put("4", new Object[] { 3d, "Dean", 700000d }); 

    Set<String> keyset = data.keySet(); 
    int rownum = 0; 
    for (String key : keyset) { 
     Row row = sheet.createRow(rownum++); 
     Object[] objArr = data.get(key); 
     int cellnum = 0; 
     for (Object obj : objArr) { 
      Cell cell = row.createCell(cellnum++); 
      if (obj instanceof Date) 
       cell.setCellValue((Date) obj); 
      else if (obj instanceof Boolean) 
       cell.setCellValue((Boolean) obj); 
      else if (obj instanceof String) 
       cell.setCellValue((String) obj); 
      else if (obj instanceof Double) 
       cell.setCellValue((Double) obj); 
     } 
    } 

    if (workbook != null) { 
     // Writing file to outputstream 
     try { 
      InputStream fileInputStream = new ByteArrayInputStream(workbook.getBytes()); 
      OutputStream output = response.getOutputStream(); 
      response.reset(); 
      response.setContentLength((int) (workbook.getBytes().length)); 

      response.setContentType("application/vnd.ms-excel"); 
      response.setHeader("Content-disposition", "attachment;filename=yourFileName.xls"); 

      IOUtils.copyLarge(fileInputStream, output); 
      output.flush(); 
     } 

     catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
    } 
} 

код работает без ошибок, но загрузки файлов не работает. Что такое ошибка?

+0

_ _ "Что такое ошибка?" - Это информация, которую мы ожидаем от вас. Не отправляется ли клиент обратно? Является ли 'response.data' пустым? И что самое главное, что вы хотите сделать с ответом? 'exportToXLS' сам ничего не делает. Если вы хотите, чтобы файл отображался в браузере или сохранялся, просто создайте ссылку, на которую пользователь может щелкнуть. – zeroflagL

ответ

1

Попробуйте с filesaver.js

Пропустите JSon с вашей стороны сервера (здесь весна)

<div id="exportable"> 
    <table width="100%"> 
     <thead> 
      <tr> 
       <th>Name</th> 
       <th>Email</th> 
       <th>DoB</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr ng-repeat="item in items"> 
       <td>{{item.name}}</td> 
       <td>{{item.email}}</td> 
       <td>{{item.dob | date:'MM/dd/yy'}}</td> 
      </tr> 
     </tbody> 
    </table> 
</div> 

в вашем угловом контроллера вы получили детали от сервера eg.below

$scope.items = [{ 
     name: "John Smith", 
     email: "[email protected]", 
     dob: "1985-10-10" 
    }, { 
     name: "Jane Smith", 
     email: "[email protected]", 
     dob: "1988-12-22" 
    }, { 
     name: "Jan Smith", 
     email: "[email protected]", 
     dob: "2010-01-02" 
    }, { 
     name: "Jake Smith", 
     email: "[email protected]", 
     dob: "2009-03-21" 
    }, { 
     name: "Josh Smith", 
     email: "[email protected]", 
     dob: "2011-12-12" 
    }, { 
     name: "Jessie Smith", 
     email: "[email protected]", 
     dob: "2004-10-12" 
    }] 
} 

Добавить кнопку Экспорт

<button ng-click="exportData()"> Export </button> 

Определим функцию в контроллере

$scope.exportData = function() { 
     var blob = new Blob([document.getElementById('exportable').innerHTML], { 
      type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8" 
     }); 
     saveAs(blob, "Report.xls"); 
    }; 

Demo

+0

У меня есть разбивка в моем списке. Как я могу сделать это на стороне сервера? –

+0

Спасибо, что спаси мой день –

Смежные вопросы