找回密码
 立即注册

QQ登录

只需一步,快速开始

life()

初级会员

38

主题

131

帖子

417

积分

初级会员

积分
417

[已处理] spreadjs15.2.0

life()
初级会员   /  发表于:2022-9-16 15:23  /   查看:1861  /  回复:11
8金币
本帖最后由 life() 于 2022-9-16 15:47 编辑

如图,我在单元格编辑状态下用原生js插入了两段文字,但是输入框并没有因此撑开,但是做一些其他操作又会被正确撑开,有办法可以让我在插入文字的时候直接撑开单元格编辑状态下的输入框宽度嘛?

image.png271578978.png

再补一张为不换行的图
image.png49548033.png

最佳答案

查看完整内容

感谢提供参考,当然产品同学是希望直接在单元格直接插入进去的,另外,我直接操作编辑区域dom宽度已经解决了这个问题。

11 个回复

倒序浏览
最佳答案
最佳答案
life()
初级会员   /  发表于:2022-9-16 15:23:49
来自 11#
Ellia.Duan 发表于 2022-9-20 17:21
SpreadJS是使用canvas进行画布绘制。所以可以根据文字多少来做到自适应。您这边代码是使用dom原来来实现到 ...

感谢提供参考,当然产品同学是希望直接在单元格直接插入进去的,另外,我直接操作编辑区域dom宽度已经解决了这个问题。
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2022-9-16 18:24:44
2#
因为autofit行为是一次性生效的,也就是说你什么时候调用autofit代码,什么时候进行自适应行高。这种方式跟Excel相同,如果想要输入之后能够自动自适应的效果,需要监听对应的事件,在事件中做处理,这里跟您发一个动态自适应行高的例子,您可以参考,如果想要动态自适应列宽也可以根据此例子进行修改。

动态自适应行高.html

1010 Bytes, 下载次数: 44

回复 使用道具 举报
life()
初级会员   /  发表于:2022-9-16 20:09:55
3#
Clark.Pan 发表于 2022-9-16 18:24
因为autofit行为是一次性生效的,也就是说你什么时候调用autofit代码,什么时候进行自适应行高。这种方式跟 ...

感谢您的回复,但是您似乎没有理解我的问题,答非所问了,我现在的场景是,需要在编辑状态的单元格插入数据,比如我现在在单元格输入=IF( 然后IF函数的第一个值是外部的,这时候就有一个去其他地方选取数据源的操作,因为我没有找到插入到编辑状态单元格的方法,所以是用js对当前单元格编辑区域进行了一个dom上的写入,然后这时候单元格的输入框是没有正确自适应文字宽度的。
如果还是不明白呢,我可以给您发个demo,协助我解决这个问题。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-9-19 11:28:28
4#
您这边发一个demo吧。
同时可以参考进入编辑状态的事件
https://demo.grapecity.com.cn/sp ... #event:EditStarting
回复 使用道具 举报
life()
初级会员   /  发表于:2022-9-20 10:26:41
5#
可以在我的demo中首先双击一个单元格,随后点击左上角的按钮写入数据,就会出现文字溢出显示不全的问题了。

demo_单元格编辑状态插入数据.zip

5.24 KB, 下载次数: 48

回复 使用道具 举报
life()
初级会员   /  发表于:2022-9-20 10:28:19
6#
Ellia.Duan 发表于 2022-9-19 11:28
您这边发一个demo吧。
同时可以参考进入编辑状态的事件
https://demo.grapecity.com.cn/spreadjs/help/ap ...

你好demo,已经放在评论区了。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-9-20 15:31:52
7#
看了您的代码, 不确定您这边是否初步学习过SpreadJS。SpreadJS有一个基本功能是为选中单元格赋值。我看您的代码虽然用了Spread容器,但是填充值并没有使用SpreadJs相关API。您这边是否有特殊原因呢?


如果使用SpreadJS相关API,您的代码不用那么复杂。
简单代码如下所示:
  1. function insertHtmlAtCaret(html) {
  2.     var spread = GC.Spread.Sheets.findControl(document.getElementById('ss'))
  3.     var sheet = spread.getActiveSheet();
  4.     var selections = sheet.getSelections();
  5.     if (selections.length > 0) {
  6.         const {row, col, rowCount, colCount} = selections[0];
  7.         const olsText = sheet.getValue(row, col) || '';
  8.         sheet.setValue(row, col, olsText + '' + html);
  9.         sheet.autoFitColumn(col);
  10.     }
  11. }
复制代码
在点击插入html按钮后,获取当前选中单元格,继而获取row,col等数据。然后setValue填充值。最后autoFitColumn(),自适应列
效果如下图所示:
image.png857246398.png image.png477597350.png

还有就是 观察到您这边使用了单元格双击,您是想在双击后在填充值吗,如果是这样子的话,有一个CellDoubleClick事件,在其事件中可以获取双击单元格的行列。然后在insertHtmlAtCaret方法里面,判断判断获取的单元格row,col是否是双击单元格的行列,如果是的话,则填充值。


最后将修改好的app.js放在附件中,可以查看。

app.js

1 KB, 下载次数: 47

回复 使用道具 举报
life()
初级会员   /  发表于:2022-9-20 15:53:12
8#
Ellia.Duan 发表于 2022-9-20 15:31
看了您的代码, 不确定您这边是否初步学习过SpreadJS。SpreadJS有一个基本功能是为选中单元格赋值。我看您 ...

你好,非常感谢您的耐心解答,您发的例子我也看了,可能是我的表达没有强调要点,我想实现的是在【单元格编辑状态】下插入数据,而不是选中状态下插入数据,不知道这样讲您是否可以理解。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2022-9-20 16:14:09
9#
好的,这边理解您的需求了,这边需要调研下如何实现您的“【单元格编辑状态】下插入数据”需求。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部