Как проверить, пуста ли ячейка в Office.js - PullRequest
0 голосов
/ 02 декабря 2018

Я только начал работать с надстройками Office и экспериментирую с функциональностью.У меня есть несколько пользовательских форм VBA, которые я хотел бы заменить всплывающими окнами из надстройки Office.

Я использую следующий код для ввода строки в ячейку (ничего особенного, я знаю), но я бы хотелпроверить, если ячейка пуста перед передачей значения.Если это так, введите (arg.message).

проблема, с которой я столкнулся: при if (range.value == "") значение устанавливается в «A4», даже если «A3», если пусто;с if (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);
    }

        })();

1 Ответ

0 голосов
/ 03 декабря 2018

Объект Range имеет свойство values, но не свойство value.Таким образом, range.value в вашем тесте состояния равно undefined , что не соответствует пустой строке;следовательно, выполняется условие else.

Пара других вещей:

  1. Ваше условие пытается прочитать свойство объекта range.Вы должны load свойство и вызвать context.sync, прежде чем сможете прочитать свойство.
  2. Значение свойства range.values является двумерным массивом (хотя оно может иметь одно значение в немесли диапазон представляет собой одну ячейку).Это не строка, поэтому сравнение ее с пустой строкой всегда будет false.

Если я понимаю вашу цель, я думаю, вам следует проверить, есть ли в range.values (после загрузки и синхронизации) пустая строка в единственной ячейке.Например, if (range.values[0][0] === "").Еще лучше с точки зрения производительности загрузить свойство range.valueTypes (и синхронизировать), а затем сравнить так: if (range.valueTypes[0][0] === Excel.RangeValueType.empty).

...