Как разработать надстройку для веб-Excel, которая передает данные в Azure и возвращает результаты из Azure обратно в Excel? - PullRequest
0 голосов
/ 29 апреля 2020

Я новичок в использовании Visual Studio (очень ограниченное знание JavaScript) и больше привык к написанию макросов в VBA. Мы хотели бы создать надстройку для Excel Web, которая позволит пользователям легко обучать построенной нами модели Azure (вместо использования почтальона). Это создаст серию строк, которые объединяют все значения из каждой строки (то есть строка должна читать '["AB C", "BCD", "CDE"], ["DEF", "EFG", "FGH" ] ') ​​и передайте массив этих строк (один элемент на строку данных) в URL-адрес конечной точки. Вызовите модель ML в Azure, которая будет возвращать прогноз (одно значение на строку данных, поэтому возвращает массив «A», «F», «A», «F»), чтобы присоединить прогнозируемый результат к каждая строка возвращается в Excel. Для первой части я планирую использовать два цикла for для l oop через каждую строку и столбец. все еще отлаживаю ниже:

function hightlightHighestValue() {
        // Run a batch operation against the Excel object model
        Excel.run(function (ctx) {
            // Create a proxy object for the selected range and load its properties
            var sourceRange = ctx.workbook.getSelectedRange().load("values, rowCount, columnCount");

            // Run the queued-up command, and return a promise to indicate task completion
            return ctx.sync()
                .then(function () {
                    var highestRow = 0;
                    var highestCol = 0;
                    var highestValue = "";

                    // Find the cell to highlight
                    for (var i = 0; i < sourceRange.rowCount; i++) {
                        for (var j = 0; j < sourceRange.columnCount; j++) {
                            //if (!isNaN(sourceRange.values[i][j]) && sourceRange.values[i][j] > highestValue) {
                            //    highestRow = i;
                            //    highestCol = j;
                            //    highestValue = sourceRange.values[i][j];
                            //}
                            if (j == 1) { //we add '[' before the start of each row
                                highestValue += highestValue + '[';
                                if (typeof sourceRange.values[i][j] == 'number') {
                                    highestValue += highestValue + sourceRange.values[i][j].toString() + ',';
                                }
                                if (typeof sourceRange.values[i][j] == 'string') {
                                    highestValue += highestValue + '"' + sourceRange.values[i][j] + '",';
                                }
                            }
                            //["USS","USSS6S601","Sandy Conway","R3APOProcType",12438428,"F","E","X0",1001,0,5519,"TEX","Z3"],
                            //["USS", "USSS6S601", "Sandy Conway", "R3APOProcType", 12438429, "F", "E", "X0", 1001, 0, 5519, "TEX", "Z3"],
                            // if it's not the first column, then 
                            if (typeof sourceRange.values[i][j] == 'number') { 
                                highestValue += highestValue + sourceRange.values[i][j].toString() + ',';
                            }
                            if (typeof sourceRange.values[i][j] == 'string') {
                                highestValue += highestValue + '"' + sourceRange.values[i][j] + '",';
                            }
                            // if it's the last column
                            if (j == sourceRange.columnCount && !(i == sourceRange.rowCount)) { //we add '],' at the end of each row
                                if (typeof sourceRange.values[i][j] == 'number') {
                                    highestValue += highestValue + sourceRange.values[i][j].toString() + ',';
                                }
                                if (typeof sourceRange.values[i][j] == 'string') {
                                    highestValue += highestValue + '"' + sourceRange.values[i][j] + '",';
                                }
                                highestValue += highestValue + '],';
                            }
                            if (j == sourceRange.columnCount && (i == sourceRange.rowCount)) { //we add ']' at the end of the last row
                                if (typeof sourceRange.values[i][j] == 'number') {
                                    highestValue += highestValue + sourceRange.values[i][j].toString() + ',';
                                }
                                if (typeof sourceRange.values[i][j] == 'string') {
                                    highestValue += highestValue + '"' + sourceRange.values[i][j] + '",';
                                }
                                highestValue += highestValue + ']';
                            }
                        }
                    }
                    //cellToHighlight = sourceRange.getCell(highestRow, highestCol);
                    //sourceRange.worksheet.getUsedRange().format.fill.clear();
                    //sourceRange.worksheet.getUsedRange().format.font.bold = false;

                    // Highlight the cell
                    //cellToHighlight.format.fill.color = "orange";
                    //cellToHighlight.format.font.bold = true;
                    var finalString = '{"data":[' + highestValue + ']}';
                })
                .then(ctx.sync);
        })
        .catch(errorHandler);
    }

Может кто-нибудь сказать мне, как сделать вторую часть (напишите модель данными и получите прогнозируемый результат), пожалуйста? Буду признателен за любую помощь!

...