还从范围(源 sheet 到目标 sheet)中获取 BLANK/EMPTY VALUE

Get also the BLANK/EMPTY VALUE from the ranges (source sheet to destination sheet)

我必须将所有数据从 UserForm 提交到 DataSheet(以平面方法),即使是空白单元格也是如此。现在我几乎已经使用下面的脚本完成了我的任务。但无法将空白值复制到数据表。请指导

function SubmitData() {
  const dstSpreadsheetId = "1QL0jaNts2YRkZTlxmS0bk7V1fVVHBsJFmxS5C05PEmA"; // Destination Spreadsheet ID (WB-DataSheet).
  const dstSheetName = "DataSheet";
  const srcSheetName = "UserForm";

  // Retrieve values from source sheet and create an array and search value.
  const srcSpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const ranges = ["C3", "C7", "C8", "D8", "D6", "D4", "E8", "E19", "E20", "E21", "E22", "B10:E18", "B19:C22"];
  const [search, ...values] = Sheets.Spreadsheets.Values.batchGet(srcSpreadsheet.getId(),{ ranges: ranges.map(r => `'${srcSheetName}'!${r}`) }).valueRanges.flatMap(({ values, range }) => {
   if (range.includes("B10:E18")) return values.flat();
   if (range.includes("B19:C22")) return values.flat();
   return values[0][1];
  });

  // Put the array to the destination sheet using the search value.
  const dstSheet = SpreadsheetApp.openById(dstSpreadsheetId).getSheetByName(dstSheetName);
  const range = dstSheet.getRange("A2:A" + dstSheet.getLastRow()).createTextFinder(search).findNext();
  if (range) {
    dstSheet.getRange(range.getRow(), 2, 1, values.length).setValues([values]);
  } else {
    dstSheet.getRange(dstSheet.getLastRow() + 1, 1, 1, values.length + 1).setValues([[search, ...values]]);
  }
}

我附上了一张截图,用颜色代码解释了数据应该放在哪里。 https://i.stack.imgur.com/Yrfje.jpg [屏幕截图][1]

还共享了两个包含实际数据的电子表格(Userform 和 Datasheet)供您参考https://docs.google.com/spreadsheets/d/1NY_ckzEWxU7DCGro5tTqzpiOi6iG5PAQFxpZg0OKodY/edit?usp=sharing

https://docs.google.com/spreadsheets/d/1QL0jaNts2YRkZTlxmS0bk7V1fVVHBsJFmxS5C05PEmA/edit?usp=sharing

比如在你的脚本中,下面的修改是你的预期结果?

发件人:

const [search, ...values] = Sheets.Spreadsheets.Values.batchGet(srcSpreadsheet.getId(),{ ranges: ranges.map(r => `'${srcSheetName}'!${r}`) }).valueRanges.flatMap(({ values, range }) => {
 if (range.includes("B10:E18")) return values.flat();
 if (range.includes("B19:C22")) return values.flat();
 return values[0][1];
});

收件人:

const [search, ...values] = Sheets.Spreadsheets.Values.batchGet(srcSpreadsheet.getId(),{ ranges: ranges.map(r => `'${srcSheetName}'!${r}`) }).valueRanges.flatMap(({ values, range }) => {
  if (range.includes("B10:E18")) return values ? values.flat() : [];
  if (range.includes("B19:C22")) return values ? values.flat() : [];
  return values ? values[0][0] : "";
});
if (!search) return;