2

ユーザーがExcelで頻繁に開くHTMLで生成されたレポートがあります。これは、content-typeを使用することで十分にシンプルに提供されます。ただし、最近、しわのポップアップが表示されました。これらのレポートの一部は、動的なグループ化/並べ替えを実行するために多くのJavascriptを使用しており、ユーザーはこの「完成した」バージョンのレポートをExcelにダウンロードしたいと考えています。私はそのために機能しているJavascript関数を持っています:

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));

IEがwindow.btoaをサポートしていないことがわかったので、それに対処しましたが、Excelでデータを開こうとすると、次のエラーが発生します。

システムコールに渡されるデータ領域が小さすぎます。

メッセージにもかかわらず、これはURIのbase64文字列が長すぎることが原因であると思います(過去にIEが極端に長いURLを受け入れないことを確認し、これが接続されていると信じています)。

それで、IEでこれに使用できる代替方法はありますか?

4

1 に答える 1

2

それを実行するための有効な方法を見つけました:

  1. jQueryを使用してフォームを作成し、ページのすべてのHTMLを収集して(Javascriptの完了後)、サーバーに投稿します
  2. 私のサーバーでは、フォームの投稿を受け取り、「application/msexcel」の戻りタイプで返す関数を作成しました。
  3. レポートページのwindow.loadでこのJavascriptを実行するためのスクリプトを追加しました

かなりハッキーですが、すべてのブラウザでチャンピオンのように機能します

于 2013-02-14T14:15:44.397 に答える