2013-02-12 4 views
2

사용자가 Excel에서 자주 열리는 HTML로 생성 된 보고서가 있습니다. 우리는 콘텐츠 유형을 사용하여 충분히 간단하게 처리합니다. 그러나 최근에는 주름 팝업이 나타났습니다. 일부 보고서는 많은 자바 스크립트를 사용하여 동적 그룹화/정렬을 수행하며 사용자는이 "완성 된"버전의 보고서를 Excel로 다운로드하려고합니다. 나는 그것에 대해 작동하는 자바 스크립트 기능이 : 나는 IE가 window.btoa를 지원하지 않는 것으로 확인자바 스크립트를 통해 Excel에서 HTML 페이지 열기

var uri = 'data:application/vnd.ms-excel;base64,'; 
var template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40">'; 
template += '<head></head>'; 
template += '<body><table>{table}</table></body></html>'; 
var base64 = function(s) { 
    return window.btoa(unescape(encodeURIComponent(s))); 
}; 
var format = function(s, c) { 
    return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }); 
}; 
var ctx = {worksheet: name || 'Worksheet', table: daBody}; 
window.location.href = uri + base64(format(template, ctx)); 

을, 그래서 나는 것을 해결하지만, 지금은 Excel에서 데이터를 열려고 시도 할 다음과 같은 오류가 발생합니다 :

시스템 호출에 전달 된 데이터 영역이 너무 작습니다.

메시지에도 불구하고 URI가 너무 길어서 URI의 base64 문자열로 인해 발생한다고 생각합니다. (예전에는 IE가 매우 긴 URL을 허용하지 않으며이 URL이 연결되어 있다고 생각합니다.).

그래서 누구나 IE에서 사용할 수있는 대체 방법이 있습니까?

+0

URL/I (특히 IE 사용시)의 실제 제한은 약 2k 자입니다. http://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url –

+0

수정 ... 따라서 대체 전화가 필요합니다. 나는 ActiveX를 조사했지만, 다양한 웹 사용자에게 서비스를 제공하고 ActiveX를 허용하고 신뢰할 수있는 목록에 우리를 추가한다고 주장하고 있습니다. – GarrettMurphy

+0

임시 해결책으로 DOM에 양식을 추가하고 POST를 사용하여 테이블 데이터를 서버를 통해 클라이언트로 보낼 수 있습니다. –

답변

2

가 그 일에 대해가는 올바른 길을 찾을 수 : 양식을 만들 jQuery를 사용

  1. 이 페이지의 모든 HTML을 수집을 ( 후 자바 스크립트 완료) 내 서버
  2. 에에 게시 내 서버, 나는 양식 게시물에받는 함수를 만들어 단지 보고서 페이지
의 window.load에이 자바 스크립트를 실행하는 "응용 프로그램/msexcel"
  • 추가 된 스크립트의 반환 형식으로 반환

    꽤 해킹이지만 모든 브라우저에서 챔피언처럼 작동합니다.

  • +0

    해결할 비슷한 문제가 있습니다. ASP.NET MVC4를 사용하여 변환 된 xml을 Excel로 돌려 보내서 Excel에 표시하려고합니다. Chrome 및 FF에서 작동하지만 IE 또는 Safari를 사용할 수 없습니다. Javascript (FF/Chrome의 경우)에서 document.createElement ("a")를 다운로드하고 해당 다운로드를 파일 이름과 href를 "data : ....."URI로 설정합니다. 그러면 열기/저장 대화 상자가 열리고 거의 모든 것이 잘됩니다. [파일 형식에 대한 FF I Excel 프롬프트가 확장명과 다릅니다]. – sheir

    +0

    나는 ASP.NET MVC4/VS2012에서 해결할 유사한 문제를 가지고 있는데, XML을 (ajax 성공 함수를 통해) 다시 전송하고이를 Excel에서 표시하려고합니다. 즉, 연결 프로그램/파일 저장 대화 상자를 엽니 다. Chrome 및 FF [ "a"요소를 "다운로드"속성과 함께 사용]에서 작동하지만 IE 또는 Safari를 사용할 수 없습니다. IE/Safari의 경우 window.open ('data : ....')을 수행하려고했습니다. 사파리는 아무런 문제가 없습니다. IE10에서 새 탭을 열 수는 있지만 주소 표시 줄에는 application/vnd.ms-excel이라는 데이터 만 표시됩니다. 어떤 도움이 필요합니까? – sheir

    +0

    내 솔루션 게시 위치 : \ – sheir

    관련 문제