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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

4899閲覧

Google Apps Script(GAS)を使ったEXCELファイルアップロードで、ファイル破損してしまう不具合

stwart

総合スコア5

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2020/04/03 04:15

Google Apps Script(GAS)を使ったEXCELファイルアップロードで、ファイル破損してしまう不具合

表題について、質問させて頂きます。よろしくお願い致します。

Google Apps Script(GAS)を使って、Google DriveにEXCELファイルをアップロードし共有しようと考えています。

発生している問題

下記のQiitaサイトを引用し、無事アップロードができましたが、アップロードしたファイルをが破損してしまい、EXCELで読み込めません。

https://qiita.com/v2okimochi/items/06ed1ce7c56a877a1e10

*拡張子 xlsx xls の両方を試しましたが、同じ状態です。

*手動でアップロードしたファイルは、完了した時点でシートの枠組みが見えますが、GASでアップロードしたファイルには緑色のXの表示が出るだけですので、アップロードした時点で壊れているようです。

Google

1 2//コード.gs 3 4function doGet() { 5 return HtmlService.createHtmlOutputFromFile('index'); 6} 7 8function processForm(formObject) { 9 var formBlob = formObject.myFile; 10 const folderID='フォルダのID(参考文献[5]参照)'; 11 var uploadFolder = DriveApp.getFolderById(folderID); 12 var driveFile = uploadFolder.createFile(formBlob);//アップロード 13 return driveFile.getUrl(); 14} 15 16 17index.html 18 19<!DOCTYPE html> 20<html> 21 <head> 22 <base target="_top"> 23 <script> 24 function preventFormSubmit() { 25 var forms = document.querySelectorAll('form'); 26 for (var i = 0; i < forms.length; i++) { 27 forms[i].addEventListener('submit', function(event) { 28 event.preventDefault(); 29 }); 30 } 31 } 32 window.addEventListener('load', preventFormSubmit); 33 /*最初はアップロードボタンを押せないようにしておく*/ 34 document.addEventListener("DOMContentLoaded", function () { 35 document.getElementById("upload").disabled = true; 36 }, false); 37 /*制限サイズ以内のファイルが選択されたらアップロードボタンを押せるようにする*/ 38 function changeSubmitButton() { 39 const len=document.getElementById("file").files.length; 40 const size=document.getElementById("file").files[0].size; 41 const maxSize=1024 * 1024 * 10;//10MB 42 const uploadButton=document.getElementById("upload"); 43 if (len > 0 && size < maxSize) { 44 uploadButton.disabled = false; 45 } 46 else{ 47 uploadButton.disabled = true; 48 } 49 } 50 /*アップロードボタンが押されたらファイルをアップロード*/ 51 function handleFormSubmit(formObject) { 52 document.getElementById("upload").disabled = true; 53 const div = document.getElementById('progress'); 54 div.innerHTML='アップロード中...'; 55 //アップロード成功した場合はupdateView()実行 56 google.script.run.withSuccessHandler(updateView).processForm(formObject); 57 } 58 /*アップロード完了画面に変える(動的)*/ 59 function updateView() { 60 var div = document.getElementById('myform'); 61 div.innerHTML = '<div>アップロード完了しました。ありがとうございます</div>'; 62 } 63 </script> 64 </head> 65 <body> 66 <div id="myform" style="text-align:center;"> 67 ファイルを選択してからアップロードしてください(10MBまで)<br><br> 68 <form onsubmit="handleFormSubmit(this)"> 69 <input id="file" name="myFile" type="file" onchange="changeSubmitButton()" /> 70 <input id="upload" type="submit" value="アップロード" /> 71 </form> 72 <div id="progress"></div> 73 </div> 74 </body> 75</html> 76

MIMEの問題かと思います下記のサイトを見つけましたが、コード.gs のvar formBlob = formObject.myFile; 辺りをいじってみましたが、うまくいきません。

https://developers.google.com/apps-script/reference/base/mime-type

どなたかご教授頂ければ幸いです。

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

不具合があるみたいですが、スクリプトエディタ→実行→「ChromeV8を搭載した新しいApp scriptを『無効にする』」にしても壊れますか?もうずいぶん前ので見てないですかね?

補足ですが
無効にするとアロー関数や const, let が使えませんのでコードの修正が必要です。

投稿2020/06/18 14:09

編集2020/06/19 01:43
MasakiTM

総合スコア115

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

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

stwart

2020/06/19 14:23

MasakiTM様 ご回答ありがとうございます。 ご指示通り実行しましたが、結果は同じでした。 ファイルサイズが、オリジナルの倍近くになっています。 他に試すことがあればご教授頂ければ幸いです。 よろしくお願い致します。
MasakiTM

2020/06/20 03:55 編集

同じ環境だと思いますが、私はこの修正だけで問題なく動いてます。 ・「ChromeV8を搭載した新しいApp scriptを『無効にする』」 ・コード.gs、index.htmlのconstはvarに全て置き換える。 色々実験しました。以下の点で少し問題があっただけです。 「ChromeV8を搭載した新しいApp scriptを『無効にする』」で「const」のままでやった場合、アップロードはできるが、以下の問題発生。 ・ファイルタイトルが文字化け ・xlsxの拡張子を無理やりxlsに変更したファイルをアップロードしたら壊れる。 →index.htmlの「const」を「var」にすると上記問題発生なし 全てのエクセルファイルが壊れるんでしょうか?特定のファイルのみでしょうか?
stwart

2020/06/20 15:10

早速のご返信ありがとうございます。 アドバイスを元にじっくりやって、ご報告致します。 ファイルは、全て壊れます。 よろしくお願い致します。
stwart

2020/06/21 09:42

MasakiTM 最初から全てやり直し、ご指摘箇所を修正することにより成功しました。 ご教授ありがとうございました。 今後ともよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問