2013-09-04 2 views
4

Я использую функцию jQuery для экспорта моей таблицы HTML в Excel. Это функция, которую я видел, используется в большом количестве других мест, и она отлично работает для меня в Chrome:tableToExcel jQuery вызывает странную ошибку в IE

var tableToExcel = (function() { 
      var uri = 'data:application/vnd.ms-excel;base64,' 
, 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"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>' 
, base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) } 
, format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) } 
      return function(table, name) { 
       if (!table.nodeType) table = document.getElementById(table) 
       var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML } 
       window.location.href = uri + base64(format(template, ctx)) 
      } 
     })() 

Однако в IE 10, эта строка: «window.location.href = Uri + base64 (format (template, ctx)) »- это ошибка:« SCRIPT122: область данных, переданная системному вызову, слишком мала ».

Я немного поработал, и по какой-то причине IE не может обрабатывать длину URI. Есть ли обходные пути?

+0

решается здесь: - http://stackoverflow.com/questions/27039474/how-to-export-datatables-table-to-excel-which-works-in-ie-as-well/27297238 # 27297238 – Alok

ответ

4

Вы, мой друг, испытываете большие неприятности (шутите)!

Основная проблема со старыми версиями IE - поддержка кодировки base64, которую можно позаботиться об использовании this Javascript library.

Но основная проблема - это схема URL-адресов данных, которая доступна в браузерах на основе WebKit, и вы можете использовать ее в IE на основе RCA 2397. Она имеет ограниченную функциональность и в основном работает с изображениями и css. Here - полезная ссылка. Также не забудьте прочитать страницу Википедии для Data URL Scheme

** Теперь поговорим об обходных решениях! **

Главное решение заключается в написании сценария на стороне сервера, который создает файл Excel, и вы просто используете вызов Ajax, чтобы отправить его обратно пользователю! вы даже можете сохранить этот файл в Файловой системе и просто отправить адрес этого файла.

Хотя если вы в основном фокусируетесь на стороне клиента, и вам действительно нужно работать с IE, вы должны использовать библиотеку загрузки, желательно те, которые имеют swf (поддержка Flash), вот что я еще не использовал, хотя я надеюсь получить результат, который вы ищете. Есть претензии, что downloadify делает это хорошо и дайте мне знать, как это происходит!

+0

Спасибо за очень тщательный ответ! Я попробую некоторые из этих методов, когда вернусь к этому проекту на следующей неделе, и дам дальнейшие отзывы оттуда. – JMax2012

+0

Я все еще не мог заставить его работать, даже с новой библиотекой Javascript. Я закончил тем, что просто написал две разные функции export-to-excel (один с использованием ActiveX) и вызвал их на основе типа браузера. – JMax2012

+0

На самом деле я попробовал, и это сработало! Я использовал Downloadify из github. Код, который я написал, скоро появится в прямом эфире, я могу поделиться ссылкой с вами. – pouyanghasemi

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