gpt4 book ai didi

javascript - 运算符 '<' 无法通过 Excel 加载项应用于类型 'number' 和 'Promise'

转载 作者:行者123 更新时间:2023-12-02 22:45:01 26 4
gpt4 key购买 nike

我正在制作一个 Excel 插件,我想将 Excel 中电子表格的数据转换为 Javascript 中的二维数组,但我无法获取要转换的数据,并且我一直无法弄清楚如何修复它,如何修复 promise 以使函数返回一个数字。 getData 函数也存在此问题。

它位于 Excel 加载项的 taskpane.js 上。我尝试过 .then()、在变量之前等待、然后让,但我无法让它工作。

import { get } from "http";

/*
* Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
* See LICENSE in the project root for license information.
*/

import { get } from "http";

/*
* Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
* See LICENSE in the project root for license information.
*/

Office.onReady(info => {
// Determine if the user's version of Office supports all the Office.js APIs that are used in the tutorial.
if (!Office.context.requirements.isSetSupported('ExcelApi', '1.7')) {
console.log('Sorry. The tutorial add-in uses Excel.js APIs that are not available in your version of Office.');
}

// Assign event handlers and other initialization logic.
document.getElementById("run").onclick = run;
if (info.host === Office.HostType.Excel) {
document.getElementById("sideload-msg").style.display = "none";
document.getElementById("app-body").style.display = "flex";
}
});

function Create2DArray(rows) {
var arr = [];

for (var i = 0; i < rows; i++) {
arr[i] = [];
}

return arr;
}

function sortedData() {
var rows = getRowCount();
var arrImport = getData();
var arrExport = Create2DArray(rows);
for (var r = 0; r < rows; r++) {
arrExport[r][0] = arrImport[r][1];//money
arrExport[r][1] = arrImport[r][5];//Company
arrExport[r][2] = arrImport[r][0];//date
}
return arrExport;
}

async function getRowCount() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
var rowCount = 0;

for (var i = 0; i >= 0; i++) {
var cell = sheet.getCell(i, 0);
cell.load("address, values");
await context.sync();
if (cell.values[0][0] == "") {
break;
}
else {
rowCount++;
}
}
await context.sync();
return rowCount;
});
}

async function getData() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
//let rowCount = await getRowCount();
var rowCount = getRowCount();
var arrExport = Create2DArray(rowCount);

for (var r = 0; r < rowCount; r++) {
for (var c = 0; c < 5; c++) {
var cell = sheet.getCell(r, c);
cell.load("address, values");
await context.sync();
arrExport[r][c] = cell.values[0][0];
}
}
await context.sync();
return arrExport;
})
}

async function run() {
await Excel.run(async (context) => {
var currentWorksheet = context.workbook.worksheets.getActiveWorksheet();
rows = getRowCount();
})
.catch(function (error) {
console.log("Error: " + error);
if (error instanceof OfficeExtension.Error) {
console.log("Debug info: " + JSON.stringify(error.debugInfo));
}
});
}

我想从我的 Excel 电子表格中获取已使用的行数,但我无法让它工作,而且我无法弄清楚异步。错误是标题。

最佳答案

第一个问题,由于 getRowCount 是异步的,它返回一个 Promise

第二个问题,getRowCount 实际上没有返回任何内容

async function getRowCount() {
let returnValue;
await Excel.run(async(context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
var rowCount = 0;

for (var i = 0; i >= 0; i++) {
var cell = sheet.getCell(i, 0);
cell.load("address, values");
await context.sync();
if (cell.values[0][0] == "") {
break;
} else {
rowCount++;
}
}
await context.sync();
returnValue = rowCount;
});
return returnValue;
}

可能有更好的方法来执行上述操作,但我不知道此 Excel.run 等的工作原理,所以只要 Excel.run 返回一个 Promise - 我认为这是因为您使用 等待 - 那么上面的应该可以工作

并且,您的代码中的用法是

async function getData() {
await Excel.run(async (context) => {
const sheet = context.workbook.worksheets.getActiveWorksheet();
let rowCount = await getRowCount();
var arrExport = Create2DArray(rowCount);

for (var r = 0; r < rowCount; r++) {
.
.
.

现在应该可以工作了

关于javascript - 运算符 '<' 无法通过 Excel 加载项应用于类型 'number' 和 'Promise<void>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58441121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com