Range.entityValue, похоже, не сохраняется после завершения функцииJavascript

Форум по Javascript
Ответить
Anonymous
 Range.entityValue, похоже, не сохраняется после завершения функции

Сообщение Anonymous »

Я работаю над настраиваемой надстройкой Excel и хочу использовать EntityValue для создания поведения, аналогичного встроенному типу данных акций (и документация здесь: https://github.com/officeedev/office-add -in-samples/tree/main/samples/excel-data-types-explorer). Тем не менее, EntityValue, похоже, не сохраняется за пределами функции, в которой она создается, поэтому, когда я иду, чтобы прочитать EntityValues, это не определен. manifest.xml (в начинном начинке): < /p>

Код: Выделить всё

    
TestData









< /code>
Таким образом, все, что мы действительно захватываем в этом образце, это количество и цена для продукта. Имя (скажем, «Молотки») и запустите команду из ленты, которая преобразует эту ячейку в объект TestData: < /p>
async function createProductDataType(event) {
try {
await Excel.run(async (context) => {
// Get the currently selected cell.
const range = context.workbook.getSelectedRange();
range.load(["address", "values", "entityValue"]);
await context.sync();

console.log("Converting cell to Product Data Type...");

// Assume the user entered a product into the cell.
const productID = range.values[0][0];

console.log("Product ID: " + productID);

// Populate additional details for the product (just for testing)
const productData = {
prdID: productID,
quantity: 123,
price: 2.95,
};

console.log("productData:" + JSON.stringify(productData, null, 2));

// Just write the a version of productID to verify
range.values = [["product type: " + productID]];

console.log("Range Values: " + JSON.stringify(range.values, null, 2));

// Create an object that conforms to the Excel.EntityValue interface.
const productEntity = {
entityType: "TestData", // matches the type defined in the manifest.
prdID: productID, // A unique identifier for the entity instance.
data: productData, // The detailed data for the entity.
};

// Assign productEntity to the entityValue property of the cell.
range.entityValue = productEntity;

// Update the cell's format to indicate it’s been converted.
range.format.fill.color = "#88D3AF";

range.load(["entityValue", "entityValue/entityType"]);
await context.sync();

// Verify the data in the cell
console.log("Entity Value:" + JSON.stringify(range.entityValue, null, 2));
console.log("Cell type: " + range.entityValue.entityType);

await context.sync();
});
} catch (error) {
console.log("Error in product Data Type creation: " + error);
} finally {
// Notify the host that the command function is complete.
event.completed();
}
}
< /code>
Вызывая эту функцию из ленты ведет себя так, как и ожидалось. Консоль обновляется следующим образом: < /p>
[Log] "Converting cell to Product Data Type..."
[Log] "Product ID: Hammers"
[Log] "productData:{\n  \"prdID\": \"Hammers\",\n  \"quantity\": 123,\n  \"price\": 2.95\n}"
[Log] "Range Values:[\n  [\n    \"product type: Hammers\"\n  ]\n]"
[Log] "Entity Value:{\n  \"entityType\": \"TestData\",\n  \"prdID\": \"Hammers\",\n  \"data\": {\n    \"prdID\": \"Hammers\",\n    \"quantity\": 123,\n    \"price\": 2.95\n  }\n}"
[Log] "Cell type: TestData"
< /code>
Пока что (вроде) хорошо.  Если я попытаюсь извлечь какие -либо данные из другой ячейки (например, a2.quantity), это вернет ошибку #field! (И не было никаких изменений в ячейке, где мы создали этот тип данных объекта с небольшим значком). < /p>
Однако для проверки я создал вторую функцию, которая запрашивает, что ячейка для получения объекта ДАННЫЕ: (Имя функции не имеет значения, это просто код для проверки): < /p>
    // Get the currently selected cell.
const range = context.workbook.getSelectedRange();
range.load(["address", "values", "entityValue"]);
await context.sync();

console.log("Checking on entity data for cell from another function...");
console.log("Value of CELL: " + range.values[0][0]);
console.log("Entity Value CELL: " + JSON.stringify(range.entityValue, null, 2));
< /code>
Когда я смотрю на журнал консоли для этого, вот что я вижу: < /p>
[Log] "Checking on entity data for cell from another function..."
[Log] "Value of CELL: product type: Hammers"
[Log] "Entity Value CELL: undefined"
Итак, кажется, что EntityValue/Type на самом деле не был установлен в ячейке.
Что я делаю не так? (Запуск последней бета -версии Excel, и я установил требования для версии Excelapi на 1.18).

Подробнее здесь: https://stackoverflow.com/questions/794 ... -completes
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»