找回密码
 立即注册

QQ登录

只需一步,快速开始

云智装
金牌服务用户   /  发表于:2021-11-18 15:28  /   查看:2231  /  回复:7
1金币
image.png900752258.png
如上图一个单元格存在多个按钮,怎么判断点击了按钮1还是按钮2呢;使用command,是可以获取当前点击的事件,但是反系列化后就不执行了。





image.png578416137.png

最佳答案

查看完整内容

前面描述不太准确,已在原回答基础上做了更改。 示例请参考下方链接: https://gcdn.grapecity.com.cn/forum.php?mod=viewthread&tid=82896

7 个回复

倒序浏览
最佳答案
最佳答案
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-18 15:28:08
来自 6#
前面描述不太准确,已在原回答基础上做了更改。
示例请参考下方链接:
https://gcdn.grapecity.com.cn/fo ... hread&tid=82896
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-18 16:45:31
2#
按钮执行的command代码逻辑,是您在设计按钮时就已经设置的,
所以要判断是点击的哪个按钮,可以在command中就定义好,比如用一个变量来控制。
”使用command,是可以获取当前点击的事件,但是反系列化后就不执行了。“
这个如何理解,请结合具体的示例详细描述下。
附件为demo模板,您可以在模板基础上添加自己的代码,需要能复现您描述的问题。

demo-sjs模板.html

2.6 KB, 下载次数: 81

回复 使用道具 举报
云智装
金牌服务用户   /  发表于:2021-11-18 17:01:54
3#
Lynn.Dou 发表于 2021-11-18 16:45
按钮执行的command代码逻辑,是您在设计按钮时就已经设置的,
所以要判断是点击的哪个按钮,可以在command ...

image.png560137633.png
react 代码
  1. import * as React from 'react';
  2. import * as ReactDOM from 'react-dom';
  3. import '@grapecity/spread-sheets-resources-zh';
  4. GC.Spread.Common.CultureManager.culture("zh-cn");
  5. import GC from '@grapecity/spread-sheets';
  6. import { SpreadSheets, Worksheet, Column } from '@grapecity/spread-sheets-react';
  7. import './styles.css';

  8. const Component = React.Component;

  9. function _getElementById(id) {
  10.     return document.getElementById(id);
  11. }

  12. class App extends Component {
  13.     constructor(props) {
  14.         super(props);
  15.         this.spread = null;
  16.         this.spread2 = null;
  17.         this.import_noFormula = false;
  18.         this.import_noStyle = false;
  19.         this.import_rowHeaders = false;
  20.         this.import_columnHeaders = false;
  21.         this.import_donotrecalculateafterload = false;
  22.         this.noFormula = false;
  23.         this.noStyle = false;
  24.         this.SaveCustomRowHeaders = false;
  25.         this.SaveCustomColumnHeaders = false;
  26.     }
  27.     onClickType(){
  28.         alert(11)
  29.     }
  30.     render() {
  31.         return <div class="sample-tutorial">
  32.             <div class="sample-spreadsheets-container">
  33.                 <label style={{ font: 'bold 10pt arial' }}>ToJson:</label>
  34.                 <div class="sample-spreadsheets">
  35.                     <SpreadSheets workbookInitialized={spread => this.initSpread(spread)}>
  36.                         <Worksheet></Worksheet>
  37.                     </SpreadSheets>
  38.                 </div>
  39.                 <br />
  40.                 <label style={{ font: 'bold 10pt arial' }}>FromJson:</label>
  41.                 <div class="sample-spreadsheets">
  42.                     <SpreadSheets workbookInitialized={spread => this.initSpread2(spread)}>
  43.                         <Worksheet></Worksheet>
  44.                     </SpreadSheets>
  45.                 </div>
  46.             </div>
  47.             <div className="options-container">
  48.                 <div style={{ width: '290px' }}>
  49.                     <label>This serializes the first Spread instance to a JSON object, and then deserializes that object into the second Spread instance.</label>
  50.                     <div className="option-row">
  51.                         <input type="button" defaultValue="系列化" id="fromtoJsonBtn" onClick={e => this.serialization(e)} />
  52.                     </div>
  53.                 </div>
  54.             </div>
  55.         </div>;
  56.     }
  57.     initSpread(spread) {
  58.         this.spread = spread;
  59.         let sheet = spread.getSheet(0);
  60.         var spreadNS = GC.Spread.Sheets;
  61.         sheet.suspendPaint();
  62.         sheet.setColumnWidth(0, 300);
  63.          let  style = new GC.Spread.Sheets.Style();
  64.         style.cellButtons = [
  65.             {
  66.                 caption: "按钮1",
  67.                 buttonBackColor: "#82BC11",
  68.                   command: (sheet, row, col, option) => {
  69.                    this.onClickType()
  70.                 }
  71.             },
  72.              {
  73.                 caption: "按钮2",
  74.                 buttonBackColor: "#82BC00",
  75.                   command: (sheet, row, col, option) => {
  76.                     this.onClickType()
  77.                 }
  78.             }
  79.         ];
  80.         sheet.setStyle(0, 0, style);
  81.         sheet.resumePaint();
  82.     }
  83.     initSpread2(spread) {
  84.         this.spread2 = spread;
  85.     }
  86.     serialization(e) {
  87.         //ToJson
  88.         var spread1 = this.spread;
  89.         var jsonStr = JSON.stringify(spread1.toJSON());
  90.         //FromJson
  91.         var spread2 = this.spread2;
  92.         spread2.fromJSON(JSON.parse(jsonStr));
  93.     }
  94. }

  95. ReactDOM.render(<App />, _getElementById('app'));
复制代码


回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-18 17:33:42
4#
本帖最后由 Lynn.Dou 于 2021-11-19 09:23 编辑

您cellbutton的command是function,function无法序列化到json中。
如果需要序列化,需要将function内执行的代码逻辑定义给command,
然后将command 的名字string 给cellbutoon,

此时导入json再导入json新的spread中,需要给新spread重新注册command。
回复 使用道具 举报
云智装
金牌服务用户   /  发表于:2021-11-18 18:26:52
5#
Lynn.Dou 发表于 2021-11-18 17:33
您cellbutton的command是function,function无法序列化到json中。
如果需要序列化,需要将function内执行 ...

不是很明白,能写个例子吗
回复 使用道具 举报
云智装
金牌服务用户   /  发表于:2021-11-19 10:33:24
7#
Lynn.Dou 发表于 2021-11-19 09:22
前面描述不太准确,已在原回答基础上做了更改。
示例请参考下方链接:
https://gcdn.grapecity.com.cn/fo ...

可以了,谢谢
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-11-19 11:02:29
8#
您客气了,那本帖就先结贴了,有问题欢迎另开新帖交流。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部