- 浏览: 289830 次
- 性别:
- 来自: 龙城
最新评论
-
redey:
这垃圾东西,1.6以上JDK不支持
Jocky混淆JAVA代码(保护你的JAVA项目) -
u012907473:
水电费是否是否
js页面缓存的一个解决办法 -
jackson200:
讲解的很详细!
Jocky混淆JAVA代码(保护你的JAVA项目) -
jamesqq79:
下载解压缩后,不知是何文件格式,用PDF阅读器打不开。
Java程序员的推荐阅读书籍之十《Agile Java》 -
meimei727:
<!-- 给页面文件中的js和css引用增加版本号 -- ...
利用ant进行项目发布
最近的工作中,要解决web报表的一系列问题。在客户端,我们利用delphi的ie浏览器组件,开发了一个报表容器,对报表进行数据录入、保存、和申报等操作,部分报表数据操作行为可以离线使用。同时,也要求报表也可以直接通过浏览器进行在线访问和操作。
原来我们的web报表系统是以web页面为中心的,一张报表一个独立页面。事实上,可能多张报表之间有公式计算关系,这样如果一张报表的某个字段值改变了,可能会引起其它报表字段值的改变。原有的以页面为中心的模式,不能很好的解决这个问题。
基于以上的需求,把各个有公式关系的报表作为一套报表,或者视为一个报表对象,以json来表示报表的数据,通过js公式解析器,来解析提前定义好的报表公式关系,并把值更新到当前显示的报表页面和json中。这样,后续对报表数据的处理,就完全以json为中心,可以通过delphi调用js,把报表数据持久化到客户端,同时也可以通过ajax的方式,把报表数据提交到java服务器端进行处理。
其实对报表的处理的核心就是对数据的处理,在我们这种模式中,就是对json的处理。而报表关系的核心,就是公式,用户在操作报表数据时,程序根据预先定义的公式,同时对当前显示的web报表页面报表json中的数据值进行修改。
下边给出测试代码。
json报表数据及公式的定义(testJson.js):
// 报表数据json表示 var testJson = { sb_zcfzb1:{ sb_zcfzb_ncs_1:"0.00",sb_zcfzb_ncs_2:"0.00",sb_zcfzb_ncs_3:"0.00",sb_zcfzb_ncs_4:"0.00",sb_zcfzb_ncs_5:"0.00",sb_zcfzb_ncs_6:"0.00", sb_zcfzb_ncs_7:"0.00",sb_zcfzb_ncs_8:"0.00",sb_zcfzb_ncs_9:"0.00",sb_zcfzb_ncs_10:"0.00",sb_zcfzb_ncs_11:"0.00",sb_zcfzb_ncs_12:"0.00", sb_zcfzb_ncs_13:"0.00",sb_zcfzb_ncs_14:"0.00" }, sb_zcfzb2:{ sb_zcfzb_ncz_1:"0.00",sb_zcfzb_ncz_2:"0.00",sb_zcfzb_ncz_3:"0.00" } }; // 报表公式关系表示 var testFormular = { sb_zcfzb1:"sb_zcfzb1.sb_zcfzb_ncs_14^$sb_zcfzb1.sb_zcfzb_ncs_1+$sb_zcfzb1.sb_zcfzb_ncs_2+$sb_zcfzb1.sb_zcfzb_ncs_3+$sb_zcfzb1.sb_zcfzb_ncs_4+$sb_zcfzb1.sb_zcfzb_ncs_5+$sb_zcfzb1.sb_zcfzb_ncs_6+$sb_zcfzb1.sb_zcfzb_ncs_7+$sb_zcfzb1.sb_zcfzb_ncs_8+$sb_zcfzb1.sb_zcfzb_ncs_9+$sb_zcfzb1.sb_zcfzb_ncs_10+$sb_zcfzb1.sb_zcfzb_ncs_11+$sb_zcfzb1.sb_zcfzb_ncs_12+$sb_zcfzb1.sb_zcfzb_ncs_13#4", sb_zcfzb2:"sb_zcfzb2.sb_zcfzb_ncz_1^$sb_zcfzb1.sb_zcfzb_ncs_1+$sb_zcfzb1.sb_zcfzb_ncs_2-$sb_zcfzb1.sb_zcfzb_ncs_3#1," +"sb_zcfzb2.sb_zcfzb_ncz_2^$sb_zcfzb1.sb_zcfzb_ncs_1*$sb_zcfzb1.sb_zcfzb_ncs_2-$sb_zcfzb1.sb_zcfzb_ncs_3," +"sb_zcfzb2.sb_zcfzb_ncz_3^$sb_zcfzb1.sb_zcfzb_ncs_1-$sb_zcfzb1.sb_zcfzb_ncs_2*$sb_zcfzb1.sb_zcfzb_ncs_3#3" };
公式解析计算器的定义及web报表页面及json公式的触发(test.js)
// 引用公式解析计算器 var calculator = tohot.commons.declaration.ExpressionCalculator; calculator.report = testJson; // 设置页面报表公式触发 function setFormular() { sb_zcfzb1.sb_zcfzb_ncs_1.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_1',sb_zcfzb1.sb_zcfzb_ncs_1.value,testFormular.sb_zcfzb1,'2');"); sb_zcfzb1.sb_zcfzb_ncs_2.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_2',sb_zcfzb1.sb_zcfzb_ncs_2.value,testFormular.sb_zcfzb1,'2')");; sb_zcfzb1.sb_zcfzb_ncs_3.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_3',sb_zcfzb1.sb_zcfzb_ncs_3.value,testFormular.sb_zcfzb1,'2')"); sb_zcfzb1.sb_zcfzb_ncs_4.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_4',sb_zcfzb1.sb_zcfzb_ncs_4.value,testFormular.sb_zcfzb1,'2')"); sb_zcfzb1.sb_zcfzb_ncs_5.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_5',sb_zcfzb1.sb_zcfzb_ncs_5.value,testFormular.sb_zcfzb1,'2')"); sb_zcfzb1.sb_zcfzb_ncs_6.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_6',sb_zcfzb1.sb_zcfzb_ncs_6.value,testFormular.sb_zcfzb1,'2')"); sb_zcfzb1.sb_zcfzb_ncs_7.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_7',sb_zcfzb1.sb_zcfzb_ncs_7.value,testFormular.sb_zcfzb1,'2')"); sb_zcfzb1.sb_zcfzb_ncs_8.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_8',sb_zcfzb1.sb_zcfzb_ncs_8.value,testFormular.sb_zcfzb1,'2')"); sb_zcfzb1.sb_zcfzb_ncs_9.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_9',sb_zcfzb1.sb_zcfzb_ncs_9.value,testFormular.sb_zcfzb1,'2')"); sb_zcfzb1.sb_zcfzb_ncs_10.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_10',sb_zcfzb1.sb_zcfzb_ncs_10.value,testFormular.sb_zcfzb1,'2')"); sb_zcfzb1.sb_zcfzb_ncs_11.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_11',sb_zcfzb1.sb_zcfzb_ncs_11.value,testFormular.sb_zcfzb1,'2')"); sb_zcfzb1.sb_zcfzb_ncs_12.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_12',sb_zcfzb1.sb_zcfzb_ncs_12.value,testFormular.sb_zcfzb1,'2')"); sb_zcfzb1.sb_zcfzb_ncs_13.onblur = new Function("calculator.doCalculateCurr('sb_zcfzb1.sb_zcfzb_ncs_13',sb_zcfzb1.sb_zcfzb_ncs_13.value,testFormular.sb_zcfzb1,'2')"); } // 实际情况下,该函数是在保存报表数据之前被调用 function setJson() { // 根据公式定义,计算json值 calculator.doCalculateJson(testFormular); // 遍历json,显示报表数据 for(var key in testJson){ for(var key1 in testJson[key]){ alert(key + "." + key1 + "=" + testJson[key][key1]); } } }
html测试页面(test.html)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>XXX表</title> <link href="css/css.css" rel="stylesheet" type="text/css"> <script language=javascript src="json2.js"></script> <script language="javascript" src="tohot.commons.declaration.ExpressionCalculator.js"></script> <script language=javascript src="testJson.js"></script> <script language=javascript src="test.js"></script> </head> <body onload="javascript:setFormular();"> <form method="post" id="sb_zcfzb1" name="sb_zcfzb1"> <div class="reportTable" style="width:1000px"> <table cellspacing="1" id="reportTable"> <tr class="reportTableTitle"> <td width="20%" rowspan="2" class="report_top_left">资产<br></td> <td width="4%" rowspan="2" class="report_top_middle">行<br>次<br></td> <td width="13%" class="report_top_middle">年初数<br></td> </tr> <tr class="reportTableTitle"> <td class="report_middle_middle"> </td> <td class="report_middle_middle"> </td> <td class="report_middle_middle"> </td> <td class="report_middle_middle"> </td> </tr> <tr> <td class="report_middle_left">流动资产:<br></td> <td class="report_middle_middle"> </td> <td class="report_middle_middle">-<br></td> </tr> <tr> <td class="report_blank_left2">货币资金<br></td> <td class="report_middle_middle">1</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_1" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_1" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2">短期投资<br></td> <td class="report_middle_middle">2</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_2" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_2" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2">应收票据<br></td> <td class="report_middle_middle">3</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_3" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_3" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2">应收股利<br></td> <td class="report_middle_middle">4</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_4" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_4" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2">应收利息<br></td> <td class="report_middle_middle">5</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_5" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_5" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2">应收账款<br></td> <td class="report_middle_middle">6</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_6" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_6" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2">其它应收款</td> <td class="report_middle_middle">7</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_7" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_7" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2"> 预付帐款<br></td> <td class="report_middle_middle">8</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_8" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_8" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2"> 应收补贴款<br></td> <td class="report_middle_middle">9</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_9" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_9" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2">存货<br></td> <td class="report_middle_middle">10</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_10" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_10" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2">待摊费用<br></td> <td class="report_middle_middle">11</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_11" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_11" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2">一年内到期的长期债券投资<br></td> <td class="report_middle_middle">21</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_12" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_12" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2">其他流动资产<br></td> <td class="report_middle_middle">24</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_13" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_13" size="15" class="reportTableInputEditRight"></td> </tr> <tr> <td class="report_blank_left2">流动资产合计<br></td> <td class="report_middle_middle">31</td> <td class="report_middle_middle"><input name="sb_zcfzb_ncs_14" onfocus="this.select()" type="text" id="sb_zcfzb_ncs_14" size="15" readonly class="reportTableInputTitleRight"></td> </tr> <input type="button" value="test" onclick="setJson()"> </form> </body> </html>
javascript公式解析计算器的简单说明和源码放在我的另外一篇博客文章里(http://huangyuanmu.iteye.com/admin/blogs/469190),有兴趣的话,可以看看。
- test.rar (5.1 KB)
- 下载次数: 110
发表评论
-
autochk program not found 蓝屏重启问题解决
2012-04-17 10:54 13841起因: 因为硬盘空间不够,所以把原来的双系统中的ubu ... -
IOS开发一些资源
2012-02-06 16:07 1365从别的地方看到的,多谢作者,现贴在这里备忘。 在线教程 ... -
发现一个好东东,可以让浏览器跟本地桌面交互,哈哈
2011-09-08 17:35 1248http://gears.google.com/ -
nodejs开发运行环境搭建
2011-08-18 15:03 4403一. geddy 开发运行环境搭建 geddy是基 ... -
javascript来势凶猛
2011-08-15 17:22 1215引子 java编程弄了7,8个年头了,也 ... -
Oracle驱动包装
2011-07-06 17:06 2036见附件。 -
javaeye域名变了
2011-04-01 10:31 1280javaeye域名变了,才发现,哈哈,mark下。 -
拥抱敏捷
2011-01-15 17:27 1100前言 有关项目管理和软件开发方 ... -
重温设计模式
2011-01-13 10:27 1165策略模式: 定义了算 ... -
jsoup,html解析的利器
2011-01-07 09:21 1208http://jsoup.org/download -
关于html表格复制到excel
2010-09-09 14:04 5875刚才一个朋友问我这个事情,我拍脑袋想了一下,给他答复不可能,因 ... -
Java 路径 System.getProperty("key")的参数key
2010-09-02 14:37 1289java.version ... -
这种需求,大家看看有没有比较好的解决方案
2010-06-25 09:47 2345在我们的应用中,碰到了如图所示的一种网络结构。 重新描 ... -
java中singleton的几种实现方式
2010-06-24 15:08 1476传统的最简单的方式 这种模式有一个缺点就是不能实现延 ... -
oracle分页查询数据重复问题的解决
2010-06-24 11:00 3429在oracle分页查询中,我们采用类似以下所示的公认的比较高效 ... -
ubuntu10.04中安装使用IE6
2010-06-21 09:55 2598在用ubuntu910的时候,已经装了一遍IE了,但是升级到1 ... -
今天发现的两个有价值的东东
2010-06-17 15:45 1520其一,iRedMail,开源邮件解决方案。 其 ... -
ubuntu 10.04 中安装mysql5.1.4
2010-06-17 15:28 1837自从升级到10.04以后,mysql就不正常,卸载装了n次,均 ... -
升级到ubuntu 10.04,wine中的ie不正常了
2010-06-11 10:01 1708ubuntu上也折腾了半年了,日常工作生活基本没有太多的障碍了 ... -
升级到ubuntu10.04,mysql不能用了
2010-06-11 09:53 18789.10版本用了半年了,10.04发布了,看了10.04的宣传 ...
相关推荐
在IT行业中,数据交换和处理是一项常见的任务,而Excel表格和JSON(JavaScript Object Notation)是两种广泛应用的数据格式。Excel通常用于数据管理、数据分析和报表制作,而JSON因其轻量级、易于阅读和处理的特性,...
Excel到JSON转换工具是一种实用程序,它允许用户将结构化的Excel表格数据轻松转换为JavaScript Object Notation (JSON)格式。这种格式广泛用于Web应用程序,因为它轻量级且易于人类阅读和机器解析。以下是对该工具...
Handsontable支持单元格编辑、公式计算和数据绑定,适合需要进行数据操作的报表场景。 3. ag-Grid:高性能的JavaScript网格组件,用于显示和操作大量数据。ag-Grid提供了丰富的特性,如虚拟滚动、分组、过滤、排序...
在IT行业中,Excel是一种广泛使用的数据管理工具,尤其在数据分析、报表制作以及数据交换方面扮演着重要角色。而“ExcelToData_解析excel工具_json表格_”这个标题暗示了一个工具或者程序,它能够将Excel表格的数据...
润乾报表是一款强大的Java报表工具,专为企业的数据可视化和分析设计。这款工具以其灵活性、易用性和高效性而受到广大开发者的欢迎。本“润乾报表帮助文档”旨在为初学者提供详尽的指导,帮助他们快速掌握润乾报表的...
SpreadJS是一款强大的JavaScript电子表格库,它提供了类似于Excel的功能,允许用户在Web应用中创建、编辑和显示复杂的表格数据。通过集成SpreadJS,T+软件能够提供高度交互、功能丰富的财务报表界面,使得用户可以...
在Excel中,可以直观地查看和编辑数据,创建图表,执行公式计算,如计算某种烹饪方式的菜品数量或者按照功效进行数据分析。 对于这个数据集,用户可以进行以下几种研究和应用: 1. **菜系研究**:通过统计分析,...
ExcelToJson是一款实用的工具,它的主要功能是将Excel表格中的数据转换成JSON(JavaScript Object Notation)格式,这是一种轻量级的数据交换格式,常用于Web服务和应用程序之间的数据传输。该工具支持处理.xls和....
1. **数据导入**:用户上传Excel文件后,SheetJS能快速解析文件内容,并将数据转换为JavaScript对象数组,便于在前端进行展示或处理。 2. **数据导出**:将后台处理后的数据转换为Excel格式,让用户下载,方便他们...
1. Excel:Microsoft Excel是一种广泛使用的电子表格应用程序,适合数据分析、财务计算和报表制作。通过将表格导出为Excel格式(.xlsx),用户可以利用Excel的公式、图表和高级功能对数据进行深度分析。 2. CSV...
【硕正轻量级富Web应用套件——硕正报表主要指标及功能清单】是一款针对Web应用的专业报表设计工具,其特点在于轻量级、高效且兼容性广泛。以下是该套件的关键技术规范、功能特性及其重要性: 1. **技术规范与支持*...
这个库广泛应用于数据分析、报表生成、数据导入导出等场景。 **1. 解析Excel文件** js-xlsx的核心功能是解析XLSX文件。它能将Excel文件的内容转换为JSON对象,方便在JavaScript环境中进行处理。通过`XLSX.read()`...
在Node.js环境中,处理Excel文件是一项常见的任务,特别是在数据分析、数据导入导出或者报表生成等场景。本项目“Node的Excel模块”提供了一个强大的工具,它允许开发者在Node.js环境中方便地读取、写入以及操作XLSX...
【硕正轻量级富Web应用套件——硕正报表主要指标及功能清单】 硕正报表是一款面向企业和组织的轻量级富Web应用套件...总的来说,硕正报表套件以其强大的功能和广泛的兼容性,为企业的数据呈现和分析提供了强大的工具。
总的来说,"js-xlsx-master"是JavaScript环境下处理Excel数据的利器,无论是在数据分析、报表展示还是用户交互场景,都能提供强大的支持。其丰富的API和良好的文档使得开发者可以快速上手并灵活应对各种需求。通过...
在这个示例中,开发者可以学习到如何使用SpreadJS设置数据源并将其绑定到电子表格,同时处理合并的列头,这对于构建复杂的企业级报表和数据分析应用非常有用。具体步骤可能包括: - 创建SpreadJS实例并附加到HTML...
`JsonExportExcel.min.zip` 提供了一个解决方案,它包含一个名为 `JsonExportExcel.min.js` 的JavaScript文件,这个文件很可能是一个轻量级的库,用于将JSON数据转换为可下载的Excel格式。在这个场景下,我们来深入...