2016-09-02 12 views
0

ヘルプが必要です。 Javascript/Angular.js.Actuallyを使用してダウンロード中にファイルの名前を変更する必要があります。私は1つの機能をHTMLテーブルをExcelシートに変換してダウンロードしています。私は以下のコードを説明しています。Javascriptを使用してダウンロード中にユーザーがファイルの名前を変更する方法

$scope.generateExcelSheet=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]; }) } 
       var table='exportable'; 
       var name='Report'; 
      // console.log('table',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)); 

    } 

ファイルがダウンロードされる前に、ファイルの名前を変更してダウンロードするように求められます。私を助けてください。

答えて

0

の代わりにあなたのデータのURLにウィンドウの位置を変更し、<a>要素を作成します(これはDOMの一部である必要はありません、それはdocument.createElement('a')を使用するのに十分だ)、base64でエンコードされたURLにhrefプロパティにURLを入れて、気になるファイル名を付けてdownload属性を追加します。次に、作成したアンカーにclick()を呼び出します。

これはsupports the download attributeのブラウザで動作します。これはIE11(Edgeで動作しますが)とSafariを除いてほとんどの最新のブラウザを意味します。

+0

私のコードであなたのアイデアを熟考できますか?私は完全にはっきりしていない。 – subhra

+0

どの場所にコメントが必要ですか?あなたはURLを作成します( 'uri + base64(format(template、ctx));')。 'window.location'に代入するのではなく、私が記述した手順を実行します。アンカーを作成し、そのhrefを設定し、ダウンロードを設定し、click()を呼び出します。 – fdreger

+0

OK、それをやりましょう。 – subhra

関連する問題