【发布时间】:2021-08-19 19:36:29
【问题描述】:
我们正在尝试查询一个 Google 电子表格,其中包含一些带有 #N/A 的字段。
Google 电子表格中的#N/A 错误表明缺少信息并发出信号函数停止计算。
我们只想将这些 #N/A 值视为 NULL。
使用 Google 电子表格的 CData 连接器执行此操作的最佳方法是什么?
【问题讨论】:
标签: google-sheets google-sheets-api cdata-drivers
我们正在尝试查询一个 Google 电子表格,其中包含一些带有 #N/A 的字段。
Google 电子表格中的#N/A 错误表明缺少信息并发出信号函数停止计算。
我们只想将这些 #N/A 值视为 NULL。
使用 Google 电子表格的 CData 连接器执行此操作的最佳方法是什么?
【问题讨论】:
标签: google-sheets google-sheets-api cdata-drivers
我认为将您的公式设置为 ifError 在您的电子表格中不是一个选项吗?这似乎是最明智的。例如,=iferror(vlookup(foo),) 返回 null 而不是 #N/A。
假设不是,这里有一个应用脚本,它可以检查您的数据并替换值,或者在电子表格中创建一个包含更新值的新工作表。
function fixErrorsInSheet(_sh) {
const errorValues = ["#NULL!", "#DIV/0!", "#VALUE!", "#REF!", "#NAME?", "#NUM!", "#N/A"];
if (_sh === undefined) {
_sh = SpreadsheetApp.getActiveSheet();
}
const ss = _sh.getParent();
var dataRange = _sh.getDataRange();
var allValues = dataRange.getValues();
for (var i = 0; i < allValues.length; i++) {
for (var j = 0; j < allValues[i].length; j++) {
var oneValue = allValues[i][j];
if (errorValues.includes(oneValue)) {
allValues[i].splice(j, 1, null);
}
}
}
//optional to update sheet, or you could query this array directly with cData;
dataRange.setValues(allValues);
//create new sheet with updated values...
//ss.setActiveSheet(_sh);
//var newSheet = ss.duplicateActiveSheet();
//newSheet.getRange(1,1,dataRange.getLastRow(),dataRange.getLastColumn()).setValues(allValues);
}
//use this to run on all sheets
function runFixOnAllWorkbooks() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.getSheets().forEach(fixErrorsInSheet);
}
【讨论】: