找回密码
 立即注册

QQ登录

只需一步,快速开始

金牌服务用户

26

主题

93

帖子

243

积分

金牌服务用户

积分
243

金牌服务用户   /  发表于:2021-9-3 11:33  /   查看:2936  /  回复:7
100金币
本帖最后由 浩 于 2021-9-3 11:34 编辑
  1. console.log(row, col,value)
  2.     sheet.getCell(row, col).text(value).cellType(new AutoWrapTextCellType());
复制代码
  1. AutoWrapTextCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
  2. AutoWrapTextCellType.prototype.paint = function (ctx, value, x, y, w, h, style, context) {
  3.     ctx.font = style.font;
  4.     GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, [ctx, value, x, y, w, h, style, context]);
  5. };
复制代码
自定义单元格类型后,会导致插入时插入整行数据

1.mp4

781.87 KB, 阅读权限: 150, 下载次数: 3

最佳答案

查看完整内容

请问这是您想要的效果吗 请把行列索引改为数字格式,也就是将上面的引号删除 如果不符合您的需求,麻烦您再详细描述一下您的需求。

7 个回复

倒序浏览
最佳答案
最佳答案
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-9-3 11:33:56
来自 6#
浩 发表于 2021-9-3 16:52
中间有一些我们封装的代码,已替换

请问这是您想要的效果吗
image.png968458251.png

请把行列索引改为数字格式,也就是将上面的引号删除
image.png480890502.png

如果不符合您的需求,麻烦您再详细描述一下您的需求。
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-9-3 14:16:23
2#
您好,请问您是指红框部分的数据吗?这边看了您的代码未能复线您的问题,请问您点击按钮的逻辑具体是什么呢?如果只是改变一个单元格的类型那么只会改变设置的单元格而不会影响其他单元格。建议您提供更多能复现问题的信息或者提供一个能复现问题的demo。
image.png699447021.png
回复 使用道具 举报

金牌服务用户   /  发表于:2021-9-3 14:39:58
3#
本帖最后由 浩 于 2021-9-3 14:43 编辑
Derrick.Jiao 发表于 2021-9-3 14:16
您好,请问您是指红框部分的数据吗?这边看了您的代码未能复线您的问题,请问您点击按钮的逻辑具体是什么呢 ...

这个例子可以看到问题
  1. const data = {
  2.         "0":{
  3.             "15,1":{
  4.                 "row":"15",
  5.                 "col":"1",
  6.                 "mapping_value":"sign_one::一级签字",
  7.                 "value":"管理员",
  8.                 "old_text":""
  9.             },
  10.             "16,1":{
  11.                 "row":"16",
  12.                 "col":"1",
  13.                 "mapping_value":"sign_one_time::一级签字日期",
  14.                 "value":"2021年09月03日",
  15.                 "old_text":""
  16.             }
  17.         }
  18.     };

  19.     _.forOwn(data, (item, pageIndex) => {
  20.         const sheet = $.spread.getSheetObjForIndex(pageIndex)
  21.         _.forOwn(item, (cellData) => {
  22.             const key = cellData['mapping_value'].split('::')[0];
  23.             const keyValue = cellData['mapping_value'].split('::')[1];
  24.             let {row, col, old_text, value} = cellData;

  25.             row = parseInt(row) + parseInt(sheet.getRowCount()) - parseInt(this.tempSheetJson[pageIndex]['rowCount']);

  26.             const old = old_text.replace(new RegExp(" ", "gm"), ' ');
  27.             if ($.common.isEmpty(value)) value = '';
  28.             let style = $.sheet.getStyle(row, col, sheet); // 获取样式
  29.             style.backColor = null; // 清空背景色
  30.             style.wordWrap = true; // 自动换行
  31.             sheet.getCell(row, col).text(old + value).cellType(new AutoWrapTextCellType());
  32.             sheet.setStyle(row, col, style, GC.Spread.Sheets.SheetArea.viewport);
  33.         })
  34.     })
复制代码
  1. function AutoWrapTextCellType() {
  2. }

  3. AutoWrapTextCellType.prototype = new GC.Spread.Sheets.CellTypes.Text();
  4. AutoWrapTextCellType.prototype.paint = function (ctx, value, x, y, w, h, style, context) {
  5.     ctx.font = style.font;
  6.     value = wrapString(ctx, value, w - 15);
  7.     GC.Spread.Sheets.CellTypes.Text.prototype.paint.apply(this, [ctx, value, x, y, w, h, style, context]);
  8. };

  9. function wrapString(c, str, maxWidth) {
  10.     let width = c.measureText(str).width;
  11.     if(width<=maxWidth) return str;
  12.     const len = str.length;
  13.     let newStrList = [];
  14.     let index = 0;
  15.     for (let i = 0; i < len; i++) {
  16.         // 临时拼接字符串
  17.         let _newStr = newStrList[index] + str[i];
  18.         // 临时拼接字符串的长度
  19.         let newWidth = c.measureText(_newStr).width;
  20.         // 初始化数组
  21.         if(!newStrList[index]) newStrList[index] = '';
  22.         // 长度判断
  23.         if(newWidth >= maxWidth){ // 长度超过,换行
  24.             newStrList[index] = newStrList[index] + '\n';
  25.             index++;
  26.             newStrList[index] = str[i];
  27.         }else{
  28.             newStrList[index] = newStrList[index] + str[i];
  29.         }
  30.     }
  31.     return newStrList.join('');
  32. }
复制代码
image.png958457946.png

test(1).ssjson

227.84 KB, 阅读权限: 150, 下载次数: 1

回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-9-3 16:19:55
4#
浩 发表于 2021-9-3 14:39
这个例子可以看到问题

暂时从您的代码中未能复现您的问题,这边已将您提供的代码以及json整理在一个demo里面,麻烦您在附件的dmeo中复现您的问题方便我们更快速地定位问题。

cus_cell.zip

12.07 KB, 下载次数: 119

回复 使用道具 举报

金牌服务用户   /  发表于:2021-9-3 16:52:32
5#
Derrick.Jiao 发表于 2021-9-3 16:19
暂时从您的代码中未能复现您的问题,这边已将您提供的代码以及json整理在一个demo里面,麻烦您在附件的dm ...

中间有一些我们封装的代码,已替换

cus_cell.zip

36.78 KB, 下载次数: 100

回复 使用道具 举报

金牌服务用户   /  发表于:2021-9-3 17:49:20
7#
Derrick.Jiao 发表于 2021-9-3 17:29
请问这是您想要的效果吗

谢谢,已解决
回复 使用道具 举报
Derrick.Jiao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2021-9-3 17:53:59
8#
浩 发表于 2021-9-3 17:49
谢谢,已解决

解决了就好,有新问题欢迎开新帖交流~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部