【问题标题】:Excel Add In - Javascript only working after reloadExcel Add In - Javascript 仅在重新加载后工作
【发布时间】:2022-07-22 02:10:59
【问题描述】:

我正在使用 Office-JS 库开发 Excel 加载项。 部分页面加载时,JS加载不正确。

Javascript 仅在重新加载页面后才能工作。

I disabled turbolink as suggested in another question. 但是我的问题还是出现了。

我的 office_connect.js 包含以下内容:

//= require jquery3
//= require jquery_ujs
//= require_self
//= require select2-full
//= require select2_locale_de

还有我的布局文件的头部:

<%= yield :head_top %>

<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />

<%= stylesheet_link_tag "office_connect"%>
<%= javascript_include_tag "office_connect_app"%>
<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js" type="text/javascript"></script>
<%= javascript_include_tag "oc_function"%>
<%= javascript_include_tag "office_excel"%>

<title><%=t('layouts.head.text_immodatacockpit')%></title>
<%= csrf_meta_tag %>

<%= yield :head %>

oc_function 文件启动 Office JS:

// The initialize function must be run each time a new page is loaded.
(function () {
    Office.initialize = function (reason) {
        // If you need to initialize something you can do so here.
    };
})();

我的 excel.js 的缩短版本:

(function () {
    "use strict";

    var cellToHighlight;
    var messageBanner;
    var config;
    var sheetData;
    let housing_output_template_new;
    let housing_output_template_edit;

    // The initialize function must be run each time a new page is loaded.
    Office.initialize = function (reason) {
        $(document).ready(function () {
            
            $(".spinner").hide();
            // If not using Excel 2016, use fallback logic.
            if (!Office.context.requirements.isSetSupported('ExcelApi', '1.1')) {
              $('#subtitle').text("Opps!");
              $("#template-description").text("Sorry, this sample requires Word 2016 or later. The button will not open a dialog.");
              $('#button-text').text("Button");
              $('#button-desc').text("Button that opens dialog only on Word 2016 or later.");
                return;
            }
            $("#select1").select2({placeholder: 'Please choose' , language:'<%= I18n.locale %>',dropdownAutoWidth:true});
            $(".select4").select2({placeholder: 'Please choose' , language:'<%= I18n.locale %>',dropdownAutoWidth:true});
            });
    }
})();

我认为这与我加载 JS 库的顺序有关。

你能指出我所缺少的方向吗?

【问题讨论】:

  • 您是否尝试在附加的调试器下运行代码?您是否尝试过使用浏览器开发工具?您的主机应用程序是什么?您是否在所有支持的平台(浏览器、桌面等)上获得相同的结果?
  • 您好尤金,谢谢您的评论。我已经尝试过开发人员工具,javascript 源代码没有完全加载。它发生在桌面版本、Mac 和 Windows 上。我在我的本地主机上尝试了它进行开发,并在 nginx 后面的 docker 容器上尝试了一个“高效”的测试环境......
  • 您似乎在两个地方分配了 Office.initialize。如果这些调用在两个不同的页面上,那没关系。但是你不应该在同一个页面上这样做两次。
  • 嗨 Rick,谢谢它现在可以工作了 :-) 你能把它作为答案,所以我可以接受吗?

标签: ruby-on-rails excel office-js office-addins excel-addins


【解决方案1】:

您似乎在两个地方分配了Office.initialize。如果这些调用在两个不同的页面上,那没关系。但是你不应该在同一个页面上这样做两次。

【讨论】:

    猜你喜欢
    • 2021-03-09
    • 1970-01-01
    • 2013-07-12
    • 2013-06-23
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多