Google Apps Script-특정 열이 비어있는 getLastRow

McChief

소스 시트에서 데이터를 복사하여 다른 시트에 붙여 넣는 다음 Google Apps Script가 있습니다. 현재 대상 시트의 마지막 빈 행과 마지막 빈 열을 찾습니다. 이제 붙여 넣은 데이터를 처리하는 수식으로 채워진 대상 시트의 특정 열이 있습니다. 대상 시트 열 범위는 A : K이고 열 I : K에 수식이 있습니다. 누군가 A : H 열이 비어있는 마지막 행을 찾기 위해 새 코드로 나를 도울 수 있습니까?

function onEdit(e) {
  var spreadsheet = e.source;
  var sheet = spreadsheet.getActiveSheet();
  var sourcesheetname = "SOP Register"
  var range = e.range;
  var sheet = range.getSheet();
  var row = range.getRow();
  var column = range.getColumn();
  var editedColumn = range.getColumn();
  var editedRow = range.getRow();
  var column = 7;
  var date = range.getValue();
  if(Object.prototype.toString.call(date) === '[object Date]' && editedColumn == column && editedRow > 2 && sheet.getName() == sourcesheetname) {
    var targetsheetname = "Internal Audit Register";
    var target = e.source.getSheetByName(targetsheetname);
    var numCols = sheet.getLastColumn();
    var values = sheet.getRange(row, 1, 1, numCols).getValues()[0];
    values.splice(9) //Up to and including column I
    values.splice(7, 1) //Remove column H
    values.splice(2, 3); //Keep columns all columns and leave out columns C, D & E 
    var lastRow = target.getLastRow();
    var lastCol = target.getLastColumn();
    values.unshift("SOP"); //Append "SOP" to column A
    target.appendRow(values); // Append new row  
    sheet.hideColumns(6,2);}}//End of onEdit Functions

Tanaike의 게시물 이후에 그의 함수 getLastRow (sheet)와 모든 onEdit (e) 스크립트를 아래에 추가했습니다.

function getLastRow(sheet) {
  const values = sheet.getRange("A1:H" + sheet.getLastRow()).getDisplayValues();
  let lastRow = 0;
  for (let r = values.length - 1; r >= 0 ; r--) {
    if (!lastRow && !values[r].every(e => e == "")) {
      lastRow = r + 1;
      break
    }
  }
  return lastRow;
}

// Cut Employees Left from Unit Standards sheet and paste in Unit Standards - Employees Left sheet
function onEdit(e) {
  var ss = e.source;
  var sheet = ss.getActiveSheet();
  var sheetName = "Unit Standards"
  var range = e.range;
  var editedColumn = range.getColumn();
  var editedRow = range.getRow();
  var column = 4;
  var date = range.getValue();
  // Object.prototype.toString.call(date) === '[object Date]' --> checks if value is date
  // editedColumn == column && editedRow > 4 --> checks if edited cell is from 'Date Left'
  // sheet.getName() == sheetName --> checks if edited sheet is 'Unit Standards'
  if(Object.prototype.toString.call(date) === '[object Date]' && editedColumn == column && editedRow > 4 && sheet.getName() == sheetName) {
    var numCols = sheet.getLastColumn();
    var row = sheet.getRange(editedRow, 1, 1, numCols).getValues();
    var destinationSheet = ss.getSheetByName("Unit Standards - Employees Left");
    // Get first empty row:
    var emptyRow = destinationSheet.getLastRow() + 1;
    // Copy values from 'Unit Standards'
    destinationSheet.getRange(emptyRow, 1, 1, numCols).setValues(row);
    sheet.deleteRow(editedRow);
    sheet.hideColumns(column); }
  
// Copy and paste from Events/Incidents sheet to Vehicle Damage sheet
 {var range = e.range;
  var sheet = range.getSheet();
  var row = range.getRow();
  var column = range.getColumn();
  var sourcesheetname = "Events/Incidents";
  var checkbox = range.getValue();
  if (sheet.getName() == sourcesheetname && column == 25 && row > 2 && checkbox == true) {
    var targetsheetname = "Vehicle Damage";
    var target = e.source.getSheetByName(targetsheetname);
    var numCols = sheet.getLastColumn();
    var values = sheet.getRange(row, 1, 1, numCols).getValues()[0];
    values.splice(17)
    values.splice(8, 8)
    values.splice(5, 1)
    values.splice(3, 1); // Removing undesired values
    var lastRow = target.getLastRow();
    var lastCol = target.getLastColumn();
    target.appendRow(values); }// Append new row   

//SOP Internal Audit Required CheckBox if True
 {var range = e.range
  var sheet = range.getSheet();
  var row = range.getRow();
  var column = range.getColumn();
  var sourcesheetname = "SOP Register";
  var checkbox = range.getValue();
  if (sheet.getName() == sourcesheetname && column == 5 && row > 2 && checkbox == true) {
    sheet.showColumns(6,2);
    sheet.getRange("F3").activate();}

// Copy and paste from SOP Register sheet to Internal Audit sheet
 {var spreadsheet = e.source;
  var sheet = spreadsheet.getActiveSheet();
  var sourcesheetname = "SOP Register"
  var range = e.range;
  var sheet = range.getSheet();
  var row = range.getRow();
  var column = range.getColumn();
  var editedColumn = range.getColumn();
  var editedRow = range.getRow();
  var column = 7;
  var date = range.getValue();
  if(Object.prototype.toString.call(date) === '[object Date]' && editedColumn == column && editedRow > 2 && sheet.getName() == sourcesheetname) {
    var targetsheetname = "Internal Audit Register";
    var target = e.source.getSheetByName(targetsheetname);
    var numCols = sheet.getLastColumn();
    var values = sheet.getRange(row, 1, 1, numCols).getValues()[0];
    values.splice(9) //Up to and including column I
    values.splice(7, 1) //Remove column H
    values.splice(2, 3); //Keep columns all columns and leave out columns C, D & E 
    var lastRow = getLastRow(target);
    var lastCol = target.getLastColumn();
    values.unshift("SOP"); //Append "SOP" to column A
    target.appendRow(values); // Append new row  
    sheet.hideColumns(6,2);}}}}}//End of onEdit Functions

이것은 내가 원하는 결과이며 A5 : F5 셀에 새 데이터를 붙여 넣는 것이지만 현재 스크립트는 A6 : F6 셀에 붙여넣고 I6 : K6 셀은 비어 있습니다.

여기에 이미지 설명 입력

원치 않는 결과

여기에 이미지 설명 입력

원본 시트와 대상 시트의 샘플은 다음과 같습니다.

샘플 스프레드 시트

Tanaike

나는 당신의 목표를 다음과 같이 믿습니다.

  • "A"- "K"열에 값이있는 시트가 있습니다. 그리고 "I"에서 "K"까지의 열에는 공식이 있습니다.
  • "A : H"범위에서 마지막 행의 번호를 검색하려고합니다.

이를 위해이 답변은 어떻습니까? 이 답변에서는 원하는 마지막 행을 검색하는 함수를 준비합니다.

수정 된 스크립트 :

다음 기능을 추가하십시오. 이 함수는 lastRow시트 개체를 입력하여 의 값을 반환 합니다.

function getLastRow(sheet) {
  const values = sheet.getRange("A1:H" + sheet.getLastRow()).getDisplayValues();
  let lastRow = 0;
  for (let r = values.length - 1; r >= 0 ; r--) {
    if (!lastRow && !values[r].every(e => e == "")) {
      lastRow = r + 1;
      break
    }
  }
  return lastRow;
}

그리고 위의 기능을 스크립트에서 사용하기 위해서는 다음과 같이 수정하십시오.

에서:
var lastRow = target.getLastRow();
에:
var lastRow = getLastRow(target);
  • 이것에 의해 lastRow"A : H"의 범위에서 검색 할 수 있습니다.

참고:

추가 1 :

하나 이상의 수정에 대해 다음 수정을 테스트하십시오. 현재 스크립트에서 lastRow검색된 사람 getLastRow(target)은 사용되지 않으며 values에 의해 시트의 마지막 행에 추가됩니다 appendRow. 따라서를 사용하려면 lastRow다음과 같이 수정하십시오. 이 경우, 업데이트 된 질문에서 수정하십시오 getRange("A1:H" + sheet.getLastRow())getRange("A1:F" + sheet.getLastRow())의 기능을 위해 getLastRow.

에서:

var lastRow = getLastRow(target);
var lastCol = target.getLastColumn();
values.unshift("SOP"); //Append "SOP" to column A
target.appendRow(values); // Append new row  

에:

var lastRow = getLastRow(target);
var lastCol = target.getLastColumn();
values.unshift("SOP");
target.getRange(lastRow + 1, 1, 1, values.length).setValues([values]);  // Modified

추가 2 :

  1. "A"- "K"열에 값이있는 시트가 있습니다. 그리고 "I"에서 "K"까지의 열에는 공식이 있습니다.
  2. "A : H"범위에서 마지막 행의 번호를 검색하려고합니다.
  3. 또한 열 "I"에서 "K"까지의 공식을 값을 입력하는 동일한 행에 복사하려고합니다.

이를 위해 다음과 같이 스크립트를 수정하십시오. 이 경우 위의을 사용하십시오 getLastRow().

에서:

var lastRow = getLastRow(target);
var lastCol = target.getLastColumn();
values.unshift("SOP"); //Append "SOP" to column A
target.appendRow(values); // Append new row  

에:

var lastRow = getLastRow(target);
var lastCol = target.getLastColumn();
values.unshift("SOP");
target.getRange(lastRow + 1, 1, 1, values.length).setValues([values]);  // Modified
if (lastRow >= 3) target.getRange(lastRow, 9, 1, 3).copyTo(target.getRange(lastRow + 1, 9, 1, 3), SpreadsheetApp.CopyPasteType.PASTE_FORMULA);  // Added
  • 이 경우 적어도 3 행에는 "I"에서 "K"까지의 열에 공식이 있어야합니다.
  • 행 3에 "I"에서 "K"까지의 열에 공식이있는 경우를 사용할 수도 있습니다 if (lastRow >= 3) target.getRange(3, 9, 1, 3).copyTo(target.getRange(lastRow + 1, 9, 1, 3), SpreadsheetApp.CopyPasteType.PASTE_FORMULA);.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Apps Script getLastRow 오류 (

분류에서Dev

Google Apps Script : 특정 값이있는 셀을 찾은 다음 배경색 설정

분류에서Dev

특정 열의 빈 셀을 맨 위로 정렬하는 Google Apps Script

분류에서Dev

Google Apps Script : 주어진 열의 셀이 비어 있지 않은 경우 행 활성화 및 정렬

분류에서Dev

Google Apps Script / Google Sheet에서 특정 열에 특정 값이 설정된 경우에만 자동으로 자동 정렬하는 방법은 무엇입니까?

분류에서Dev

Google 문서에서 특정 단어 그리기-Google Apps Script

분류에서Dev

기준을 충족하는 특정 행 반환-Google Apps Script

분류에서Dev

Google Apps Script .getLastColumn (); 특정 행의?

분류에서Dev

Google Apps Script에서 특정 값에 대한 확인 열을 얻으려면 어떻게해야합니까?

분류에서Dev

여러 IF 조건이있는 Google Apps Script

분류에서Dev

Google 스프레드 시트 + Apps Script : 열에 특정 단어가 포함 된 경우에만 데이터 목록 만들기

분류에서Dev

특정 열의 값을 가져오고 특정 열을 필터링합니다.-Google Apps Script

분류에서Dev

특정 텍스트가있는 행 숨기기 (코드 수정)-Google Apps Script / Google 스프레드 시트

분류에서Dev

특정 양식 제출에 의해 트리거되는 Google Apps Script OnSubmit 함수

분류에서Dev

코드 수정-편집에서 특정 열을 선택합니다. Google Apps Script / Google 스프레드 시트

분류에서Dev

Google Apps Script를 사용하여 Google 드라이브에서 JSON 특정 콘텐츠를 검색하는 방법은 무엇입니까?

분류에서Dev

HTML 양식 입력 필드가 비어있는 경우 Google Apps Script 오류

분류에서Dev

Google Apps Script : 두 배열이 일치하는 경우 배열 결합

분류에서Dev

시트 부가 기능이있는 Google Apps Script PERMISSION_DENIED

분류에서Dev

Google Apps Script를 사용하여 프레젠테이션에서 특정 슬라이드의 URL 추출

분류에서Dev

객체 배열 정렬 방법-google-apps-script

분류에서Dev

양식 용 Google Apps Script : 사용자에게 이메일로 특정 번호를 보내려고합니다.

분류에서Dev

Apps Script를 사용하여 Google 문서에서 표의 특정 셀에 텍스트 및 이미지 추가

분류에서Dev

Google Apps Script에서 특정 스프레드 시트를 공유하려면 어떻게해야합니까?

분류에서Dev

Google Apps Script는 Google 스프레드 시트의 특정 셀에서 어떤 값이 어떤 값을 대체했는지 알려주는 이메일을 보냅니다.

분류에서Dev

행 대신 열로 배열을 결합하는 Google Apps Script

분류에서Dev

한 시트에서 다른 시트로 특정 행을 복사하는 방법 (Google Apps Script)

분류에서Dev

Google Apps Script : 루트에서 특정 폴더로 파일을 저장하는 방법은 무엇입니까?

분류에서Dev

Google Apps Script 자동 (수정시) 정렬 (특정 시트 만 해당)

Related 관련 기사

  1. 1

    Apps Script getLastRow 오류 (

  2. 2

    Google Apps Script : 특정 값이있는 셀을 찾은 다음 배경색 설정

  3. 3

    특정 열의 빈 셀을 맨 위로 정렬하는 Google Apps Script

  4. 4

    Google Apps Script : 주어진 열의 셀이 비어 있지 않은 경우 행 활성화 및 정렬

  5. 5

    Google Apps Script / Google Sheet에서 특정 열에 특정 값이 설정된 경우에만 자동으로 자동 정렬하는 방법은 무엇입니까?

  6. 6

    Google 문서에서 특정 단어 그리기-Google Apps Script

  7. 7

    기준을 충족하는 특정 행 반환-Google Apps Script

  8. 8

    Google Apps Script .getLastColumn (); 특정 행의?

  9. 9

    Google Apps Script에서 특정 값에 대한 확인 열을 얻으려면 어떻게해야합니까?

  10. 10

    여러 IF 조건이있는 Google Apps Script

  11. 11

    Google 스프레드 시트 + Apps Script : 열에 특정 단어가 포함 된 경우에만 데이터 목록 만들기

  12. 12

    특정 열의 값을 가져오고 특정 열을 필터링합니다.-Google Apps Script

  13. 13

    특정 텍스트가있는 행 숨기기 (코드 수정)-Google Apps Script / Google 스프레드 시트

  14. 14

    특정 양식 제출에 의해 트리거되는 Google Apps Script OnSubmit 함수

  15. 15

    코드 수정-편집에서 특정 열을 선택합니다. Google Apps Script / Google 스프레드 시트

  16. 16

    Google Apps Script를 사용하여 Google 드라이브에서 JSON 특정 콘텐츠를 검색하는 방법은 무엇입니까?

  17. 17

    HTML 양식 입력 필드가 비어있는 경우 Google Apps Script 오류

  18. 18

    Google Apps Script : 두 배열이 일치하는 경우 배열 결합

  19. 19

    시트 부가 기능이있는 Google Apps Script PERMISSION_DENIED

  20. 20

    Google Apps Script를 사용하여 프레젠테이션에서 특정 슬라이드의 URL 추출

  21. 21

    객체 배열 정렬 방법-google-apps-script

  22. 22

    양식 용 Google Apps Script : 사용자에게 이메일로 특정 번호를 보내려고합니다.

  23. 23

    Apps Script를 사용하여 Google 문서에서 표의 특정 셀에 텍스트 및 이미지 추가

  24. 24

    Google Apps Script에서 특정 스프레드 시트를 공유하려면 어떻게해야합니까?

  25. 25

    Google Apps Script는 Google 스프레드 시트의 특정 셀에서 어떤 값이 어떤 값을 대체했는지 알려주는 이메일을 보냅니다.

  26. 26

    행 대신 열로 배열을 결합하는 Google Apps Script

  27. 27

    한 시트에서 다른 시트로 특정 행을 복사하는 방법 (Google Apps Script)

  28. 28

    Google Apps Script : 루트에서 특정 폴더로 파일을 저장하는 방법은 무엇입니까?

  29. 29

    Google Apps Script 자동 (수정시) 정렬 (특정 시트 만 해당)

뜨겁다태그

보관