質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

2022閲覧

Sheet.jsを利用したサイトから出力したxlsxファイルが破損している

abc1222

総合スコア24

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2022/01/18 13:07

前提・実現したいこと

サイト上にエクセルのダウンロードボタンを設置したいと思いSheet.jsを勉強中です。
記載のようなコードを書くと、エクセルファイルのダウンロードまでは出来ているのですが、ファイルを開こうとしてもデータが破損していて開けません。
何が原因なのでしょうか。

発生している問題・エラーメッセージ

ファイル形式、または拡張子が正しくありません。 ファイルが破損しておらず、ファイル拡張子とファイル形式が一致していることを確認してください。

ファイル形式はXLSXになっており、拡張子も.xlsxになっているため、破損していることが原因だと思うのですが、何が良くないのか、ファイルが開けないので分かりません。

該当のソースコード

html

1<input type="button" id="xlsx" value="Excelファイル出力" onclick="doit()">

Javascript

1function doit() { 2 let wsData = [ 3 ["ヘッダ1", "ヘッダ2"], 4 ["値1", "値2"] 5 ] 6 let wb = XLSX.utils.book_new(); 7 let sheet = XLSX.utils.aoa_to_sheet(wsData); 8 XLSX.utils.book_append_sheet(wb, sheet, 'テストシート'); 9 10 var write_opts = { 11 bookType: 'xlsx', 12 type: 'binary' 13 }; 14 var wb_out = XLSX.write(wb, write_opts); 15 var blob = new Blob([s2ab(wb_out)], { type: 'application/octet-stream' }); 16 saveAs(blob, 'テスト.xlsx'); 17} 18 19function s2ab(s) { 20 var buf = new ArrayBuffer(s.length); 21 var view = new Uint8Array(buf); 22 for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF; 23 return buf; 24}

試したこと

上記とは別に、下記のサイトの内容をコピーして丸々同じものを作成してみても、同じエラーがでます。

https://techacademy.jp/magazine/21073

※パソコンにエクセルが入っていないので、友達にサイトダウンロードしたファイルを送って確認してもらっています。ダウンロードする人のデバイスにエクセルが入ってないことは原因として考えにくいと思っているのですが、一応情報として。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

原因が分かりました。
CDNでSheet.jsを入れていたのですが、fullバージョンにすると上手くいくようになりました。

<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.5/xlsx.min.js></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.5/xlsx.full.min.js"></script>

投稿2022/01/20 06:26

abc1222

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

元ファイルと、そこからダウンロードしたファイルを比較してみては。
どこがどう違ってるんでしょうか

投稿2022/01/18 15:23

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

abc1222

2022/01/18 15:32

回答ありがとうございます。 元ファイルは無く、コード(サイト)上でエクセルを作成して入力、そのファイルをダウンロードしています。 最終的にはサイト上の要素からエクセルファイルのデータを生成したいのですが、とりあえずはSheet.jsを理解するために要素から取得せず、wsDataの部分の配列でデータを指定しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問