質問編集履歴

3 表現のミスの修正

handymatsu

handymatsu score 24

2019/02/13 12:41  投稿

フォームで入力したスプレッドシートのデータをGASプログラムで削除したい
### 前提・実現したいこと
GoogleFormで入力されたGoogleSpreadSheet上のデータがあります。Google Apps Scriptプログラムで,このスプレッドシートファイルのコピーを作り編集しようとしています。具体的には,特定のcolumnを削除したいのです。
### 発生している問題・エラーメッセージ
Google Apps Script上のプログラムではエラーが出ませんが,削除もできません。そこで,手動で特定のcolumnを削除しようとしたところ,
問題が発生しました
フォームデータを含む列は削除できません。代わりに列を非表示にできます。
というメッセージが出ます。
そこで,スプレッドシートの「フォーム」メニューから,「フォームのリンクを解除」を実行すると,Google Apps Scriptプログラムで特定のcolumnを削除できるようになります。
マクロの記録をしてみましたが,マクロとしては記録されていませんでした。
### 該当のソースコード
```GoogleAppsScript
 var ssIDforS = copyFileInFolder(folderId2, ssID0, todayNow+"求人データ(学生用)");//ssID0はformで入力されるspreadSheet
 var ssForS = new Ssheet(ssIDforS);
 ssForS.deleteColumn(0,40);//formからのリンクが削除できず,deleteできない
//フォルダID,ファイルID,ファイル名を受け取り,ファイルIDのコピーをフォルダ内に作成して,ファイルのIDを返す
function copyFileInFolder(folderID, srcID, fileName) {
 var originalFile = DriveApp.getFileById(srcID);
 var folder = DriveApp.getFolderById(folderID);
 var copiedFile = originalFile.makeCopy(fileName, folder);
 copiedFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT);//リンクからアクセスできる人は編集可能にする
 var copiedFileId = copiedFile.getId();//コピーのファイルIDをゲット
 return copiedFileId;
}
//////////Ssheetクラスの定義開始(コンストラクタとメンバ関数で構成)2019/02/05
//Ssheetクラスのコンストラクタの記述
Ssheet = function(id){
 this.id = id;
 this.ssFile = SpreadsheetApp.openById(id);
 this.ssFileName = this.ssFile.getName();
 SpreadsheetApp.setActiveSpreadsheet(this.ssFile);//値を返さない
 this.activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
}
//spreadsheetの指定列colを削除
Ssheet.prototype.deleteColumn = function(sheet,col){
 this.activeSheet = this.activeSpreadsheet.getSheets()[sheet];
 this.activeSheet.deleteColumn(col);//列を削除
}
```
### 試したこと
あきらめて,spreadSheetを新規作成し,セルを一つ一つコピーするGoogleAppsScriptプログラムを作りましたが,ハイパーリンクを含むセルは,見た目のセルの値だけが,コピーされてしまい,ハイパーリンクが消えてしまいます。
  • Google Apps Script

    1753 questions

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

2 文法の修正

handymatsu

handymatsu score 24

2019/02/13 12:39  投稿

フォームで入力したスプレッドシートのデータをGASプログラムで削除したい
### 前提・実現したいこと
GoogleFormで入力されたGoogleSpreadSheet上のデータがあります。Google Apps Scriptプログラムで,このスプレッドシートファイルのコピーを作り編集しようとしています。具体的には,特定のcolumnを削除したいのです。
### 発生している問題・エラーメッセージ
Google Apps Script上のプログラムではエラーが出ませんが,削除もできません。そこで,手動で特定のcolumnを削除しようとしたところ,
問題が発生しました
フォームデータを含む列は削除できません。代わりに列を非表示にできます。
というメッセージが出ます。
そこで,スプレッドシートの「フォーム」メニューから,「フォームのリンクを解除」を実行すると,Google Apps Scriptプログラムで特定のcolumnを削除できるようになります。
いちいち,手動で解除していては大変なので,フォームのリンクをGoogleAppsScriptプログラムでなんとか実行したいのですが,やり方がわかりません。
マクロの記録をしてみましたが,マクロとしては記録されていませんでした。
### 該当のソースコード
```GoogleAppsScript
 var ssIDforS = copyFileInFolder(folderId2, ssID0, todayNow+"求人データ(学生用)");//ssID0はformで入力されるspreadSheet
 var ssForS = new Ssheet(ssIDforS);
 ssForS.deleteColumn(0,40);//formからのリンクが削除できず,deleteできない
//フォルダID,ファイルID,ファイル名を受け取り,ファイルIDのコピーをフォルダ内に作成して,ファイルのIDを返す
function copyFileInFolder(folderID, srcID, fileName) {
 var originalFile = DriveApp.getFileById(srcID);
 var folder = DriveApp.getFolderById(folderID);
 var copiedFile = originalFile.makeCopy(fileName, folder);
 copiedFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT);//リンクからアクセスできる人は編集可能にする
 var copiedFileId = copiedFile.getId();//コピーのファイルIDをゲット
 return copiedFileId;
}
//////////Ssheetクラスの定義開始(コンストラクタとメンバ関数で構成)2019/02/05
//Ssheetクラスのコンストラクタの記述
Ssheet = function(id){
 this.id = id;
 this.ssFile = SpreadsheetApp.openById(id);
 this.ssFileName = this.ssFile.getName();
 SpreadsheetApp.setActiveSpreadsheet(this.ssFile);//値を返さない
 this.activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
}
//spreadsheetの指定列colを削除
Ssheet.prototype.deleteColumn = function(sheet,col){
 this.activeSheet = this.activeSpreadsheet.getSheets()[sheet];
 this.activeSheet.deleteColumn(col);//列を削除
}
```
### 試したこと
  • Google Apps Script

    1753 questions

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

1 漢字の間違い

handymatsu

handymatsu score 24

2019/02/13 07:04  投稿

フォームで入力したスプレッドシートのデータをGASプログラムで削除したい
### 前提・実現したいこと
GoogleFormで入力されたGoogleSpreadSheet上のデータがあります。Google Apps Scriptプログラムで,このスプレッドシートファイルのコピーを作り編集しようとしています。具体的には,特定のcolumnを削除したいのです。
### 発生している問題・エラーメッセージ
Google Apps Script上のプログラムではエラーが出ませんが,削除もできません。そこで,手動で特定のcolumnを削除しようとしたところ,
問題が発生しました
フォームデータを含む列は削除できません。代わりに列を非常時にできます。
フォームデータを含む列は削除できません。代わりに列を非表示にできます。
というメッセージが出ます。
そこで,スプレッドシートの「フォーム」メニューから,「フォームのリンクを解除」を実行すると,Google Apps Scriptプログラムで特定のcolumnを削除できるようになります。
いちいち,手動で解除していては大変なので,フォームのリンクをGoogleAppsScriptプログラムでなんとか実行したいのですが,やり方がわかりません。
マクロの記録をしてみましたが,マクロとしては記録されていませんでした。
### 該当のソースコード
```GoogleAppsScript
 var ssIDforS = copyFileInFolder(folderId2, ssID0, todayNow+"求人データ(学生用)");//ssID0はformで入力されるspreadSheet
 var ssForS = new Ssheet(ssIDforS);
 ssForS.deleteColumn(0,40);//formからのリンクが削除できず,deleteできない
//フォルダID,ファイルID,ファイル名を受け取り,ファイルIDのコピーをフォルダ内に作成して,ファイルのIDを返す
function copyFileInFolder(folderID, srcID, fileName) {
 var originalFile = DriveApp.getFileById(srcID);
 var folder = DriveApp.getFolderById(folderID);
 var copiedFile = originalFile.makeCopy(fileName, folder);
 copiedFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.EDIT);//リンクからアクセスできる人は編集可能にする
 var copiedFileId = copiedFile.getId();//コピーのファイルIDをゲット
 return copiedFileId;
}
//////////Ssheetクラスの定義開始(コンストラクタとメンバ関数で構成)2019/02/05
//Ssheetクラスのコンストラクタの記述
Ssheet = function(id){
 this.id = id;
 this.ssFile = SpreadsheetApp.openById(id);
 this.ssFileName = this.ssFile.getName();
 SpreadsheetApp.setActiveSpreadsheet(this.ssFile);//値を返さない
 this.activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
}
//spreadsheetの指定列colを削除
Ssheet.prototype.deleteColumn = function(sheet,col){
 this.activeSheet = this.activeSpreadsheet.getSheets()[sheet];
 this.activeSheet.deleteColumn(col);//列を削除
}
```
### 試したこと
あきらめて,spreadSheetを新規作成し,セルを一つ一つコピーするGoogleAppsScriptプログラムを作ったが,ハイパーリンクを含むセルは,見た目のセルの値だけが,コピーされてしまい,ハイパーリンクが消えてしまいます。
  • Google Apps Script

    1753 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る