首页 > 解决方案 > Excel 加载项仅保存一次然后生成另一个 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 函数在函数中加载了一个文档,该函数位于 beta office.js 中。这是它在存储中接收带有 excel 文件的 url 然后将整个文件解析为 base 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) {

                                }
                            });
                        });

标签: javascriptexceloffice-jsexcel-addins

解决方案


推荐阅读