找回密码
 立即注册

QQ登录

只需一步,快速开始

lifeisafm

注册会员

1

主题

6

帖子

29

积分

注册会员

积分
29
最新发帖
lifeisafm
注册会员   /  发表于:2021-4-10 16:12  /   查看:3987  /  回复:11
1金币
问题一:模板结构设计的字段,绑定单元格后,能否像根据字段名绑定文本一样,绑定图片或者单元格背景 image.png185896605.png image.png876672973.png
问题二:用表格编辑器自带的ui导出导入操作.ssjon文件,可以正常加载文件所包含的已设计好的模板结构字段(designerBindingPathSchema)。
用代码spread.toJSON保存的不包含模板结构部分(designerBindingPathSchema),而将模板结构字段(designerBindingPathSchema)手动拼接在spread.toJSON内,利用代码spread.fromJSON,打开的文件也没有刚才手动拼接的模板结构部分(designerBindingPathSchema)

11 个回复

倒序浏览
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-4-12 09:34:16
沙发
本帖最后由 lynn512 于 2021-4-12 09:41 编辑

问题1:图片不是json数据,没办法按数据绑定的方式设置到表单中,
所以您需要通过sheet.pictures.add的方式,将图片添加到对应的位置。
图片属于SpreadJS浮动对象的一种,因此您可以参考一下浮动对象的API:
https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/floating-object/picture/purejs
单元格背景 backgroundImage  属于spread级别的接口,无法通过数据绑定的形式插入spread中
您可以结合业务情况详细的描述下自己的需求,这边看下有没有其他较好的办法。

问题2:
通过代码fromJSON导入json,经测试与是否拼接json无关。测试发现,通过UI导出的ssjson文件,再次通过代码fromJSON导入,也出现不显示模板字段的问题,
具体原因这边需要调研下,预计下午更新问题进展。
回复 使用道具 举报
lifeisafm
注册会员   /  发表于:2021-4-12 09:45:12
板凳
lynn512 发表于 2021-4-12 09:34
问题1:图片不是json数据,没办法按数据绑定的方式设置到表单中,
所以您需要通过sheet.pictures.add的方 ...

问题1的需求描述:
如第一张图所示,用户打开一个空白的文件,我们会预加载一个设计好的模板结构,由用户自己拖动字段至单元格内,以达到用户将数据或图片绑定在他拖至的的位置上。
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-4-12 10:19:24
地板
“由用户自己拖动字段至单元格内”
这个行为是与数据源相关联的,而图片由于是浮动元素,不符合json格式的要求,所以无法通过设置字段-绑定数据源来实现。
如果想要用户绑定图片,需要用户确认图片的位置,通过 sheet.pictures.add 方法添加此图片。
https://demo.grapecity.com.cn/sp ... ating-object/purejs
添加图片至指定单元格,请参考以下帖子:
https://gcdn.grapecity.com.cn/fo ... hread&tid=80482
回复 使用道具 举报
lifeisafm
注册会员   /  发表于:2021-4-12 11:00:50
5#
lynn512 发表于 2021-4-12 10:19
“由用户自己拖动字段至单元格内”
这个行为是与数据源相关联的,而图片由于是浮动元素,不符合json格式的 ...

感谢回复!
但是我的需求是,用户1确定的位置和用户2确定的位置不一样,我无法写一个通用的代码。我另外一个思路是这样的,拖动模板结构字段 ‘pic’ 至某一个单元格内。拖动完,我通过解析json可以取得到 'pic'所对应的行列,有没有封装好的方法来通过'pic'直接取到sheet以及sheet内的单元格
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-4-12 11:21:57
6#
这边先根据您的思路明确下需求:
拖动模板结构字段 ‘pic’ 至某一个单元格内
让用户拖动字段是为了标记图片的位置吗?
我通过解析json可以取得到 'pic'所对应的行列
用户拖动字段后,加载图片这一行为是由谁来执行的呢?
您解析json获取字段行列信息是需要执行什么业务逻辑呢?
如果是由客户来执行的,为什么不直接让客户选择指定的单元格,直接添加图片呢?

综上,您需要详细的描述下业务流程,这边才能给您提供更好的建议。
回复 使用道具 举报
lifeisafm
注册会员   /  发表于:2021-4-12 11:52:30
7#
本帖最后由 lifeisafm 于 2021-4-12 12:01 编辑
lynn512 发表于 2021-4-12 11:21
这边先根据您的思路明确下需求:
“拖动模板结构字段 ‘pic’ 至某一个单元格内”
让用户拖动字段是为了 ...

"让用户拖动字段是为了标记图片的位置吗?"
----对,就是为了标记图片位置
"用户拖动字段后,加载图片这一行为是由谁来执行的呢?"
----也是由用户来执行。
我说一下我的业务流程,用户两个角色,
角色1:报告设计员。用来设计报告模板。他设计报告模板就是上述的,打开一个空白的文件并且预加载了我们指定的模板机构,他排版布局文字弄好后,拖动我们的模板结构字段至他需要的位置。包括文本的位置,以及图片(签名)的位置。
角色2:报告编辑员。他填好表单数据(就是模板中那些字段)后,会调用角色1设计好的报告模板,点击'插入'按钮,将表单数据插入对应的位置,将他本人的签名图片插入标记了图片的位置。

'如果是由客户来执行的,为什么不直接让客户选择指定的单元格,直接添加图片呢'
----这句话的意思是,让客户点击单元格,处于激活状态,然后再点'插入'吗?或者点击'插入'时,弹框出来让他填写"B5"再执行插入吗?这样操作,不太友好啊。毕竟可能一天得点击好几十次插入。而且如果我三个sheet1sheet2,sheet3都需要插入该图片,那我得来回切换sheet选中单元格,选中一次点一次插入

image.png919846496.png
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-4-12 14:22:08
8#
问题1:

点击'插入'按钮,将表单数据插入对应的位置,将他本人的签名图片插入标记了图片的位置。
这里的插入按钮,执行的是绑定数据源的代码过程吗?
如果是的话,前面已经提到,无法通过数据绑定插入图片。

如果我三个sheet1sheet2,sheet3都需要插入该图片,那我得来回切换sheet选中单元格,选中一次点一次插入
您是希望一次性在指定的多个位置同时插入图片吗?
现在是需要给用户标记一个图片的位置(代替字段),使之清楚应在在何处插入图片,
这边有个思路您可以参考下,
使用tag方法存储一些信息来标记图片的位置,用户需要插入图片时,获取tag信息从而获取图片的位置。
然后再遍历图片数组,使用 sheet.pictures.add 插入图片。
具体请参考学习指南 - 标签:
https://demo.grapecity.com.cn/spreadjs/SpreadJSTutorial/features/cells/tags/tag-basic#

问题2:使用fromJSON导入json后,需要重新添加数据列表,具体请参考以下技术博客:
https://gcdn.grapecity.com.cn/fo ... &extra=page%3D1
回复 使用道具 举报
lifeisafm
注册会员   /  发表于:2021-4-12 16:57:43
9#
lynn512 发表于 2021-4-12 14:22
问题1:

“点击'插入'按钮,将表单数据插入对应的位置,将他本人的签名图片插入标记了图片的位置。”

感谢,问题2已搞定。
'这里的插入按钮,执行的是绑定数据源的代码过程吗?'
----两部分内容,1进行数据绑定,2进行图片插入
用tag标记图片位置,对用户而言,我已经有了问题2中得模板字段,我只需要设计布局排版,然后拖动字段至我想要得位置,模板就设计好了。再进行tag标记单独处理图片位置,不方便。还是觉得,根据已拖动至单元格'pic'字段,来获取该单元格得位置
插入时候,先执行:sheet.setDataSource(datasource);再执行sheet.pictures.add
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-4-12 17:36:36
10#
"根据已拖动至单元格'pic'字段,来获取该单元格得位置"
目前没有通过 ”字段名称“ 获取 ”字段位置“ 的接口,
只能通过行列索引获取到字段名称。
示例代码:
Sheet.getBindingPath(0, 0, GC.Spread.Sheets.SheetArea.viewport);

也就是说,如果想实现您的需求,您需要遍历单元格获取所有的字段名称,
然后判断当字段名称为目标字段名时,记录此时的行列位置。

回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部