前提・実現したいこと
各種スマートフォンのブラウザにて加速度を測定して測定結果をexcelファイルで出力し、そのままexcelアプリで閲覧したいです。
発生している問題
環境はiPhone6(iOS12.44)です。
safariではunknown、chromeではdocumentとファイル名が書き換えられます。
(拡張子も無くなりますがパソコン上で拡張子を変更すると無事に閲覧できます)
そのためプログラムで設定した名前でダウンロードすることができません。
該当のソースコード
JavaScript
1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset="utf-8" /> 5 <title>sample1</title> 6 <script src="js/xlsx.full.min.js"></script> 7 <script src="js/FileSaver.min.js"></script> 8</head> 9<body> 10 <input type="button" id="xlsx" value="Excelファイル出力" onclick="func1()"> 11 <script language="javascript" type="text/javascript"> 12 // 出力するオブジェクト(Array) 13 var array1 = 14 [ 15 ["apple", "banana", "cherry"], 16 [1, 2, 3] 17 ]; 18 19 // SheetをWorkbookに追加する 20 // 参照:https://github.com/SheetJS/js-xlsx/issues/163 21 function sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ { 22 var n = opts && opts.sheet ? opts.sheet : "Sheet1"; 23 var sheets = {}; sheets[n] = sheet; 24 return { SheetNames: [n], Sheets: sheets }; 25 } 26 27 // ArrayをWorkbookに変換する 28 // 参照:https://github.com/SheetJS/js-xlsx/issues/163 29 function aoa_to_workbook(data/*:Array<Array<any> >*/, opts)/*:Workbook*/ { 30 return sheet_to_workbook(XLSX.utils.aoa_to_sheet(data, opts), opts); 31 } 32 33 // stringをArrayBufferに変換する 34 // 参照:https://stackoverflow.com/questions/34993292/how-to-save-xlsx-data-to-file-as-a-blob 35 function s2ab(s) { 36 var buf = new ArrayBuffer(s.length); 37 var view = new Uint8Array(buf); 38 for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; 39 return buf; 40 } 41 42 function func1() { 43 // 書き込み時のオプションは以下を参照 44 // https://github.com/SheetJS/js-xlsx/blob/master/README.md#writing-options 45 var write_opts = { 46 type: 'binary' 47 }; 48 49 // ArrayをWorkbookに変換する 50 var wb = aoa_to_workbook(array1); 51 var wb_out = XLSX.write(wb, write_opts); 52 53 // WorkbookからBlobオブジェクトを生成 54 // 参照:https://developer.mozilla.org/ja/docs/Web/API/Blob 55 var blob = new Blob([s2ab(wb_out)], { type: 'application/octet-stream' }); 56 57 // FileSaverのsaveAs関数で、xlsxファイルとしてダウンロード 58 // 参照:https://github.com/eligrey/FileSaver.js/ 59 saveAs(blob, 'myExcelFile.xlsx'); 60 } 61 </script> 62</body> 63</html>
(こちらのソースコードでも同じ挙動が起こります)
↓参考にしたサイト
https://techacademy.jp/magazine/21073
(jsファイル等は最新バージョンをダウンロードしており、iPhone6以外では正常な動作を確認しています)
試したこと
iPhone7(iOS13.3)とAndroidで試した場合は問題なくファイルをダウンロードできました。

回答1件
あなたの回答
tips
プレビュー