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

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

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

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

Q&A

解決済

2回答

5800閲覧

GASでexcelファイルをスプレッドシートに変換したい

SATSUKI.

総合スコア21

Google Apps Script

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

0グッド

1クリップ

投稿2020/02/07 02:43

編集2020/02/08 10:22

前提・実現したいこと

GoogleAppsScriptでGoogleDriveに存在しているexcelファイルをGoogleスプレッドシートに変換したいです。

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

Drive.Files.insertの行で以下のエラーが発生します。

次のエラーが発生し、drive.files.insert の呼び出しに失敗しました: Bad Request

該当のソースコード

変換元のexcelファイルは"template.xlsx"、それが存在しているフォルダは"myFolder"です。
変換後のgsheetファイル("mySheet")は同じフォルダに出力するようにしています。

main関数を実行するとconvertExcelToGsheet関数が呼び出されるようになっています。

gas

1function convertExcelToGsheet(folderName,excelFileId){ 2 var folderID=DriveApp.getFoldersByName(folderName).next().getId(); 3 var convertInfo = { 4 title: "mySheet", 5 mimeType: MimeType.GOOGLE_SHEETS, 6 parents: [{id: folderID)}], 7 }; 8 var excelFileObj=DriveApp.getFileById(excelFileId) 9 var res = Drive.Files.insert(convertInfo, excelFileObj.getBlob()); 10 11 return res.id; 12} 13 14function main(){ 15 var folderName="myFolder" 16 var templateFileName="template.xlsx" 17 var folderId=getFolerID(folderName) 18 var folderObj=DriveApp.getFolderById(folderId); 19 var excelFileId=folderObj.getFilesByName(templateFileName).next().getId(); 20 var sheet=convertExcelToGsheet(folderName,excelFileId) 21 Logger.log(sheet) 22}

DriveAPIはオンにしてあります。

参考にさせていただいたサイト

質問したいこと

上記のエラーを解決するにはどうしたらよいでしょうか?
よろしくおねがいいたします。

追記

変換元のexcelファイルを.xlsファイルにしたら一応動きました。
しかし、できれば.xlsxファイルを変換したいため、引き続き回答募集します。

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

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

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

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

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

macaron_xxx

2020/02/12 02:18

動かないコードを載せてるから回答がつかないんですかね。
guest

回答2

0

下記スクリプトで普通にxlsxファイルからスプレッドシートに変換できました。

javascript

1function convertExcelToGsheet(folderId,excelFileId){ 2 var convertInfo = { 3 title: "mySheet", 4 mimeType: MimeType.GOOGLE_SHEETS, 5 parents: [{id: folderId}], 6 }; 7 var excelFileObj=DriveApp.getFileById(excelFileId); 8 var res = Drive.Files.insert(convertInfo, excelFileObj.getBlob()); 9 10 return res.id; 11} 12 13function main(){ 14 var folderId="*****"; 15 var templateFileName="template.xlsx"; 16 var folderObj=DriveApp.getFolderById(folderId); 17 var excelFileId=folderObj.getFilesByName(templateFileName).next().getId(); 18 var sheet=convertExcelToGsheet(folderId,excelFileId); 19 Logger.log(sheet); 20}

追記

ファイル→ID→ファイルという無駄があるので、下記のほうがいいかも

javascript

1function convertExcelToGsheet(folderId,excelFileObj){ 2 var convertInfo = { 3 title: "mySheet", 4 mimeType: MimeType.GOOGLE_SHEETS, 5 parents: [{id: folderId}], 6 }; 7 var res = Drive.Files.insert(convertInfo, excelFileObj.getBlob()); 8 9 return res.id; 10} 11 12function main(){ 13 var folderId="*****"; 14 var templateFileName="template.xlsx"; 15 var excelFileObj=DriveApp.getFolderById(folderId).getFilesByName(templateFileName).next(); 16 var sheet=convertExcelToGsheet(folderId,excelFileObj); 17 Logger.log(sheet); 18}

投稿2020/02/12 02:26

編集2020/02/12 02:30
macaron_xxx

総合スコア3191

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

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

SATSUKI.

2020/02/14 15:45

ご回答ありがとうございます。 忙しくて返事が大変遅くなってしまい、申し訳ないです。 結論から言うと、私の環境では動きませんでした。ご教示頂いたコードをそのままコピペして、定数(フォルダid、変換前と変換後のファイル名) だけ変更してmain関数を実行してみましたが、同じエラーが出て止まってしまいます。(なぜかエラーが英語になりましたが内容は同じです。) > `API call to drive.files.insert failed with error: Bad Request` ということは、コードではなく私の実行環境になにか問題がありそうですね。英語のエラー文をググってもざっと見てそれらしき解決方法が出てこないので、実行環境でいじれそうな条件をいろいろ変えて実行できないか試してみようと思います。 おかげさまで原因を絞ることができました。ありがとうございます!
guest

0

自己解決

変換元のxlsxファイルに問題があった

ローカルのソフト(Excel 2016 for Mac) では問題なく開くことができるが、プラウザ版のGoogleDriveでは開こうとすると

何らかの問題により、このドキュメントのプレビューを表示できませんでした。

というエラーが表示されて開けないことに気が付きました。GoogleDriveはエクセルファイル開けたはずなのになんでだろう...xlsが開けて最新のxlsxが開けないのはおかしいな...と思いつつ、試しにExcelで新しくxlsxファイルを作り直してGoogleDriveにアップロードし、再度実行したところうまくいきました。
お騒がせしました...

投稿2020/02/14 16:37

SATSUKI.

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問