找回密码
 立即注册

QQ登录

只需一步,快速开始

keep_pace

注册会员

3

主题

10

帖子

95

积分

注册会员

积分
95
最新发帖
keep_pace
注册会员   /  发表于:2019-1-21 11:40  /   查看:3504  /  回复:8
您好,列表显示是正常的——下拉框显示的是text的内容,导出excel后显示的是value,下拉框的导出是不是需要做什么操作?
列表中下拉框赋值:
combo.items(items).editorValueType(GC.Spread.Sheets.CellTypes.EditorValueType.value);sheet.getCell(range.row , range.col, GC.Spread.Sheets.SheetArea.viewport).cellType(combo);
sheet.setValue(row,col,value);
image.png108703917.png

8 个回复

倒序浏览
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-1-21 14:30:03
沙发
您好,您注意学习指南上的代码,editorValueType句如下:

  1. combo.items([{ text: "Oranges", value: "11k" }, { text: "Apples", value: "15k" }, { text: "Grape", value: "100k" }])
  2.                     .editorValueType(spreadNS.CellTypes.EditorValueType.text);
复制代码


这样导出到Excel后单元格就是text的内容了。

学习指南地址:

https://demo.grapecity.com.cn/Sp ... os/comboBoxCellType
回复 使用道具 举报
keep_pace
注册会员   /  发表于:2019-1-22 09:39:18
板凳
不能使用text,使用text后列表都显示value的值了,导出的也是value的值
回复 使用道具 举报
keep_pace
注册会员   /  发表于:2019-1-22 10:02:01
地板
因为我使用的是sheet.setValue(row,col,value);  这个value不是文本值,是文本对应的value。而例子中设置的值是文本
combo.items([{ text: "Oranges", value: "11k" }, { text: "Apples", value: "15k" }, { text: "Grape", value: "100k" }])
                    .editorValueType(spreadNS.CellTypes.EditorValueType.text);
sheet.getCell(1, 2, spreadNS.SheetArea.viewport).cellType(combo).value("Apples");

Apples就是文本

从数据库取值后只有value,没有text,当editorValueType(spreadNS.CellTypes.EditorValueType.text)、sheet.setValue(row,col,value);就不好用了,显示的就是value了
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-1-22 12:20:18
5#
您好,您是想即保留dataSource中的值为value,又导出Excel并且单元格内显示text?

这是没办法通过配置直接实现的,导出Excel、ssjson等都是导出的单元格value。

除非您在导出前,将combobox的单元格改为正常单元格后,把需要显示的内容通过setValue设置一下。

如果我对您的需求理解仍然有误,或者还有什么论坛上描述不清的问题,您可以直接拨打我们的售后电话:

029-88331988转620,找Kevin即可。谢谢
回复 使用道具 举报
keep_pace
注册会员   /  发表于:2019-1-22 16:45:55
6#
您好,按照上面的方案,确实是有效果的,但是有一个问题,在循环中使用sheet.setCellType(j, 1, null, GC.Spread.Sheets.SheetArea.viewport)时,会将列表中其他行的这一列也变为正常单元格,这个时候还没获取其他行的text内容,导出后只有第一行数据是text,其他行还是value,不知道为什么会把其他行也改变了
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-1-22 18:26:35
7#
不会啊,我这边正常执行了,你不要用getValue,用getText获取单元格的text,然后再用setText设置回去。

我这边测试的页面:

https://demo.grapecity.com.cn/Sp ... itializeSpread.html

步骤1:先设置一整列为下拉菜单,代码:

  1. var spread = GC.Spread.Sheets.findControl("ss");
  2. var spreadNS = GC.Spread.Sheets;
  3. var combo = new spreadNS.CellTypes.ComboBox();

  4. combo.items([{ text: "Red", value: "1" }, { text: "Green", value: "2" }, { text: "Blue", value: "3" }, { text: "White", value: "4" }])
  5.                     .editorValueType(spreadNS.CellTypes.EditorValueType.value);
  6.                     
  7. var sheet = spread.getActiveSheet();
  8. sheet.getRange(-1, 2).cellType(combo);
复制代码


步骤二:手动改几个下拉菜单的值,如图:

image.png440949706.png

步骤三:照上述思路把text设置回去,代码:

  1. var spread = GC.Spread.Sheets.findControl("ss");

  2. var sheet = spread.getActiveSheet();

  3. sheet.suspendPaint();

  4. for(let i=0; i<sheet.getRowCount(); i++){
  5.     var text = sheet.getText(i, 2);
  6.     sheet.setCellType(i, 2, null);
  7.     sheet.setText(i, 2, text);
  8. }

  9. sheet.resumePaint();
复制代码


如图:

image.png525906981.png
回复 使用道具 举报
keep_pace
注册会员   /  发表于:2019-1-24 10:52:56
8#
嗯,问题解决了,按照上面的代码,之前之所以有问题是因为复制行后通过代码将行中所有列的样式也重新设置到新行导致,将样式的设置去掉就可以了。谢谢…
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-1-24 11:19:03
9#
keep_pace 发表于 2019-1-24 10:52
嗯,问题解决了,按照上面的代码,之前之所以有问题是因为复制行后通过代码将行中所有列的样式也重新设置到 ...

不客气,很高兴解决了您的问题,本帖我结贴了,有新的问题欢迎发新帖交流。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部