找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-5-28 18:15  /   查看:11229  /  回复:0
本帖最后由 Clark.Pan 于 2024-3-19 09:52 编辑

本贴总结了授权问题的常见几种情况及处理方式
在遇到授权问题时,首先需要验证清空缓存后是否还有问题,如果问题仍然存在,请接着看下面文章。
从授权的表现形式上来看,出错的授权一般有三种表现形式:

一、提示:授权未找到(License not found)
image.png241245726.png
image.png840267028.png
出现此问题的原因是没有加入授权或者加入授权方式不正确。如已加入授权请检查:
1.  授权变量是否输入正确;GC.Spread.Sheets.LicenseKey  是否有拼写错误。
2.  授权设置代码是否在初始化  SpreadJS  控件之前,一般在引用完  SpreadJS  资源后直接加入授权代码。
3.  如果您用的是npm或者yarn这种包管理工具,需要确认一下package.json中SpreadJS引用的版本是否一致。
下图是一个错误用例:
image.png330976561.png
尽管引用版本都是V15.2.2,但部分引用前加了“^”符号,“^”符号会自动更新到符合指定范围的最新版本,但不会更新到不兼容的主要版本。简单来说就是会在大版本V15不变的情况下,引用最新的V15版本的安装包。这样的话,会造成带“^”和不带“^”的相关引用版本不一致的情况。
这种情况下也会导致授权时可能出现授权未找到的情况。

二、提示:无效许可证(Invalid license key)
image.png451826171.png
image.png482129210.png
出现此问题说明添加授权的方式没有问题,原因可能是授权和当前网站地址不匹配或者和使用版本不匹配。
请检查以下几点:
1.  确认授权和  SpreadJS  使用版本是否一致。
     SpreadJS的部署授权是一个大版本中通用的,例如V14的部署授权可以在V14.1中使用。但是V13的部署授权无法在V14的版本中使用,需要联系商务进行升级。
2.  确认授权的网站地址与当前网页地址是否匹配。
       i. 是否存在授权为IP地址,网页地址是对应的域名(在SpreadJS的部署授权中,域名和IP是分开的,如果是域名的授权就只能通过对应的域名进行访问。同理IP也是一样)。
      ii. 如果SpreadJS页面是在iframe中的,那么授权应该对应的是iframe中的地址而非浏览器地址栏的地址。
     iii. 一些浏览器在输入地址的时候会自动省略www的开头。这里要确认真正的域名是否包含www。如果真正的域名包含www,那么部署授权一定也要是包含www的对应域名的授权,反之则不包含。遇到这样的情况,可以通过在浏览器控制台中输入window.location.hostname进行判断,该结果需要与部署授权保持一致。
3. 确认授权是否复制/输入完整。
        由于SpreadJS的部署授权较长,通常通过邮件发送的时候,可能会被用户忽略掉超出邮件页面显示的部分(注意邮件中的滚动条)。
        另外,有些用户在复制授权的时候会忽略掉授权逗号之前的前缀,这样做会导致授权不正确。所以在复制的时候需要完全复制。
4. 确认页面实际生效的授权是否与授权码一致
        可以通过代码中输出license或控制台查看下GC对象中的license,对比是否与设置的授权码一致。比如,当授权码中包含&符号时,可能会由于授权对象的进一步封装调用,导致被转义为 image.png963080444.png ,从而使授权码无效。
5 如果是有时间限制的正式授权,在过期之后也会出现无效许可证的提示,符合这种情况请优先检查授权是否过期。

三、提示:临时部署授权已过期(temporary deployment key has expired
image.png299162902.png
image.png162935179.png
出现此问题说明申请的临时部署授权过期了,这个时候请联系我们的商务同事。

四、其他问题
如果上述情况不能解决您的问题,请看下面问题整理。此处问题均为用户实际遇到的问题,如果您也有类似情况,请按照记载的解决方法进行处理。
1. SpreadJS正常运行,已经去掉水印提示。但是导入Excel文件之后发现多了一个提示授权的sheet(有些情况下也可能导入后只剩这一个sheet)。并显示授权未找到。
    这种情况有两个原因,第一种是在VUE,React,Angular框架中(如果没有用上述框架可以直接跳过往后看)。在上述框架中ExcelIO(导入导出)模块需要单独授权。发生上述问题原因就是只授权了SpreadJS,没有对ExcelIO进行授权。在授权时需要同时对SpreadJS和ExcelIO进行授权,例如下面代码:
  1. import React from 'react';
  2. import './App.css';
  3. import GC from '@grapecity/spread-sheets';
  4. import { SpreadSheets, Worksheet } from '@grapecity/spread-sheets-react';

  5. // 导入ExcelIO模块
  6. import * as spreadExcel from '@grapecity/spread-excelio';

  7. // 导入文件保存模块
  8. import saveAs from 'file-saver';

  9. //同时对SpreadJS与ExcelIO进行授权
  10. GC.Spread.Sheets.LicenseKey = spreadExcel.LicenseKey = "your key";
复制代码
      另一个可能出现上述问题的原因,该Excel文件可能经过试用版导出过,试用版导出的时候同样会创建一个提示授权的sheet。虽然后面部署了正式版本,但是导入的文件中已经存在了这个sheet,用正式版导入只能说不再新建,但是既有的不会删除。针对这种情况,需要手动找到Excel文件打开并删除掉提示授权的sheet。之后就可以正常导入了。
2.授权已经正确加入并排除了代码书写和位置问题。但结果提示授权未找到。这种情况只有在框架下会发生。       这种情况有可能是因为打包问题导致,不同的打包策略下,有可能出现生成多个GC命名空间的情况。导致授权没有加到真正使用的GC命名空间上。目前已知cnpm在某种情况下可能会出现上述情况。如果用户使用的是cnpm,请将package-lock.json文件和node_modules文件夹删除后,更换成源生的npm源。重新npm install 后打包运行。
3.使用在线表格编辑器时,控制台出现register相关错误
      这里注意在线表格编辑器页面中import的顺序和授权的引用顺序,具体顺序参考在线表格编辑器安装包中的sample文件。下面附一个react框架下的引用顺序供参考:
  1. import React from 'react';
  2. import * as GC from '@grapecity/spread-sheets';
  3. import "@grapecity/spread-sheets-pivot-addon";
  4. import '@grapecity/spread-sheets-resources-zh';
  5. import '@grapecity/spread-sheets-designer-resources-cn';
  6. import {Designer} from '@grapecity/spread-sheets-designer-react';
  7. import "@grapecity/spread-sheets-designer/styles/gc.spread.sheets.designer.min.css"
  8. import "@grapecity/spread-sheets/styles/gc.spread.sheets.excel2013white.css"
  9. import "./custom.css"
复制代码
4.使用在线表格编辑器时,控制台出现PDF与tQa相关错误
错误原因可能会有两种情况1.是请注意package.json中引用的SpreadJS版本号后有没有向上的箭头,如下图红框所示
image.png374965819.png
加上箭头代表有更高的版本就用更高的版本进行适配,这就会导致SpreadJS相关引用的版本不能保持一致,导致错误。
该箭头要么所有的SpreadJS相关引用都加上,要么都去掉。不能一部分有,一部分没有。另外,SpreadJS相关引用的版本一定要保持一致,都用一个版本。2.tQa可能会出现在导出PDF时,导出PDF相关功能需引入print 打印的相关js文件。存在着引用的先后关系。print需在先,PDF在后。引用顺序错误也会出现tQa的错误。
5.授权出现 Cannot set property 'LicenseKey' of undefined 相关错误
image.png841022338.png
上述问题一般出现在V13升级到V14的过程中,并且引用了ExcelIO功能。在V13中支持下面两种写法:

  1. import * as ExcelIO from "@grapecity/spread-excelio";
  2. import ExcelIO from "@grapecity/spread-excelio";
复制代码
其中这样的写法:import ExcelIO from "@grapecity/spread-excelio"; 在V14版本之后不被支持。目前仅支持
  1. import * as ExcelIO from "@grapecity/spread-excelio";
复制代码
这一种import方式。之前使用import ExcelIO from "@grapecity/spread-excelio";这样写法的用户在升级之后就会出现Cannot set property 'LicenseKey' of undefined的错误。解决方法是将import ExcelIO from "@grapecity/spread-excelio"改为import * as ExcelIO from "@grapecity/spread-excelio";







0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部