質問編集履歴
3
ソースコードを追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -24,7 +24,137 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
+
```JavaScript
|
28
|
+
|
29
|
+
<!DOCTYPE html>
|
30
|
+
|
31
|
+
<html>
|
32
|
+
|
33
|
+
<head>
|
34
|
+
|
35
|
+
<meta charset="utf-8" />
|
36
|
+
|
37
|
+
<title>sample1</title>
|
38
|
+
|
39
|
+
<script src="js/xlsx.full.min.js"></script>
|
40
|
+
|
41
|
+
<script src="js/FileSaver.min.js"></script>
|
42
|
+
|
43
|
+
</head>
|
44
|
+
|
45
|
+
<body>
|
46
|
+
|
47
|
+
<input type="button" id="xlsx" value="Excelファイル出力" onclick="func1()">
|
48
|
+
|
49
|
+
<script language="javascript" type="text/javascript">
|
50
|
+
|
51
|
+
// 出力するオブジェクト(Array)
|
52
|
+
|
53
|
+
var array1 =
|
54
|
+
|
55
|
+
[
|
56
|
+
|
57
|
+
["apple", "banana", "cherry"],
|
58
|
+
|
59
|
+
[1, 2, 3]
|
60
|
+
|
61
|
+
];
|
62
|
+
|
63
|
+
|
64
|
+
|
27
|
-
|
65
|
+
// SheetをWorkbookに追加する
|
66
|
+
|
67
|
+
// 参照:https://github.com/SheetJS/js-xlsx/issues/163
|
68
|
+
|
69
|
+
function sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ {
|
70
|
+
|
71
|
+
var n = opts && opts.sheet ? opts.sheet : "Sheet1";
|
72
|
+
|
73
|
+
var sheets = {}; sheets[n] = sheet;
|
74
|
+
|
75
|
+
return { SheetNames: [n], Sheets: sheets };
|
76
|
+
|
77
|
+
}
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
// ArrayをWorkbookに変換する
|
82
|
+
|
83
|
+
// 参照:https://github.com/SheetJS/js-xlsx/issues/163
|
84
|
+
|
85
|
+
function aoa_to_workbook(data/*:Array<Array<any> >*/, opts)/*:Workbook*/ {
|
86
|
+
|
87
|
+
return sheet_to_workbook(XLSX.utils.aoa_to_sheet(data, opts), opts);
|
88
|
+
|
89
|
+
}
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
// stringをArrayBufferに変換する
|
94
|
+
|
95
|
+
// 参照:https://stackoverflow.com/questions/34993292/how-to-save-xlsx-data-to-file-as-a-blob
|
96
|
+
|
97
|
+
function s2ab(s) {
|
98
|
+
|
99
|
+
var buf = new ArrayBuffer(s.length);
|
100
|
+
|
101
|
+
var view = new Uint8Array(buf);
|
102
|
+
|
103
|
+
for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
|
104
|
+
|
105
|
+
return buf;
|
106
|
+
|
107
|
+
}
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
function func1() {
|
112
|
+
|
113
|
+
// 書き込み時のオプションは以下を参照
|
114
|
+
|
115
|
+
// https://github.com/SheetJS/js-xlsx/blob/master/README.md#writing-options
|
116
|
+
|
117
|
+
var write_opts = {
|
118
|
+
|
119
|
+
type: 'binary'
|
120
|
+
|
121
|
+
};
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
// ArrayをWorkbookに変換する
|
126
|
+
|
127
|
+
var wb = aoa_to_workbook(array1);
|
128
|
+
|
129
|
+
var wb_out = XLSX.write(wb, write_opts);
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
// WorkbookからBlobオブジェクトを生成
|
134
|
+
|
135
|
+
// 参照:https://developer.mozilla.org/ja/docs/Web/API/Blob
|
136
|
+
|
137
|
+
var blob = new Blob([s2ab(wb_out)], { type: 'application/octet-stream' });
|
138
|
+
|
139
|
+
|
140
|
+
|
141
|
+
// FileSaverのsaveAs関数で、xlsxファイルとしてダウンロード
|
142
|
+
|
143
|
+
// 参照:https://github.com/eligrey/FileSaver.js/
|
144
|
+
|
145
|
+
saveAs(blob, 'myExcelFile.xlsx');
|
146
|
+
|
147
|
+
}
|
148
|
+
|
149
|
+
</script>
|
150
|
+
|
151
|
+
</body>
|
152
|
+
|
153
|
+
</html>
|
154
|
+
|
155
|
+
```
|
156
|
+
|
157
|
+
|
28
158
|
|
29
159
|
(こちらのソースコードでも同じ挙動が起こります)
|
30
160
|
|
@@ -32,7 +162,7 @@
|
|
32
162
|
|
33
163
|
https://techacademy.jp/magazine/21073
|
34
164
|
|
35
|
-
(jsファイル等は最新バージョン
|
165
|
+
(jsファイル等は最新バージョンをダウンロードしており、iPhone6以外では正常な動作を確認しています)
|
36
166
|
|
37
167
|
|
38
168
|
|
2
jsファイルの適用バージョンについて追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -32,6 +32,8 @@
|
|
32
32
|
|
33
33
|
https://techacademy.jp/magazine/21073
|
34
34
|
|
35
|
+
(jsファイル等は最新バージョンで適用しており、iPhone6以外では正常な動作を確認しています)
|
36
|
+
|
35
37
|
|
36
38
|
|
37
39
|
### 試したこと
|
1
iPhoneのバージョンについて追記しました
test
CHANGED
File without changes
|
test
CHANGED
@@ -9,6 +9,8 @@
|
|
9
9
|
### 発生している問題
|
10
10
|
|
11
11
|
|
12
|
+
|
13
|
+
環境はiPhone6(iOS12.44)です。
|
12
14
|
|
13
15
|
safariではunknown、chromeではdocumentとファイル名が書き換えられます。
|
14
16
|
|
@@ -36,4 +38,4 @@
|
|
36
38
|
|
37
39
|
|
38
40
|
|
39
|
-
Androidで試した場合は問題なくファイルをダウンロードできました。
|
41
|
+
iPhone7(iOS13.3)とAndroidで試した場合は問題なくファイルをダウンロードできました。
|