找回密码
 立即注册

QQ登录

只需一步,快速开始

爱迪生

超级版主

55

主题

65

帖子

1394

积分

超级版主

Rank: 8Rank: 8

积分
1394
爱迪生
超级版主   /  发表于:2022-4-29 17:24  /   查看:1909  /  回复:0
在审计过程中,我们经常会遇到将某个sheet页中的部分数据选择出来进行审计,如将下表中的床箱和床头柜选出来进行数量和单价的审计, image.png472733153.png

审计效果如下:
image.png485482787.png
接下来我分享一些这块如何实现:
1,给原表sheet1的行添加tag:
  1. let rows = sheet.getRowCount();
  2.   for (let i = 0; i + 2 < rows; i++) {
  3.     sheet.setTag(i + 2, -1, `${i}`);
  4.   }
复制代码
2.对用户选择的行进行数据的过滤:
  1. var selections = sheet.getSelections();
  2.     if (!selections || selections.length === 0) {
  3.       return;
  4.     }
  5.     for (let i = 0; i < selections.length; i++) {
  6.       row = selections[i].row;
  7.       col = selections[i].col;
  8.       if (col === -1 && row !== -1) {
  9.         selects.push(parseInt(sheet.getTag(row, col)));
  10.       }
  11.     }
  12.     let templateConfigData = [];
  13.     for (let i = 0; i < selects.length; i++) {
  14.       templateConfigData.push(dataSource[selects[i]])
  15.     }
复制代码
3.将过滤后的数据通过数据绑定进行展示,并配置汇总公式:
  1. let data1 = { dataSource1: templateConfigData };
  2.     let sheet1 = spread.getSheetFromName("Sheet2");
  3.     let table1 = sheet1.tables.all()[0];
  4.     table1.autoGenerateColumns(false);
  5.     table1.setColumnFormula(0, `SUBTOTAL(109,[数量])`)
  6.     sheet1.defaults.rowHeight = 50;
  7.     // table.set
  8.     var tableColumnNew1 = new spreadNS.Tables.TableColumn();
  9.     tableColumnNew1.dataField("quantity");
  10.     tableColumnNew1.name("数量");
  11.     var tableColumnNew2 = new spreadNS.Tables.TableColumn();
  12.     tableColumnNew2.dataField("unitPrice");
  13.     tableColumnNew2.name("单价");
  14.     table1.bindColumns([tableColumnNew1, tableColumnNew2]);
  15.     table1.bindingPath('dataSource1');

  16.     let dataSource2 = new spreadNS.Bindings.CellBindingSource(data1);
  17.     spread.getSheet(1).setDataSource(dataSource2);
复制代码
详细代码见附录:

跨表单元格关联.zip

3.04 MB, 下载次数: 112

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部