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

回答3件
あなたの回答
tips
プレビュー