Google Apps Script 지정 폴더에 복사본 만들기 + 데이터 전기(스프레드시트)

소개



스프레드 시트를 사용하여 웃을 정도! 간이적인 「견적서로부터 청구서를 지정 폴더에 작성」하는 방법을 소개하고 싶다.

준비하는 것



· 송장의 템플리 스프레드 시트
· 견적서 스프레드 시트
· 송장을 저장하고 싶은 폴더 (공유 폴더 등)

복사 된 송장의 템플릿에 견적서에서 얻은 데이터를 전기합니다.

애초에 스프레드 시트로 견적서라든가, 어떻게 만들지요? ? 라는 쪽은 여기 를 참고로.

다만, 이번은 「웃을 수 있을 만큼!간이적인」라고 일로, 루프 처리를 해 데이터를 취득! 같은 일은 하지 않는다! ! !

적절한 견적서 준비





이번에는 이것만.
더 이상 이것은 견적서가 아니다.

그러나 이번에는 "지정 폴더에 복사 작성 + 데이터를 전기"라는 점에만 초점을 맞추고 싶다.
그러므로 큰 눈을 보길 바란다. .

메뉴에 버튼 추가



송장을 작성하는 프로그램을 발동시키기 위한 버튼을 배치한다.ツール>スクリプトエディタ 에서 편집기를 엽니다.

디폴트로 존재하는 myFunction() 는 지웁시다.
function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom')
    .addItem('請求書を生成', 'menuItem1')
    .addToUi();
}

이런 식으로 메뉴에 버튼을 만들 수 있을까.


지정 폴더에 복사 생성 + 데이터를 전기



다음 추가
// First itemをクリックした時の処理
function menuItem1() {

  //現在のスプレットシートを取得する
  var sheet1 = SpreadsheetApp.getActiveSheet();

  //コピーするスプレットシートのid(今回の場合は請求書のテンプレ)
  var templateid = "***";
  var template = DriveApp.getFileById(templateid);

  //保存先フォルダのオブジェクトを取得
  var destfolderid = "***";
  var destfolder = DriveApp.getFolderById(destfolderid);

   //見積書からデータを取得
    var name1 = sheet1.getRange(2, 2).getValue();
    var name2 = sheet1.getRange(3, 2).getValue(); 

    var filename = '請求書(' + name1 + ')';

   //このsheetが指定フォルダにコピー作成された請求書のテンプレ
    var sheet = template.makeCopy(filename, destfolder);

  //指定フォルダにコピー作成された請求書のテンプレを取得
   var copiedSheet = SpreadsheetApp.open(sheet);
   var sheets = copiedSheet.getSheets();

  //取得したスプレッドシートから、1つ目のシートを取得(デフォルトでは'シート1')
   var invoice = sheets[0];

  //データを転記
  //コピー先のシートの中のセルを指定して、コピー実行
  invoice.getRange(2, 2).setValue(name1);
  invoice.getRange(3, 3).setValue(name2);
}

가볍게 해설



나 자신, 스게이 넘어진 포인트가 있으므로 꼭 해설하고 싶다.

지정된 폴더에 저장하려면 makeCopy()



우선, 복사 작성된 파일을 지정 폴더에 보존하고 싶은 경우, makeCopy() 를 사용할 필요가 있다.
닮은 것으로 copy() 도 존재하지만 , 여기에서는 보존처를 지정할 수 없다.

에서 makeCopy() 를 호출하려면 templateDriveApp.getFileById() 를 사용하여 가져와야 합니다.
  //こっちじゃmakeCopy()を使えない
  var template = SpreadsheetApp.openById('FileID');

  var templateid = "***";
  var template = DriveApp.getFileById(templateid);

  var sheet = template.makeCopy(filename, destfolder);

필요한 것은 "시트 이름"! !



gas를 하고 있고, 완전히 실수하고 있었던 적이 있다.

그것은 "파일명과 시트명은 이콜이 아니다"라는 것이다.

실은 처음에 도착한 것은 이쪽.

  var filename = '請求書(' + name1 + ')';

  //このsheetが指定フォルダにコピー作成された請求書のテンプレ
  var sheet = template.makeCopy(filename, destfolder);

  var copiedSheet = SpreadsheetApp.open(sheet);
  var invoice = copiedSheet.getSheetByName('シート名');
  //最初は以下のようにしていた
  //var invoice = copiedSheet.getSheetByName(filename);

여기서 성대한 착각을 하고 있었다.getSheetByName() 에 파일명을 지정하고 있었던 것이다. .
getSheet라고 써 있는데・・・. 하지만 어쩔 수 없다. 그때의 자신은 스프레드시트와 시트의 구별이 붙어 있지 않았기 때문에.

디폴트에서는 시트명은 「시트 1」이라고 알고 있지만, 이하와 같이 취득할 수 있는 것 같기 때문에 그쪽을 채용.
var sheets = copiedSheet.getSheets();
var invoice = sheets[0]; 

마지막으로



확고한 송장을 만드는데 도움이 될 것 같은 사이트를 붙여 둔다.

좋은 웹페이지 즐겨찾기