我希望能夠根據列單元格值將行中的所有或部分單元格從公式替換/粘貼到值。
如果 ColA = "Removed",則所有/某些單元格正確復制并粘貼為值。
function myFunction() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test');
var range = sheet.getRange(1, 1, sheet.getMaxRows(), 1);
var nextCell0 = range.offset(0, 0);
var nextCell1 = range.offset(0, 1);
if( nextCell0.getValue() === 'Removed' ) {
nextCell1.copyTo(nextCell0,{contentsOnly: true});
}
}
此代碼不起作用。基本上,ColA 只是用 ColB 的精確值復制
截圖示例:
腳本之前
腳本執行后
多列從公式轉換為值
腳本之前
腳本執行后
謝謝!
uj5u.com熱心網友回復:
修改點:
在您的腳本
nextCell0中,與range. 并且,nextCell0.getValue()從第一個單元格回傳值。在這種情況下,它是“A1”。并且,nextCell1.copyTo(nextCell0, { contentsOnly: true })從“B”列復制到“A”列。因此,當單元格“A1”為“已洗掉”時,“B”列被復制到“A”列。我認為這是您問題的原因。sheet.getRange(1, 1, sheet.getMaxRows(), 1)回傳作業表中的所有行。這在TheMaster 的評論中已經提到過。在這種情況下,sheet.getLastRow()可能是合適的。不幸
I want to be able to replace/paste all or some cells in the row from formulas to values based on a column cell value. If ColA = "Removed" then all/some cells right copy and paste as value.的是,我無法理解您的實際電子表格。所以,在這個答案中,我想提出以下模式。
為了消除這個問題,下面的修改如何?
模式一:
在此模式中,假設“A”和“B”列都有公式。
function myFunction() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test');
var range = sheet.getRange(1, 1, sheet.getLastRow(), 2);
var formulas = range.getFormulas();
var values = range.getValues().map(([a], i) => [a == 'Removed' ? formulas[i][1] : formulas[i][0]]);
range.offset(0, 0, values.length, 1).setFormulas(values);
}
- 運行此腳本時,當“A”列為“已洗掉”時,將“B”列與同一行的公式復制到“A”列。
模式二:
在此模式中,假設列“A”和“B”分別具有沒有公式和公式的值。
function myFunction() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test');
var range = sheet.getRange(1, 1, sheet.getLastRow(), 2);
var formulas = range.getFormulas();
var values = range.getValues().map(([a], i) => [a == 'Removed' ? formulas[i][1] : a]);
range.offset(0, 0, values.length, 1).setValues(values);
}
- 運行此腳本時,當“A”列為“已洗掉”時,將“B”列與同一行的公式復制到“A”列。
模式3:
在此模式中,假設列“A”和“B”分別具有公式和沒有公式的值。
function myFunction() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test');
var range = sheet.getRange(1, 1, sheet.getLastRow(), 2);
var formulas = range.getFormulas();
var values = range.getValues().map(([a, b], i) => [a == 'Removed' ? b : formulas[i][0]]);
range.offset(0, 0, values.length, 1).setValues(values);
}
- 運行此腳本時,當“A”列為“已洗掉”時,將具有相同行的“B”列的值復制到“A”列。
模式4:
在此模式中,它假設“A”和“B”列都有沒有公式的值。
function myFunction() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test');
var range = sheet.getRange(1, 1, sheet.getLastRow(), 2);
var values = range.getValues().map(([a, b]) => a == 'Removed' ? [b, b] : [a, b]);
range.setValues(values);
}
- 運行此腳本時,當“A”列為“已洗掉”時,將具有相同行的“B”列的值復制到“A”列。
參考:
- 獲取值()
- 設定值(值)
- 地圖()
添加:
從您添加的影像中,以下示例腳本怎么樣?
示例腳本:
function myFunction() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('test');
var range = sheet.getRange(1, 1, sheet.getLastRow(), 2);
var formulas = range.getFormulas();
var values = range.getValues().map(([a, b], i) => [a == 'Removed' ? b : formulas[i][1]]);
range.offset(0, 1, values.length, 1).setValues(values);
}
回答你的第二個問題:
function myFunction() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var range = sheet.getRange(1, 1, sheet.getLastRow(), 5);
var formulas = range.getFormulas().map(r => r.splice(1));
var values = range.getValues().map(([a, ...b], i) => a == 'Removed' ? b : formulas[i]);
range.offset(0, 1, values.length, 4).setValues(values);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/524239.html
標籤:谷歌应用脚本谷歌表格
上一篇:我該如何解決:SyntaxError:位置1的JSON中的意外標記u
下一篇:表格API匯入表格與格式化
