2013-09-20 3 views
1

У меня возникли проблемы с экспортом моей таблицы html в Excel, вот что я пробовал.Экспорт таблицы Html в Excel - все браузеры

window.open('data:application/vnd.ms-excel,' + encodeURIComponent($('#myTableDiv').html())); 

Удивительно работает на хроме, но не работает в Internet Explorer; Просто перейдите на новую вкладку с данными в URL-адресе (проверено на IE10). Поэтому я попытался проверить IE и затем использовать метод ActiveXObject для браузеров IE.

var objExcel = new ActiveXObject ("Excel.Application"); 

Но это дало мне ошибки при создании объекта, и у меня есть Excel 2013 на моем компьютере. Этот метод не кажется очень надежным.

Итак, теперь я хочу попробовать его на языке сервера (JSP).

Вот моя текущая попытка.

$('.toExcel').click(function(){ 
    $.post('controllers/excel.jsp?tableHTML=' + encodeURIComponent($('#myTableDiv').html()), function(data) { 

    }); 
}); 

И мой JSP

<!DOCTYPE html> 
<%@ page import="java.io.PrintWriter" %> 
<%@ page contentType="application/excel" language="java" %> 
<%  
    response.reset(); 
    response.setHeader("Content-Type", "application/vnd.ms-excel"); 
    response.setHeader("Content-Disposition", "attachment;filename=\"report.xls\""); 
    PrintWriter op = response.getWriter(); 
    String CSV = request.getParameter("tableHTML"); 
    op.write(CSV); 
%> 

Я знаю, что есть по крайней мере несколько проблем с этим.

  1. При отправке на адрес нет приглашения скачать.
  2. только столько HTML может поместиться в качестве параметра

Когда я перейти к URL запроса в хроме он загружает файл. Когда я перейти к URL запроса в IE 10, я получаю следующее сообщение об ошибке:

HTML1527: DOCTYPE expected. The shortest valid doctype is "<!DOCTYPE html>". 
    excel.jsp, line 1 character 1 

Может кто-нибудь помочь мне с надежным решением, которое будет работать для всех браузеров?

+0

ли вы получить в любом месте с этим? –

+0

@VincePettit Ну, я нашел решение, используя 'jsp' серверный язык. Но не нашли строго «клиентской стороны» решение, которое работает. Вас интересует решение 'jsp'? – Trevor

+0

Да, пожалуйста, если бы вы могли сообщить мне об обходном пути, который был бы замечательным. –

ответ

0

одно решение с помощью JSP и JavaScript

  1. Экспорт в Excel функция JS. Pass in table ID

    function exportToExcel(intable){ 
        intable = document.getElementById(intable); 
        this.table = intable.cloneNode(true); 
        var cform = document.createElement("form"); 
        cform.style.display = "none"; 
        cform.setAttribute("method","POST"); 
        cform.setAttribute("action","exporttoexcel.jsp"); 
        cform.setAttribute("name","ExcelForm"); 
        cform.setAttribute("id","ExcelForm"); 
        cform.setAttribute("enctype","MULTIPART/FORM-DATA"); 
        cform.encoding="multipart/form-data"; 
        var ta = document.createElement("textarea"); 
        ta.name = "ExcelTable"; 
        var tabletext = this.table.outerHTML; 
        ta.defaultValue = tabletext; 
        ta.value = tabletext; 
        cform.appendChild(ta); 
        intable.parentNode.appendChild(cform); 
        cform.submit(); 
        //clean up 
        ta.defaultValue = null; 
        ta = null; 
        tabletext = null; 
        this.table = null; 
    } 
    
  2. И code для exporttoexcel.jsp

    <%@ page import="java.util.*"%> 
    <%@ page import="java.io.*" %> 
    <%@ page import="org.apache.commons.fileupload.*" %> 
    <%@ page import="org.apache.commons.fileupload.disk.*" %> 
    <%@ page import="org.apache.commons.fileupload.servlet.*" %> 
    <% 
    response.setContentType("application/vnd.ms-excel"); 
    response.setHeader("Content-Disposition","attachment; filename=" + "MyReport.xls"); 
    boolean isMultipart = ServletFileUpload.isMultipartContent(request); 
    Iterator pit = null; 
    DiskFileItem dfi = null; 
    String line = ""; 
    if(isMultipart){ 
        //  Create a factory for disk-based file items 
        FileItemFactory factory = new DiskFileItemFactory(); 
    
        //  Create a new file upload handler 
        ServletFileUpload upload = new ServletFileUpload(factory); 
    
        //  Parse the request 
        File f = null; 
        dfi = null; 
        List items = null; 
        items = upload.parseRequest(request); 
        pit = items.iterator(); 
    
    } 
    if(isMultipart){ 
        while(pit.hasNext()){ 
         dfi = (DiskFileItem)pit.next(); 
         String name = dfi.getFieldName(); 
         if (name.equalsIgnoreCase("ExcelTable")){ 
          InputStream is = dfi.getInputStream(); 
          BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
          while((line = br.readLine()) != null){ 
           out.println(line); 
          }         
         } 
        } 
        }else{ 
        Enumeration params = request.getParameterNames(); 
        while(params.hasMoreElements()){ 
         String par = (String)params.nextElement(); 
         out.println(par+"<br>"); 
         out.println(request.getParameter(par)); 
        } 
        } 
    %> 
    
1

Я расскажу вам простое решение

добавить одну кнопки на странице, где таблица

<button class="btn btn-success">Export Data to Excel</button> 

Теперь добавьте ниже приведенные сценарии к той же странице

<script src="js/jquery.table2excel.js"></script> 
<script> 
     $(function() { 
     $("button").click(function() { 
      $("#tableID").table2excel({ 
      exclude: ".noExl", 
      name: "Excel Document Name" 
      }); 
     }); 
    }); 
</script> 

Не забудьте скачать jquery.table2excel.js и добавить в папку Js

+0

вы можете добавить ссылку или javascript для файла jquery.table2excel.js? Также вы знаете, работает ли это на IE 9 и выше? – Trevor

+0

Да, вместо кнопки у нас может быть ссылка с помощью : tag.Добавить, что имя или имя класса и в функции скрипта вместо кнопки вызывают эту ссылку с именем или классом. –

+0

Извините, что я имел в виду ссылку на «загружать jquery. table2excel.js ", о котором вы упоминаете. – Trevor

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