找回密码
 立即注册

QQ登录

只需一步,快速开始

Mrluo

初级会员

23

主题

62

帖子

213

积分

初级会员

积分
213
Mrluo
初级会员   /  发表于:2023-12-4 18:26  /   查看:2491  /  回复:7

创建的部分代码:(其中range,是来自别的sheet的数据,这里没办法。)

  1. let pivotTable
  2.     try {
  3.       pivotTable = sheet.pivotTables.add(
  4.         this.mainSheet1PivotTable,
  5.         range,
  6.         0,
  7.         0,
  8.         this.vueThis.GC.Spread.Pivot.PivotTableLayoutType.tabular,
  9.         this.vueThis.GC.Spread.Pivot.PivotTableThemes.light4,
  10.         {
  11.           showDrill: false, // 是否显示扩充/收缩按钮
  12.           showMissing: false,
  13.           bandRows: false,
  14.           showRowHeader: false,
  15.           showColumnHeader: false,
  16.           mergeItem: true,
  17.           insertBlankLineAfterEachItem: false, // 是否给每一项添加一个空行。
  18.           grandTotalPosition: 3,
  19.           //   showHeaders: false,
  20.           subtotalsPosition: 0, // 在底部或者头部显示汇总值,也可以不显示
  21.           displayFieldsInPageFilterArea:
  22.             this.vueThis.GC.Spread.Pivot.DisplayFields.overThenDown // 按照先纵向排列或者先横向排列展示报表筛选字段。
  23.         }
  24.       )
  25.     } catch (err) {
  26.       this.vueThis.MsgError(`透视表创建失败,${err}`)
  27.       return
  28.     }
  29.     if (!pivotTable) {
  30.       this.vueThis.MsgError(`当前环境不支持透视表授权`)
  31.       return
  32.     }
  33.     const colFields = ['户型']
  34.     const rowFields = ['综合单价', '单位', '项目名称及特征描述']
  35.     rowFields.forEach((each) => {
  36.       pivotTable.add(
  37.         each,
  38.         each,
  39.         this.vueThis.GC.Spread.Pivot.PivotTableFieldType.rowField
  40.       )
  41.     })
  42.     colFields.forEach((each) => {
  43.       pivotTable.add(
  44.         each,
  45.         each,
  46.         this.vueThis.GC.Spread.Pivot.PivotTableFieldType.columnField
  47.       )
  48.     })
  49.     pivotTable.add(
  50.       '单套工程量',
  51.       '求和项:单套工程量',
  52.       this.vueThis.GC.Spread.Pivot.PivotTableFieldType.valueField,
  53.       8
  54.     )
复制代码


给创建的透视表设置数据格式:(这里使用的formatter方法,按照单元格设置的方式,不知道对不对)

  1. sheet.options.sheetTabColor = 'Accent 6 80'
  2.     const GcStyle = this.vueThis.GC.Spread.Sheets.Style
  3.     const style = new this.vueThis.GC.Spread.Sheets.Style()
  4.     style.font = 'bold 12pt Arial'
  5.     style.vAlign = 1
  6.     style.hAlign = 1

  7.     const valueStyle = new GcStyle()
  8.     valueStyle.formatter = '#0.00'

  9.     const valueStyle2 = new GcStyle()
  10.     valueStyle2.formatter = '0\\.0,"万"'
  11.     //   var theme = new GC.Spread.Pivot.PivotTableTheme()

  12.     const pivotTable = sheet.pivotTables.get(
  13.       sheet.name() === this.mainSheet1PivotTable
  14.         ? this.mainSheet1PivotTable
  15.         : this.mainSheet2PivotTable
  16.     )
  17.     if (!pivotTable) {
  18.       this.vueThis.MsgError(`当前环境不支持透视表授权`)
  19.       return
  20.     }
  21.     const rowCount = sheet.getRowCount()
  22.     const colCount = sheet.getColumnCount()
  23.     this.stopSpreadRender()
  24.     if (sheet.name() === this.mainSheet1PivotTable) {
  25.       // this.vueThis.spread.suspendPaint()
  26.       /**
  27.        * 设置样式
  28.        */
  29.       sheet.setRowHeight(2, 42)
  30.       sheet.setRowHeight(3, 42)
  31.       sheet.setColumnWidth(0, 85)

  32.       pivotTable.setStyle(
  33.         {
  34.           dataOnly: true,
  35.           references: [
  36.             {
  37.               fieldName: '户型',
  38.               subtotals: true
  39.               // items: ['108户型', '*']
  40.             }
  41.           ]
  42.         },
  43.         valueStyle
  44.       )
  45.       // pivotTable.setStyle(this.getPivotTableFieldArea('综合单价', pivotTable), valueStyle)
  46.       pivotTable.autoFitColumn()
  47.       sheet.setStyle(2, 0, style)
  48.       sheet.setStyle(3, 0, style)
  49.       sheet.setStyle(3, 1, style)
  50.       sheet.setStyle(3, 2, style)
  51.       sheet.setColumnWidth(2, 280)
  52.       sheet.getRange(4, 2, sheet.getRowCount(), 1).wordWrap(true)
  53.       sheet.frozenRowCount(4)
  54.       sheet.frozenColumnCount(3)

  55. //
  56. <div style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); font-family: Consolas, &quot;Courier New&quot;, monospace; line-height: 19px; white-space: pre;"><span style="color: #001080;">sheet</span>.<span style="color: #795e26;">getRange</span>(<span style="color: #098658;">4</span>, <span style="color: #098658;">3</span>, <span style="color: #0070c1;">rowCount</span>, <span style="color: #0070c1;">colCount</span>).<span style="color: #795e26;">formatter</span>(<span style="color: #a31515;">'0</span><span style="color: #ee0000;">\\</span><span style="color: #a31515;">.0,"万"'</span>)</div>}
复制代码


然后得到的样式是这个样子:

image.png431372374.png

然后重点在这里,当我鼠标点击到单元格上面的时候
这个样式就发生了变化,加粗的没有了,统计成万的单元格式也没有了
image.png459862670.png

当我重新设置上面说的样式相关的代码以后,再次点击又正常


我的猜测 :
1.点击单元格是不是内部会触发一个updateSource类似的操作,因为这个点击以后样式就没有了的效果,跟我代码调用updateSource一样。




还有一个问题关于updateSource


updateSource以后我如何知道当前的透视表已经更新完成 ,(更新完成以后 我要修改单元格样式。如果updateSource调用后直接修改样式,可能导致样式被重置了。





我这个反馈的问题,需求就是。创建透视表,然后透视表的统计出来的户型的数据,要设置以万为 单位的显示。(实际需求可能还有其他的比如%百分比的格式等)
image.png469983825.png

7 个回复

倒序浏览
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-5 09:28:39
沙发
您好,我这边尝试复现了一下但是没能复现成功:

image.png408259887.png

您提供一下数据源,我结合您的代码试试看能否复现。

另外请问一下您的SpreadJS版本是多少?
回复 使用道具 举报
Mrluo
初级会员   /  发表于:2023-12-5 09:40:50
板凳
Joestar.Xu 发表于 2023-12-5 09:28
您好,我这边尝试复现了一下但是没能复现成功:

16我刚试过了,如果 我用cell的方法来设置样式(sheet.getRange().formatter()这样的方式),一点击样式就消失了,要使用pivotTable.setStyle设置的style就可以
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-5 16:25:07
地板
具体是16的哪个版本呢?我这边之前测试的版本是16.2.6,没能复现出您这个问题。
回复 使用道具 举报
Mrluo
初级会员   /  发表于:2023-12-5 16:52:32
5#
Joestar.Xu 发表于 2023-12-5 16:25
具体是16的哪个版本呢?我这边之前测试的版本是16.2.6,没能复现出您这个问题。

16.1,我使用的是单元格的设置样式和格式,所以会出现点击以后,设置的消失,如果是使用透视表的setStyle就正常

但是现在有个问题:
image.png410374755.png
我如何设置这个总计的格式也是以万元为单位。

这个透视表真的隐晦难懂。api的说明也是不清楚的
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2023-12-5 17:56:27
6#
您好,不太确定下图中的代码能否解决您的问题,您先尝试一下看看:

image.png228193968.png

如不能解决,您这边提供一下您图中SpreadJS的ssjson文件,这边复现后调研一下看是否有方案能够实现您的需求。
回复 使用道具 举报
Ellia.DuanSpreadJS 开发认证
超级版主   /  发表于:2023-12-29 10:55:46
7#
您好,使用楼上给出的方案后是否可以解决您的问题呢?
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-1-29 14:41:32
8#
您好,由于本帖较长时间没有回复,本帖先做结贴处理了,后续如您有其他问题,欢迎您开新帖提问。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部