Google Apps Script(GAS)を使ったEXCELファイルアップロードで、ファイル破損してしまう不具合
解決済
回答 1
投稿
- 評価
- クリップ 2
- VIEW 1,094
Google Apps Script(GAS)を使ったEXCELファイルアップロードで、ファイル破損してしまう不具合
表題について、質問させて頂きます。よろしくお願い致します。
Google Apps Script(GAS)を使って、Google DriveにEXCELファイルをアップロードし共有しようと考えています。
発生している問題
下記のQiitaサイトを引用し、無事アップロードができましたが、アップロードしたファイルをが破損してしまい、EXCELで読み込めません。
https://qiita.com/v2okimochi/items/06ed1ce7c56a877a1e10
*拡張子 xlsx xls の両方を試しましたが、同じ状態です。
*手動でアップロードしたファイルは、完了した時点でシートの枠組みが見えますが、GASでアップロードしたファイルには緑色のXの表示が出るだけですので、アップロードした時点で壊れているようです。
//コード.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile('index');
}
function processForm(formObject) {
var formBlob = formObject.myFile;
const folderID='フォルダのID(参考文献[5]参照)';
var uploadFolder = DriveApp.getFolderById(folderID);
var driveFile = uploadFolder.createFile(formBlob);//アップロード
return driveFile.getUrl();
}
index.html
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<script>
function preventFormSubmit() {
var forms = document.querySelectorAll('form');
for (var i = 0; i < forms.length; i++) {
forms[i].addEventListener('submit', function(event) {
event.preventDefault();
});
}
}
window.addEventListener('load', preventFormSubmit);
/*最初はアップロードボタンを押せないようにしておく*/
document.addEventListener("DOMContentLoaded", function () {
document.getElementById("upload").disabled = true;
}, false);
/*制限サイズ以内のファイルが選択されたらアップロードボタンを押せるようにする*/
function changeSubmitButton() {
const len=document.getElementById("file").files.length;
const size=document.getElementById("file").files[0].size;
const maxSize=1024 * 1024 * 10;//10MB
const uploadButton=document.getElementById("upload");
if (len > 0 && size < maxSize) {
uploadButton.disabled = false;
}
else{
uploadButton.disabled = true;
}
}
/*アップロードボタンが押されたらファイルをアップロード*/
function handleFormSubmit(formObject) {
document.getElementById("upload").disabled = true;
const div = document.getElementById('progress');
div.innerHTML='アップロード中...';
//アップロード成功した場合はupdateView()実行
google.script.run.withSuccessHandler(updateView).processForm(formObject);
}
/*アップロード完了画面に変える(動的)*/
function updateView() {
var div = document.getElementById('myform');
div.innerHTML = '<div>アップロード完了しました。ありがとうございます</div>';
}
</script>
</head>
<body>
<div id="myform" style="text-align:center;">
ファイルを選択してからアップロードしてください(10MBまで)<br><br>
<form onsubmit="handleFormSubmit(this)">
<input id="file" name="myFile" type="file" onchange="changeSubmitButton()" />
<input id="upload" type="submit" value="アップロード" />
</form>
<div id="progress"></div>
</div>
</body>
</html>
MIMEの問題かと思います下記のサイトを見つけましたが、コード.gs のvar formBlob = formObject.myFile; 辺りをいじってみましたが、うまくいきません。
https://developers.google.com/apps-script/reference/base/mime-type
どなたかご教授頂ければ幸いです。
よろしくお願い致します。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
不具合があるみたいですが、スクリプトエディタ→実行→「ChromeV8を搭載した新しいApp scriptを『無効にする』」にしても壊れますか?もうずいぶん前ので見てないですかね?
補足ですが
無効にするとアロー関数や const, let が使えませんのでコードの修正が必要です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.10%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2020/06/19 23:23
ご回答ありがとうございます。
ご指示通り実行しましたが、結果は同じでした。
ファイルサイズが、オリジナルの倍近くになっています。
他に試すことがあればご教授頂ければ幸いです。
よろしくお願い致します。
2020/06/20 08:27 編集
・「ChromeV8を搭載した新しいApp scriptを『無効にする』」
・コード.gs、index.htmlのconstはvarに全て置き換える。
色々実験しました。以下の点で少し問題があっただけです。
「ChromeV8を搭載した新しいApp scriptを『無効にする』」で「const」のままでやった場合、アップロードはできるが、以下の問題発生。
・ファイルタイトルが文字化け
・xlsxの拡張子を無理やりxlsに変更したファイルをアップロードしたら壊れる。
→index.htmlの「const」を「var」にすると上記問題発生なし
全てのエクセルファイルが壊れるんでしょうか?特定のファイルのみでしょうか?
2020/06/21 00:10
アドバイスを元にじっくりやって、ご報告致します。
ファイルは、全て壊れます。
よろしくお願い致します。
2020/06/21 18:42
最初から全てやり直し、ご指摘箇所を修正することにより成功しました。
ご教授ありがとうございました。
今後ともよろしくお願い致します。