Надстройка Excel сохраняется только один раз, затем генерирует другой Excel и выходит из строя

#javascript #excel #office-js #excel-addins

#javascript #excel #office-js #excel-надстройки

Вопрос:

Итак, я сейчас работаю с надстройкой Excel, и у меня есть функция принудительного сохранения документа и загрузки его в хранилище. Это работает, когда вы нажимаете-это в первый раз, но затем открывается новое окно Excel со случайным числом, например «F7E57000», и вместо принудительного сохранения предлагается сохранить где-нибудь на диске. Если я нажму сохранить, то исходное окно с открытой надстройкой исчезнет, а если я нажму отменить, то Excel выйдет из строя.

это код из функции надстройки

 $(".uploadBack").click(function (e) {
            Excel.run(function (context) {
                context.workbook.save(Excel.SaveBehavior.save);
                return context.sync().then(() => {
                    return Office.context.document.getFilePropertiesAsync(function (asyncResult) {
                        return new OfficeExtension.Promise(function (resolve, reject) {
                            var fileUrl = asyncResult.value.url;
                            $.ajax({
                                url: "/uploadPlantaBack",
                                data: {
                                    filePath: fileUrl,
                                    id: e.currentTarget.dataset.escenarioid,
                                    descripcion: $("#Descripcion").val(),
                                    comentario: $("#Comentario").val()
                                },
                                type: "POST",
                                success: function (response) {
                                    Swal.fire({
                                        position: 'center',
                                        type: 'success',
                                        title: 'La configuracion se subio con exito',
                                        showConfirmButton: false,
                                        timer: 1500
                                    })
                                    resolve();
                                },
                                error: function (error) {
                                    Swal.fire({
                                        position: 'center',
                                        type: 'error',
                                        title: error,
                                        showConfirmButton: true
                                        
                                    })
                                    reject();
                                }
                            });
                        })
                    });
                });
            });
        });
  

Обновление: прежде чем возникнет эта проблема, я загружаю документ в функцию с помощью функции addfrombase64, которая находится в бета-версии office.js . Вот код, в котором он получает URL-адрес с файлом Excel в хранилище, а затем анализирует весь файл до базы 64

 $(".excelReplica").click(function (e) {
                            $.ajax({
                                url: '/toBase64',
                                data: { url: e.currentTarget.dataset.url },
                                success: function (base64String) {
                                    Excel.run(function (context) {
                                        return new OfficeExtension.Promise(function (resolve, reject) {
                                            var sheets = context.workbook.worksheets;
                                            sheets.load("items/name");
                                            context.sync().then(() => {
                                                var countSheets = sheets.items.length;
                                                sheets.addFromBase64(
                                                    base64String,
                                                    null, // get all the worksheets
                                                    Excel.WorksheetPositionType.after, // insert them after the worksheet specified by the next parameter
                                                    sheets.getActiveWorksheet() // insert them after the active worksheet
                                                );
                                                sheets.load("items/name");
                                                context.sync().then(() => {

                                                    var firstSheet = sheets.items[countSheets];
                                                    firstSheet.activate();
                                                    firstSheet.load(firstSheet.name);

                                                    for (var i = countSheets - 1; i >= 0; i--) {
                                                        sheets.items[i].delete();
                                                    }
                                                    context.sync().then(() => {
                                                        window.location = '/Escenarios/Details/'   e.currentTarget.dataset.id;
                                                    });
                                                });

                                            });
                                            resolve();
                                        });

                                    });
                                },
                                error: function (a) {

                                }
                            });
                        });
  

Комментарии:

1. мне кажется, что это ошибка, она не должна приводить к сбою Excel в любое время, но, похоже, ваш пример кода не может быть запущен, как ожидалось, на моей стороне. чтобы помочь нам воспроизвести и найти проблему, не могли бы вы помочь нам, экспортировав суть script lab? learn.microsoft.com/en-us/office/dev/add-ins/overview /…

2. Итак, я изложил суть, это прямо здесь gist.github.com/UnForastero/9c3f78d9f02ad22f42f47316f0314bd4 и дело в том, что он отлично работает при создании нового документа. Возможно, это не работает, потому что Excel на первом месте находится в режиме только для чтения при отладке в Visual Studio.

3. Спасибо @Nino, я только что попробовал вашу суть, здесь все работает нормально. исходя из ваших комментариев выше, означает ли это, что вы нашли основную причину этой проблемы?

4. К сожалению, нет. Я пробовал использовать файл Excel, не доступный только для чтения, и у меня все еще есть документ с номером, например 0BF90300. Как я уже сказал, это работает один раз, а затем происходит сбой, мне нужно снова открыть файл Excel для сохранения. Я думаю, что это что-то вроде переполнения памяти. Не знаю, есть ли что-то, чтобы очистить его, если то, что я говорю, верно.

5. Я обновил вопрос, в котором я использую функцию из бета-версии из office.js возможно, проблема в этом.