Javascript 检查一个区域的列标题,并对另一个区域的单元格进行操作
我有两个命名范围<代码>DbCrHdr和Javascript 检查一个区域的列标题,并对另一个区域的单元格进行操作,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有两个命名范围DbCrHdr和事务 我想通过事务进行解析,如果单元格的列索引或列索引与DbCrHdr数组上的“credit”匹配,那么我想将该数字转换为负数或乘以-1,然后将该数组重新映射/重新馈送到事务,从而改变工作表 我如何才能做到这一点 附加的谷歌应用程序脚本文件 /** @OnlyCurrentDoc */ // Global Variables // Set ss to active spreadsheet var SS = SpreadsheetApp.getActiveS
事务
我想通过事务
进行解析,如果单元格的列索引或列索引与DbCrHdr
数组上的“credit”匹配,那么我想将该数字转换为负数或乘以-1,然后将该数组重新映射/重新馈送到事务
,从而改变工作表
我如何才能做到这一点
附加的谷歌应用程序脚本文件
/** @OnlyCurrentDoc */
// Global Variables
// Set ss to active spreadsheet
var SS = SpreadsheetApp.getActiveSpreadsheet();
// Set sheet to the current active sheet
var Sheet = SS.getActiveSheet();
// Get current sheet name and set it to sheetName
var SheetName = Sheet.getName();
// Get range by name and set it to a global variable
var TransxnRange = SpreadsheetApp.getActive().getRangeByName("Transactions");
// Get array of values in the search Range
var TransxnValues = TransxnRange.getValues();
// Get range by name and set it to a global variable
var DbCrRange = SpreadsheetApp.getActive().getRangeByName("DbCrHdr");
// Get array of values in the search Range
var DbCrValues = DbCrRange.getValues();
/**
* Parse through the debit-credit row and change the currency to negative if the header is credit.
*
*
*/
function NegativeCredit() {
var LastCol = TransxnRange.getLastColumn();
var LastRow = TransxnRange.getLastRow();
var NumCol = TransxnRange.getNumColumns();
var NumRow = TransxnRange.getNumRows();
/**
Logger.log(LastCol)
Logger.log(LastRow)
Logger.log(NumCol)
Logger.log(NumRow)
Logger.log(TransxnRange.getA1Notation())
Logger.log(TransxnValues)
Logger.log(DbCrRange.getA1Notation())
Logger.log(DbCrValues)
*/
TransxnValues.forEach(function(row) {
row.forEach(function(col) {
// Logger.log(col);
});
});
for ( i = 0; i < NumCol; i++) {
for ( j = 0; j < NumRow; j++) {
Logger.log(TransxnValues[j][i])
}
}
}
/**@仅限当前文档*/
//全局变量
//将ss设置为活动电子表格
var SS=SpreadsheetApp.getActiveSpreadsheet();
//将图纸设置为当前活动图纸
var Sheet=SS.getActiveSheet();
//获取当前图纸名称并将其设置为sheetName
var SheetName=Sheet.getName();
//按名称获取范围并将其设置为全局变量
var TransxnRange=SpreadsheetApp.getActive().getRangeByName(“交易”);
//获取搜索范围中的值数组
var TransxnValues=TransxnRange.getValues();
//按名称获取范围并将其设置为全局变量
var DbCrRange=SpreadsheetApp.getActive().getRangeByName(“DbCrHdr”);
//获取搜索范围中的值数组
var DbCrValues=DbCrRange.getValues();
/**
*分析借方-贷方行,如果标题为贷方,则将货币更改为负数。
*
*
*/
函数negativerEdit(){
var LastCol=TransxnRange.getLastColumn();
var LastRow=TransxnRange.getLastRow();
var NumCol=TransxnRange.getNumColumns();
var NumRow=TransxnRange.getNumRows();
/**
Logger.log(LastCol)
Logger.log(最后一行)
Logger.log(NumCol)
Logger.log(NumRow)
Logger.log(TransxnRange.getA1Notation())
Logger.log(transxn值)
Logger.log(DbCrRange.getA1Notation())
Logger.log(DbCrValues)
*/
TransxnValues.forEach(函数(行){
行。forEach(函数(列){
//Logger.log(col);
});
});
对于(i=0;i
说明:
您的目标是找到列索引,其中credit
出现在DbCrValues
的第一行中:
creditIndexes = DbCrValues.flat().flatMap((cr, i) => cr === 'credit' ? i : []);
然后在creditindex
中的列索引检查每一行
如果行和值为正,则将符号更改为负:
creditIndexes.forEach(col=>{
TransxnValues.forEach((row,ir)=>{
let val = row[col];
TransxnValues[ir][col] = val > 0 && !Number.isNaN(val) ? -val : val;
});
});
否则,保留现有值
解决方案:
保留全局偏差并将negativerEdit()
更改为:
function NegativeCredit() {
const creditIndexes = DbCrValues.flat().flatMap((cr, i) => cr === 'credit' ? i : []);
creditIndexes.forEach(col=>{
TransxnValues.forEach((row,ir)=>{
let val = row[col];
TransxnValues[ir][col] = val > 0 && !Number.isNaN(val) ? -val : val;
});
});
TransxnRange.setValues(TransxnValues);
}
其他参考资料:
onOpen
触发器中输入,以便每次刷新电子表格(刷新网页)时都会触发该功能。我认为第二个更合理,但最终的决定是你的。@sle7en对于后者,你可以有这样的东西:函数onOpen(){NegativeCredit();}
和NegativeCredit
将在你每次打开电子表格文件时触发。可爱的,谢谢一个束人,会按照你的建议使用后者