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

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

新規登録して質問してみよう
ただいま回答率
85.50%
バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

JavaScript

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

3回答

9803閲覧

[JavaScript]バイナリデータからExcelデータへの変換方法

FUJITOMO37

総合スコア25

バイナリ

バイナリは、「0」と「1」だけで表現されている2進数のデータ形式。または、テキスト以外の情報でデータが記述されているファイルを指します。コンピューター内の処理は全て2進数で表記されています。

JavaScript

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

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/02/13 02:26

編集2020/02/13 06:19

ご存知でしたら、ご教授下さい。

下記の添付ファイルダウンロードAPIにて、Excelデータ(xlsx)をダウンロードする処理を作成しております。
https://sites.google.com/a/sateraito.jp/nextset-dounyuu/Home/wakufuro-ji-neng/api#TOC-API16

下記のコードを実行すると、ダウンロードは出来るのですがファイルが破損している事になり、開けません。。
アップロードしたexcelファイルとダウンロードしたexcelファイルをさくらエディタで開くと文字コードが違いました。
※アップロードしたexcelファイル:shift-jis ダウンロードしたexcelファイル:utf-8
さくらエディタでダウンロードしたexcelファイルをshift-jisにしても無駄でした。。
やり方をご存知ないでしょうか?

※[]内はあっている前提です。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>TEST</title> <!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script> <![endif]--> <script type="text/javascript" src="http://code.jquery.com/jquery-2.2.3.min.js"></script> </head> <body> <button onclick="clickEvent()">ボタン</button> <a id="download" download="test.xlsx">ダウンロード</a> <script> function clickEvent() { downloadFile([doc_id],[file_id]); } function downloadFile(doc_id,file_id) { const url = "https://workflow.nextset.jp/[テナント名]/api/public/attach/download"; const xml = new XMLHttpRequest(); xml.open("POST", url, false); xml.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8"); var data = new Map(); var access_token = getAccessToken(); data.set('access_token', '[access_token]'); data.set('impersonate_email', '[impersonate_email]'); data.set('application_id', '[application_id]'); data.set('doc_id', [doc_id]); data.set('file_id', [file_id]); var param = [...data.entries()].map(d => d.join('=')).join('&') xml.send(param) var blob = new Blob([xml.response], { type: 'application/octet-stream' }, "test.xlsx"); const a = document.getElementById('download'); a.href = window.URL.createObjectURL(blob); return blob; } </script> </body> </html>

以上。よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

ベストアンサー

ダウンロードは出来るのですがファイルが破損している事になり、開けません

要求前に responseType を設定してみてはどうでしょうか。

XMLHttpRequest2 以降は、Blob や ArrayBuffer で応答データを受け取ることができます。

javascript

1 2let xhr = new XMLHttpRequest(); 3 4/* omitted */ 5 6xhr.responseType = "arraybuffer"; // 受け取るデータをArrayBufferに指定。 7xhr.send(param); 8 9console.log( xhr.response ); // ArrayBuffer

また、文字コードがシフトJISで間違いないのであれば、charset の値は shift-jis ではなく Shift_JIS です。

投稿2020/02/13 02:54

AkitoshiManabe

総合スコア5432

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

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

FUJITOMO37

2020/02/13 05:45

下記の修正でちゃんと出来ました。charsetはUTF-8で問題なかったみたいです。  ・xml.responseType = "blob"; の追記  ・XMLHttpRequestのopen時に非同期をtrueにする。 ありがとうございました!
guest

0

アップロードしたexcelファイルとダウンロードしたexcelファイルをさくらエディタで開くと文字コードが違いました。

そもそも論として、Excelファイルをテキストエディタで開いても文字としての意味をなさないデータの羅列となりますので、そこへの「文字コード」指定はほぼ無意味です。

一方で、リクエストを送信する際のcharset=shift-jisが気になります。HTML自体はUTF-8で書かれていますし、文字コード変換せずに送信しているので、ここが整合しないのではないかという気もします。

投稿2020/02/13 02:29

maisumakun

総合スコア145121

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

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

maisumakun

2020/02/13 02:36

そもそも、添付されたファイルがxlsxでなかった、という可能性はないでしょうか?
FUJITOMO37

2020/02/13 02:42

ご回答ありがとうございます。 charset=shift-jisの個所はcharset=utf-8でも試していました。内容がわかりずらく申し訳ありません。内容を修正しておきました。添付されたファイルはxlsx形式で間違いありません。apiで取得した値で確認しております。 さくらエディタでの変換については、無知でした。。教えていただいて感謝致します。
guest

0

CORSの問題がなければ以下で処理すればいいでしょう

javascript

1fetch(url).then(res=>res.blob()).then(処理)

投稿2020/02/13 03:09

yambejp

総合スコア114572

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

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

FUJITOMO37

2020/02/13 05:47

ご回答、ありがとうございます。 CORS関係のエラーが発生して、上手く出来ませんでした。。今回は他の方法で対応出来ました。 勉強しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問