提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|实施案例|编辑:陈津勇|2019-07-09 16:41:29.340|阅读 677 次
概述:SpreadJS以“高速低耗、纯前端、零依赖”为产品特色,可嵌入任何操作系统,同时满足 .NET、Java、响应式Web应用及移动跨平台的表格数据处理和类Excel的表格应用开发,可极大地降低企业研发成本并有效解决实际问题。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
SpreadJS是一款基于HTML5的纯JavaScript电子表格和网格功能控件,它在数据展示、前端导入导出、图表面板、数据绑定等场景无需大量代码开发和测试,可极大节省企业研发成本并降低交付风险。
近日,国电联合动力技术有限公司&资深前端开发工程师李林慧女士就分享了“在React框架中使用SpreadJS纯前端表格控件”的实战开发经验,一起来看看吧~
项目背景:
国电联合动力技术有限公司采购SpreadJS纯前端表格控件,其主要应用场景是开发一套完善的日常业务流程管理系统,该系统以部门为单位划分,每周由各部门填报人员,根据系统运行情况、日常运营数据等在系统中进行填报,后交由部门进行数据汇总,并在移动端/PC端系统页面进行数据展示。
在采购SpreadJS纯前端表格控件之前,该公司使用excel进行数据汇总,无法保证各部门的数据流通及时、共享。在经过技术调研后,决定使用SpreadJS(该控件的功能、布局和操作均接近原生Excel)开发业务流程管理系统。通过该系统,部门领导可以实时查看业务运行状况并给予反馈意见,保证数据流通实时、有效。
选择SpreadJS的主要原因:
1、功能、布局与Excel高度一致,数据操作、使用习惯均接近原生Excel;
2、可在前端导入、导出Excel文件,且保持文件的最大完整性;
3、支持所有常见的Excel公式函数。
分享内容:
1、SpreadJS常用组件及其属性
SpreadSheets
Worksheet
2、渲染过程
3、自定义数据验证及Demo演示
4、课程答疑
SpreadJS常用组件及其属性
this.handleRowChanged(sheet)} valueChanged={(_, sheet) => this.handleValueChanged(sheet)} rangeChanged={(_, sheet) => this.handleRangeChanged(sheet)} workbookInitialized={spread => this.init(spread)} >
rowChanged:主要用于删除整行触发,需要判断propertyName属性
handleRowChanged(content) {// 整行删除触发 const {sheet, propertyName} = content if (propertyName === 'deleteRows') { const {originalItem: {reportId}} = sheet.getDeletedRows()[0] if (reportId) { this.setState({loading: true}) setTimeout(() => { alert('删除成功!') }, 2000) } }
valueChanged:改变单元格值触发
handleValueChanged(sheet) { const {changedRow} = this.state changedRow.push(sheet.row) this.setState({changedRow: Array.from(new Set(changedRow))}) }
rangeChanged:输入公式、delete删除数据、移动单元格触发
handleRangeChanged({ changedCells }) { // 输入公式、delete删除数据、移动单元格触发 const { changedRow } = this.state; for (let i = 0; i < changedCells.length; i++) { changedRow.push(changedCells[i].row); } this.setState({ changedRow: Array.from(new Set(changedRow)) }); }
workbookInitialized:初始化表格控件,返回一个spread实例
<Worksheet dataSource = {data} name="简单综合示例" autoGenerateColumns={false}> {tableHead.length > 0 ? tableHead.map(item => ( <Column dataField={item.name} key={item.name} headerText={item.displayName} width={item.width} style={{wordWrap: 'break-wrap', locked: false}} formatter={item.formatter} /> )): null} </Worksheet>
dataSource:数据源
name:工作簿名称
<Column>
渲染过程
1、workbookInitialized返回一个spread实例,在init方法里可以对options按需进行配置。有了spread实例后也就可以生成一个Excel实例对象,其中包含了常用的spread和spreadNS,以及自定义的一些常用spread方法,比如搜索功能、自适应高度等。
2、从服务器端获取报表数据后,再根据报表保存的模板id获取对应的表头模板,渲染表头时可以做一些前期工作,如定义选项类的单元格、定义单元格的格式、公式等。
3、将报表数据赋值给Worksheet组件的dataSource属性。
4、渲染完毕。
自定义数据验证及Demo演示
1、数据验证高亮样式(Data Validation Highlight Style):SpreadJS支持自定义数据验证样式和不同的单元格突出显示类型,包括 circle,dogear和icon。
2、数据验证代码
// 数据验证 dataValidate() { function MyCondition(reg) { this.reg = reg GC.Spread.Sheets.ConditionalFormatting.Condition.apply(this, arguments) } MyCondition.prototype = new GC.Spread.Sheets.ConditionalFormatting.Condition() MyCondition.prototype.evaluate = function(evaluator, baseRow, baseColumn, actualObj) { const reg = new RegExp (this.reg) if (reg.test(actualObj)) { return true } else { return false } } // 数据验证相关变量 const {spread} = this.state, sheet = spread.getSheet(0), sheetActive = spread.getActiveSheet(), nCondition = new MyCondition(/[+-]?\d+(\.\d+)?|^\s+$/), validator = new GC.Spread.Sheets.DataValidation.DefaultDataValidator(nCondition) // 数据验证 spread.suspendPaint() validator.type(GC.Spread.Sheets.DataValidation.CriteriaType.custom) spread.options.highlightInvalidData = true validator.showInputMessage(true) validator.inputMessage('必须填写数字!') validator.inputTitle('提示') sheetActive.setDataValidator(0, 4, sheet.getRowCount(), 1, validator) // rowIndex, colIndex, rowCount, colCount sheet.resumePaint() }
课程答疑Q&A
Q:为何数据量很小,但页面加载时会出现卡顿?
A:凡是涉及到表格重绘的地方最好都用 spread.suspendPaint() 和 spread.resumePaint() 包裹起来,避免频繁重绘引起卡顿。
Q: 如何渲染多重表头?
A:Column组件尚未支持多重表头,针对这个问题,可以在渲染表头步骤时(此时已获取到有树形结构的表头模板),先给表格setDataSource,获取所有表头模板的叶子节点后按列进行表单级别的绑定,然后通过操作表头区域的赋值、合并单元格等操作手动渲染表头。
Q:为什么要引入表头模板?
A:SpreadJS中每一列的列头显示的是中文,但是实际上存取对应的是数据库中的一个字段,所以需要通过数据绑定把表格数据和字段映射起来。其中模板在系统管理内另有维护入口,支持增删改等基本功能。
如果想获得 SpreadJS 更多资源或其他相关下载,请点击这里。
如果想要购买正版 SpreadJS 产品,。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
TeeChart 为先进的数据集成和可视化工具 RivCross 提供了丰富的图表库,通过提供对水平定向钻井 (HDD) 操作至关重要的强大数据可视化功能增强了 RivCross。
灵犀文档通过嵌入 SpreadJS,文档系统完美复刻了 Excel 的UI架构,并有效提升了系统多人协作和数据处理效率。
GEOsens致力于研发“从传感器到互联网”的在线监测和控制系统,使用TeeChart超过15年,TeeChart 成为了GEOsens访问数据的关键元素,为决策提供了坚实的基础。
ActiveReports 报表降低系统与报表功能的耦合度,使系统的报表功能得以模块化;ActiveReports 报表本身的优良特性,也为系统打造更强的用户体验如虎添翼,如数据钻取、交叉报表、数据导出等。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢