还从范围(源 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;
我必须将所有数据从 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;