如何检查 Office.js 中的单元格是否为空
How to check if cell if empty in Office.js
我刚开始使用 Office Addins,正在试验这些功能。我有几个 VBA 用户表单,我想用 Office 加载项中的弹出窗口替换它们。
我正在使用以下代码将字符串输入单元格(我知道这没什么特别的)但我想在传递值之前检查单元格是否为空。如果是,请输入 (arg.message).
我遇到的问题:
对于 if (range.value == "")
,即使 "A3" 为空,该值也会设置在 "A4" 中;
如果 (range.value == " ")
没有在任何单元格中输入值。
谁能举例说明如何检查单元格是否为空?
我知道这看起来微不足道,但我只找到了如何检查条件格式的列号和行号的示例。我正在尝试测试所有这些功能,以便能够开始将内容从 VBA 转移到 OfficeJS。
谢谢,
麦克
function processMessage(arg) {
console.log(arg.message);
$('#user-name').text(arg.message);
dialog.close();
Excel.run(function (context) {
var sheet = context.workbook.worksheets.getItem("Sheet1");
var range = sheet.getRange("A3");
if (range.value == "") {
range.values = (arg.message);
range.format.autofitColumns();
return context.sync();
} else {
range.getOffsetRange(1, 0).values = (arg.message)
return context.sync();
}
}).catch(errorHandler);
}
PS: 整个代码以防其他地方有问题
(function () {
"use strict";
// The initialize function must be run each time a new page is loaded.
Office.initialize = function (reason) {
$(document).ready(function () {
// Add a click event handler for the button.
$('#popup-button').click(opensesame);
$('#simple-button').click(function () {
Office.context.document.getSelectedDataAsync(Office.CoercionType.Text,
function (result) {
if (result.status === Office.AsyncResultStatus.Succeeded) {
$("#banner-text").text('The selected text is: "' + result.value + '"');
$("#banner").show(result.value);
console.log()
} else {
$("#banner-text").text('Error: ' + result.error.message);
$("#banner").show();
}
});
});
$("#banner-close").click(function () { $("#banner").hide(); });
$("#banner").hide();
});
}
let dialog = null;
function opensesame() {
Office.context.ui.displayDialogAsync(
'https://localhost:3000/popup.html',
{ height: 35, width: 25 },
function (result) {
dialog = result.value;
dialog.addEventHandler(Microsoft.Office.WebExtension.EventType.DialogMessageReceived, processMessage);
}
);
}
function processMessage(arg) {
console.log(arg.message);
$('#user-name').text(arg.message);
dialog.close();
Excel.run(function (context) {
var sheet = context.workbook.worksheets.getItem("Sheet1");
var range = sheet.getRange("A3");
if (range.value == "") {
range.values = (arg.message);
range.format.autofitColumns();
return context.sync();
} else {
range.getOffsetRange(1, 0).values = (arg.message)
return context.sync();
}
}).catch(errorHandler);
}
})();
Range 对象有 values
属性,但没有值 属性。所以 range.value
在你的条件测试中是 undefined 不匹配空字符串;因此 else
子句运行。
其他几件事:
- 您的条件试图读取
range
对象的 属性。您必须 load
属性 并调用 context.sync
才能阅读 属性.
-
range.values
属性 的值是一个二维数组(尽管如果范围是单个单元格,它可能只有一个值)。它不是字符串,因此将它与空字符串进行比较总是 false
。
如果我理解您的目标,我认为您应该测试 range.values
(加载并同步后)是否在其唯一单元格中有一个空字符串。例如,if (range.values[0][0] === "")
。从性能的角度来看更好的是加载 range.valueTypes
属性(和同步)然后像这样比较:if (range.valueTypes[0][0] === Excel.RangeValueType.empty)
.
我刚开始使用 Office Addins,正在试验这些功能。我有几个 VBA 用户表单,我想用 Office 加载项中的弹出窗口替换它们。
我正在使用以下代码将字符串输入单元格(我知道这没什么特别的)但我想在传递值之前检查单元格是否为空。如果是,请输入 (arg.message).
我遇到的问题:
对于 if (range.value == "")
,即使 "A3" 为空,该值也会设置在 "A4" 中;
如果 (range.value == " ")
没有在任何单元格中输入值。
谁能举例说明如何检查单元格是否为空? 我知道这看起来微不足道,但我只找到了如何检查条件格式的列号和行号的示例。我正在尝试测试所有这些功能,以便能够开始将内容从 VBA 转移到 OfficeJS。
谢谢, 麦克
function processMessage(arg) {
console.log(arg.message);
$('#user-name').text(arg.message);
dialog.close();
Excel.run(function (context) {
var sheet = context.workbook.worksheets.getItem("Sheet1");
var range = sheet.getRange("A3");
if (range.value == "") {
range.values = (arg.message);
range.format.autofitColumns();
return context.sync();
} else {
range.getOffsetRange(1, 0).values = (arg.message)
return context.sync();
}
}).catch(errorHandler);
}
PS: 整个代码以防其他地方有问题
(function () {
"use strict";
// The initialize function must be run each time a new page is loaded.
Office.initialize = function (reason) {
$(document).ready(function () {
// Add a click event handler for the button.
$('#popup-button').click(opensesame);
$('#simple-button').click(function () {
Office.context.document.getSelectedDataAsync(Office.CoercionType.Text,
function (result) {
if (result.status === Office.AsyncResultStatus.Succeeded) {
$("#banner-text").text('The selected text is: "' + result.value + '"');
$("#banner").show(result.value);
console.log()
} else {
$("#banner-text").text('Error: ' + result.error.message);
$("#banner").show();
}
});
});
$("#banner-close").click(function () { $("#banner").hide(); });
$("#banner").hide();
});
}
let dialog = null;
function opensesame() {
Office.context.ui.displayDialogAsync(
'https://localhost:3000/popup.html',
{ height: 35, width: 25 },
function (result) {
dialog = result.value;
dialog.addEventHandler(Microsoft.Office.WebExtension.EventType.DialogMessageReceived, processMessage);
}
);
}
function processMessage(arg) {
console.log(arg.message);
$('#user-name').text(arg.message);
dialog.close();
Excel.run(function (context) {
var sheet = context.workbook.worksheets.getItem("Sheet1");
var range = sheet.getRange("A3");
if (range.value == "") {
range.values = (arg.message);
range.format.autofitColumns();
return context.sync();
} else {
range.getOffsetRange(1, 0).values = (arg.message)
return context.sync();
}
}).catch(errorHandler);
}
})();
Range 对象有 values
属性,但没有值 属性。所以 range.value
在你的条件测试中是 undefined 不匹配空字符串;因此 else
子句运行。
其他几件事:
- 您的条件试图读取
range
对象的 属性。您必须load
属性 并调用context.sync
才能阅读 属性. -
range.values
属性 的值是一个二维数组(尽管如果范围是单个单元格,它可能只有一个值)。它不是字符串,因此将它与空字符串进行比较总是false
。
如果我理解您的目标,我认为您应该测试 range.values
(加载并同步后)是否在其唯一单元格中有一个空字符串。例如,if (range.values[0][0] === "")
。从性能的角度来看更好的是加载 range.valueTypes
属性(和同步)然后像这样比较:if (range.valueTypes[0][0] === Excel.RangeValueType.empty)
.