Apps Script公式リファレンス: Apps Script Reference |障害・課題追跡: IssueTracker |Google Workspace: Status Dashboard - Summary

2019年12月8日日曜日

スプレッドシートで空白行を含む複数の英文を一行ずつに分けたい


今回やりたかったこと

A2に複数の英文が入っていて
A3が空白の行で
A4に英文が入っている
このようなシートがあって


A2の文章を一文ずつ分けてそれぞれ一行にして
空白セルを削除して
このように上書きする

それをやるために以下のコードを書きました。



コード.gs
function setArrayToRange() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = sheet.getActiveRange().getRow();
  var lastRow = sheet.getLastRow();
  var numRows = (lastRow - startRow) + 1;
  
  var rangeValues = getRangeValues(sheet, startRow, numRows);
  var singleSentences = splitToSingleSentece(rangeValues);
  clearTargetRange(sheet, startRow, numRows);
  var arrays = removeBlankRows(singleSentences)
  var range = sheet.getRange(startRow, 1, arrays.length, 1);
  range.setValues(arrays);
}

function removeBlankRows(rangeValues) {
  var arrays = [];
  for(var i = 0; i < rangeValues.length; i++) {
    var value = rangeValues[i];
    if(value !== '') {
      arrays.push([value]);
    }
  }
  return arrays;
}

function getRangeValues(sheet, startRow, numRows) {
  var range = sheet.getRange(startRow, 1, numRows, 1);
  var values = range.getValues();
  return values;
}

function clearTargetRange(sheet, startRow, numRows) {
  var range = sheet.getRange(startRow, 1, numRows, 1);
  range.clear();
}

function splitToSingleSentece(rangeValues) {
  var pattern = /.*\. |.*\.|.*\! |.*\!|.*\? |.*\?|.*\,\n|.*$/g;
  var singleSentences = [];
  for(var i = 0; i < rangeValues.length; i++) {
    var sentences = rangeValues[i][0].match(pattern);
    for(var j = 0; j < sentences.length; j++) {
      singleSentences.push(sentences[j]);
    }
  }
  return singleSentences
}




Latest post

Google Apps Scriptの障害時はIssueTrackerを見てみる - Incidents for Apps Script are reported on Issue Tracker

IssueTracker > Apps Script issues https://issuetracker.google.com/savedsearches/566234 Google Apps Scriptの障害時は IssueTracker に課題が上がっていることが...