请上传宽度大于 1200px,高度大于 164px 的封面图片
    调整图片尺寸与位置
    滚轮可以放大缩小图片尺寸,按住图片拖动可调整位置,多余的会自动被裁剪掉
取消
stefan(uid:18902)
职业资格认证:尚未取得认证
【BUG编号:29415】 导出为word时自动调整纸张大小
应用场景: 用户的报表横向很长,导出为word的时候显示不全。所以希望在导出word的时候,word的纸张大小也能自动进行调整。 解决方案: 单元格横向扩展,当扩展的列数过多超过纸张大小,导出时就会分页,想自动进行纸张大小调整。临时解决方案为写一个jsp,对导出的纸张大小进行计算调整。详情见附件。 示例分析: 把export.jsp放到webReport根目录下(放到其他地方时需要改下面js里的url) 填报时在加载后事件里加入:_g().exportReportToWord=function () { if (this.fireEvent(FR.Events.BTOWORD) === false) { return; } this.saveReport(function () { window.location = "${contextPath}/export.jsp?sessionID=" +_g().currentSessionID + "&format=word"; }); this.fireEvent(FR.Events.ATOWORD); }分页预览时在加载后事件里加入:_g().exportReportToWord=function () { if (this.fireEvent(FR.Events.BTOWORD) === false) { return; } window.location = "${contextPath}/export.jsp?sessionID=" + this.currentSessionID + "&format=word"; ; this.fireEvent(FR.Events.ATOWORD); }此时点击原来的word导出即可适应宽度,去掉这段js,则还是原来的导出方法。
【BUG编号:29468】hsql数据库结构
应用场景: 客户在测试环境下开发报表,报表量很大,如一百多张。此时往决策平台上添加这些报表时需要一个一个添加,这是一个不小的工作量,且较易出现失误。定时任务也会有此类情况。 客户希望提供存储这些信息的hsql数据库结构(sql语句),这样便于客户直接修改数据表内容,将节省很大的工作量,带来的操作失误也会大大降低。 解决方案: 详细内容见附件。
【BUG编号:29759】 定时导入子数据库
应用场景: 紫金集团是一家拥有100多家子公司的大型集团公司,旗下子公司涉及各行各业,包括:金矿、铜矿、房产、化纤等。由于子公司在业务上的差异,子公司的财务报表也存在很多不同之处。因此,各个子公司需要根据自己的情况,制作符合自己个性化需求的报表模版,然后再部署到集团服务器进行统一管理。 集团使用的是SAP,所有子公司正是因这个系统而产生大量数据且这些数据保存在一起。此外,各子公司也有一些自己的系统,所以各自也会产生一些数据。 出于数据安全等因素的考虑,各个子公司的数据统一集中在集团总部的数据库。子公司的报表开发人员使用FineReport连接到总部数据库时,只能看到自己权限内的数据。 这个需求之前提供过方案,即建多个视图实现权限控制。但被客户否定,原因是建的视图会过多担心性能会不好。现在客户提出,由于各子公司本身自己也有数据产生,所以现在可以将SAP内的公共数据分开,定期的将各子公司的数据导入到各子公司内的数据库表中,那各子公司在开发报表时就只需连自己的数据库表就可以了,这样就实现了数据权限的控制,同时也较好的将各子公司的数据放在各子公司的数据库表内。 客户希望我们基于这个方案提供个例子,即具体代码的例子,作为提供给客户的参考以及可行性。例子正如上面所述,将一张表中数据根据公司代码分别将各公司数据导入到相应表中去。且需要定时执行,如每天的某个时间。 目前这个需求已经沟通完成,并已完成技术解决方案,详细见附件中的文档。
oracle字符集编码造成的中文乱码问题
售前提问: oracle字符集编码是AMERICAN_AMERICA.US7ASCII 字符编码系统,报表展现的时候读数据和写数据都会造成中文乱码,怎么解决? 回答: US7ASCII类似于ISO-8859-1,把报表里面的原始编码改为ISO-8859-1,新编码改为服务器编码(如GBK),即可解决。
报表填报中的自动计算问题
售前提问: 对于一些复杂的表样填报,此报表为动态扩展出来的,第二列的结论是根据第四列的结论得来的,第四列为下拉框,有四个状态可供选择。问题是用fr工具第二列现在版本不能自动计算得到,下个版本是否考虑把功能加进去。sum(),count(),这些函数是支持自动计算的,怎么到了用find(),array()。。。。。等就不支持了呢。 回答: 目前我们公式能不能自动计算,是根据公式返回值决定的,当公式返回值为单个值时,都会进行自动计算,如sum,应用场景中的find也是返回一个值,是会进行自动计算的。当公式返回值是一个数组时,此时假如公式所在单元格是扩展的,如array(3)是扩展出3行,array(5)扩展出5行,此时array(A1)再进行自动计算会引起结构混乱。如果array(A1)所在单元格不是扩展的,这个在以后产品中可以考虑改善。
【BUG编号:24728】 导出控制---限制导出时的并发
导出控制---限制导出时的并发 需求介绍: 客户报表有点大,报表里面设置了导出,如果同时导出的人员过多,肯定会导致服务器严重滞后~因此客户希望能控制下导出的线程,比如只能同时5个人导出等。 解决方案: 主要思路为写一个filter,当用户请求的op为export时,则对其进行同步处理。配置文件info.txt中有一个参数max,filter则根据这个值来设定最大同步数,如果没有则默认为5个。 示例分析: (1)在web.xml中加入 ReportServerFilter com.fr.filter.ReportServerFilter ReportServerFilter /ReportServer (2)把info.txt、ReportServerFilter.class和ReportServerFilter$ContextFileUtils.class文件放到工程classes/com/fr/filter目录下 (3)info.txt是配置文件,其中max为最大导出时的并发数。如果没有这个文件,默认为5。
【BUG编号:24540】文字翻转
文字翻转 应用场景: 客户要求一排文字中,有的翻转90度显示,有的正常显示。 解决方案: 写一个java公式,公式把传递进来的文字进行旋转画图,返回一个图片。公式第一个参数为显示的字符串,第二个参数为json格式,传递字符串要显示的格式信息,如=revolve("帆软报表FineReport7.0","{color:'red',size:16, dir:1,style:bold,name:'黑体'}")显示为红色,大小16,方向从上到下,粗体,黑体的效果。公式java类见附件中Revolve.class,类的包为com.fr.report.script。 示例分析: 将Revolve.class放到com/fr/report/script文件夹下面,在报表的函数管理器中增添自定义函数revolve,完成后即可在单元格内进行revolve函数编辑了。
【BUG编号:27016】 电子签章集成
电子签章集成 需求介绍: 客户买了北京点聚的电子签章,希望和我们报表相集成,或者和其他电子签章集成的也行。 解决方案: 北京点聚的电子签章WebSign是完全基于浏览器端,通过浏览器加载ActiveX控件,然后用js调用API接口即可实现签章功能,所以与我们报表集成是完全没有问题的。具体API可以在北京点聚的官网里查询。 示例分析: 打开附件中的sign.cpt,模板中加载main.js,填报预览后点击按钮即可实现。
【BUG编号:23953】修改op=fs登录页面
修改op=fs登录页面 应用场景: 用户需要在op=fs里面添加链接,集成自己的web系统。如果用户没有登录报表,直接访问web系统,会重新定向到帆软报表登陆页,然后登录了报表系统以后,再在报表系统里访问web系统,此时如果web系统session失效,那就会重新定向回报表登录页,也就会出现嵌套的情况。因此需要修改下op=fs的登录页面,在里面加上一句判断,如果出现了嵌套,就把整个页面跳转到登录页面上。 把整个页面跳转到登录页面里面的js如下:window.parent.location.href = window.parent.FS.Trans.signOut(); 解决方案: 临时解决方案是在我们的fs登录页面末尾加一句js判断,看登录页面是不是被嵌套了,如果被嵌套了就登出。主要是用top和当前的window对象做比较,如果window!=top,说明被嵌套了。完整的js如下:if(window!=top){ if(top.FS&&top.FS.Trans&&top.FS.Trans.signOut){ top.location.href=top.FS.Trans.signOut(); }else{ top.location.href = "${servletURL}?op=fs_load&cmd=fs_signin"; } }
【BUG编号:24097】行点击事件(满足客户要求)
行点击事件 应用场景: 用户在查看报表时,无需点击特定的按钮,或者数字,他们只要直接点击这行的任意位置,就能弹出相应的信息。这是客户的习惯性需求,即这个需求是客户已经习惯了的功能,也许这个需求可以通过其他方案,也能达到类似的需求,但是用户不接受,他们还是需要按照自己原来的习惯来做。 客户对行事件的要求有两点: (1)当鼠标放在这一行的任意位置,这行的背景变为一个颜色,字体变为另一个颜色。 (2)鼠标点击这一行的任意一个位置,客户触发事件,获取这行的任意的数值,并传递出去,触发客户的事件。 解决方案: (1) 鼠标划过去行改变背景颜色可以在模板加载结束后的事件里加一句 contentPane.makeHighlight('red',"over");表示鼠标移上去行背景颜色改成红色。 鼠标划过去改变字体颜色暂时没有接口,可以自己写加载结束后js,js如下: $("tr").each(function(index,item){ $(item).mouseover(function(){$(this).css("color","red")}); $(item).mouseout(function(){$(this).css("color","black")});});(2) 点击某一行触发客户的事件也类似,写加载结束后js,如点击行弹出这是第几行的js如下: $("tr").click(function(){alert($(this).attr("tridx"));});
利用FTP服务器域目录实现用户访问权限
ftp服务器上的域目录拥有为域内所有用户配置目录访问权限的功能,类比公司的实际情况,可以把所以子公司作为同一个域内的不同用户,每个用户拥有不同的用户名和密码进行登录,同时将不同用户的访问权限锁定到指定的根目录中去,即用户只能看到与之相对应的根目录下面的模板文件等资料,所以只需要让子公司将本地的模板文件通过FTP上传到对应根目录中去就满足了各个子公司只能看到自己公司模板文件的需求了。 详细见附件word.
【BUG编号:22867】 报表连接数据仓库
报表连接数据仓库 应用场景: 客户使用了sqlserver2008的数据库,里面主要存着大量的日常明细数据,数据量达到百万级,客户之前在这些数据的基础上,建立了数据仓库的维度和事实表用于分析,后来通过网上发现我们报表工具制作报表特别方便,所以想知道我们报表如何获取维度表、事实表中的数据进行分析。(客户不想直连数据库,数据太琐碎,量也很大) 解决方案: 只要是可以通过jdbc连接和普通sql访问的数据仓库,我们报表就可以用一般的数据定义方式连接。不能用sql直接访问的数据仓库,只要java可以访问到的,如使用olap4j等驱动,把相应驱动放到报表工程下面,用程序数据集也是可以获取数据的。附件中有一个用程序数据集连接sqlserver数据仓库的示例。
【BUG编号:11057】定时报表以邮件正文的形式发送
1. 问题描述 定时报表在邮件中是以附件的形式显示的,若要查看报表内容则需要下载,若网速很差就无法下载,因此希望报表可以以邮件正文的形式显示这样就无需下载了。 2. 解决方案 通过二次开发将报表导出成图片的形式,然后通过JavaMail将导出的图片以邮件正文的方式发送,最后定义一个servlet实现定时生成图片以及定时发送邮件的功能。 3. 实现步骤 3.1 将报表导出图片 将报表导出图片的代码如ExportImage.java。 3.2 发送邮件 发送邮件代码如SendMailTask.java。 在发送邮件类中需要修改对应的发件箱,收件箱,密码等,具体代码如下:1 private String host = "smtp.XX.com"; //配置邮件服务器 2 private String user = "XX@XX.com"; //用户名 3 private String pwd = "XX"; //密码 4 private String from = "XX@XX.com"; //发件箱 5 private String to = "XX@XX.com"; //收件箱 6 private String subject= ""; //主题 7 private String txt = "详细信息如下:" 8 +""; //邮件正文 注意:txt中必须添加一个image标签用来显示图片的,src中的图片名称必须与下面gifPart.setHeader("Content-Location", "view.jpg");里面的名称相同。 3.3 创建定时调用的servlet 具体的servlet代码如SendMailServlet.java。 在servlet文件中可以定义具体的导出时间以及邮件发送时间,代码如下:1 GregorianCalendar tomoforei = new GregorianCalendar(year,month,day,17,30,00); //导出时间 2 GregorianCalendar tomoforsm = new GregorianCalendar(year,month,day,17,30,20);//邮件发送时间编译如上的三个类文件,将编辑后的class文件放在对应报表应用下WEB-INF/classes/com/fr/mail下。 注意:在编译这三个文件时,需要用到 javax.servlet.jar,fr-third-6.5.jar以及fr-server-6.5.jar 3.4 修改web.xml文件 在web.xml中添加刚创建的servlet:1 2 SendMailServlet 3 com.fr.mail.SendMailServlet 4 1 5 6 7 SendMailServlet 8 /SendMailServlet 9 最后启动服务器,到指定的时间就会导出图片并将图片以邮件正文的形式显示。
【BUG编号:29681】填报时自动获取其他扩展行的值变化
填报时自动获取其他扩展行的值变化 需求介绍: 在填报报表中,经常会遇到一些自动扩展行的数据填报,用户经常会遇到扩展行的数据之间存在关联,相互影响,例如扩展出来的第一行和第二行的数据填报完成后相加得到的和就是第六行的数据,所以当用户在改变第一行数据的时候,第六行也需要随之变化。这就需要实现能够自动获取其他扩展行的值变化。 思路解析: 利用JS编辑结束后事件编辑,通过循环遍历单元格每一行的特征信息来获取应该对应的行,然后实现填报数据动态变化的功能。 示例中主要实现的是学生分数录入填报,当用户修改学生语文成绩的时候,学生的语文等级会自动修正为准确数据,数学英语以此类推。 代码如下://获取第二列的控件的位置和值 var location=this.options.location; var Cell2=FR.cellStr2ColumnRow(location); var value=this.getValue(); Cell2.col--; //为了确定循环次数,在第一列的底端添加一个隐藏按钮控件,获取其行号用于下面的for循环 var widget=_g().getWidgetByName("button"); var widget_location=widget.options.location; var Button=FR.cellStr2ColumnRow(widget_location); //循环遍历第一列数据,找到“语文”对应的分数再进行判断等级 for(var i=0;i< Button.row;i++){ Cell2.row=Cell2.row+i; var value1=_g().getCellValue(Cell2.col,Cell2.row); if(value1=="语文"){ var score=_g().getCellValue(Cell2.col+1,Cell2.row); alert(score); if(score>84){ _g().setCellValue(Cell2.col+1,Cell2.row+3,"1"); } if(score>60&&score<85){ _g().setCellValue(Cell2.col+1,Cell2.row+3,"2"); } if(score<60){ _g().setCellValue(Cell2.col+1,Cell2.row+3,"3"); } } Cell2.row=Cell2.row-i; }
【BUG编号:24362】 弹出框给控件赋值
弹出框给控件赋值 应用场景: 用户在报表填报中经常会遇到可供选择的数据量很大或者数据选择流程复杂,这时候希望能够在填报时点击后弹出对话框页面进行较为复杂的选择,点击完成后会自动将选好的结果赋给填报的文本控件。 解决方案: 示例中的功能是点击选择后会打开iframe对话框,跳转到新的报表页面可以进行地区和销售员的选择,点击确定后会将选择的销售员的名字自动赋给文本控件中并关闭对话框。详细见附件中模板cpt文件。 示例分析: 父报表中选择按钮控件js点击事件: //调用showHyperlinkDialog,以showDialog方式打开choice.cpt,参数为json格式,dialog大小为600*600 FR.doHyperlinkByGet("ReportServer?reportlet=choice.cpt&op=write",{para:"name"},"_dialog","600,600,");子报表中确定按钮控件js点击事件: //获取姓名控件及其值 var widget=this.options.form.getWidgetByName("person"); var value=widget.getValue(); //获取父报表的文本控件,将子报表中控件的值赋给文本控件 var widget2=top._g().parameterEl.getWidgetByName("name"); widget2.setValue(value); //关闭对话框 window.parent.FR.closeDialog();
【BUG编号:24619】触发实现sheet跳转
本帖最后由 stefan 于 2013-1-11 09:53 编辑 触发实现sheet跳转 需求介绍: 客户需要在首页报表里面展现多个报表名字,比如一季度、二季度这样的sheet,然后点击以后,跳转到对应sheet上面查看,不会涉及到参数传递,只需跳转 解决方案: 主要是触发sheet的跳转,js语句: contentPane.$contentPane.data("TabPane").tabsContent.buttons.setActiveState(); 可以实现跳转到第n个sheet页面。这样如果要实现模板内的跳转,直接写js即可,要跳转到其他模板的sheet页面,则传递sheet参数,再写加载后事件根据sheet参数实现跳转。示例见附件sheet.cpt。 填报预览加载结束JS事件如下: //创建changeSheet窗口函数,参数sheet表示要跳转到第几个sheet if(true!=window.changeSheetFlag){ window.changeSheetFlag=true; window.changeSheet=function(n){ contentPane.$contentPane.data("TabPane").tabsContent.buttons.setActiveState(); } }else{ return; } if(sheet&&sheet>1){ if(sheet-2>=contentPane.$contentPane.data("TabPane").tabsContent.buttons.length) { return; } changeSheet(sheet); };
【BUG编号:29717】 定时任务的邮件发送实现给不同发件人发送不同内容
本帖最后由 stefan 于 2012-12-21 09:58 编辑 定时任务的邮件发送实现给不同发件人发送不同内容应用场景:用户是电器设计生产销售行业,现在他们下面有很多经销,这些经销商会经常从他们那采购以及回款等。鸿雁电器需要定期的给这些客户发送邮件,告知其回款情况,货物剩余情况等。还有他们公司给员工发工资时也需要给各员工发送邮件,告知其工资金额。这里给员工以及客户发送邮件时,邮件内容只能是和该员工或客户相关的内容,其他客户或员工的数据不要发给这个客户。 解决方案:根据帮助文档中二次开发 >> 引擎API >> 导出API >> 后台批量导出Excel章节的内容实现根据不同的参数组合统计出对应数据结果,并生成excel等文件,再结合报表内部EmailManager接口send函数实现邮件发送功能,将收件人和数据作为参数传入即可实现给不同发件人发送不同内容。 示例分析:利用FRDemo中的销量表,将华东数据发给一个邮箱,华北数据发给另一个邮箱。(1) 编写Test类:把地区和邮箱作为参数写入para.txt,分别生成0.xls和1.xls发送到对应邮箱。编译完成后把类复制到报表对应文件夹下。【注:send函数格式为:EmailManager mgr=ConfigManager.getInstance().getEmailManager(); mgr.send( "收件人", "抄送", "密送", "发送人", "主题", "内容", "附件" ); para.txt放在代码中指定的路径中即可,邮箱可根据实际需要进行修改。】实现代码如下:package com.fr.output;import java.io.*;import java.util.Arrays;import javax.mail.MessagingException;import com.fr.base.FRContext;import com.fr.base.dav.LocalEnv;import com.fr.base.file.ConfigManager;import com.fr.base.file.EmailManager;import com.fr.base.file.*;import com.fr.fs.schedule.output.AbstractOutputFileAction;import com.fr.io.ExcelExporter;import com.fr.io.TemplateWorkBookIO;import com.fr.main.ResultWorkBook;import com.fr.main.TemplateWorkBook;import com.fr.util.Utils;public class Test extends AbstractOutputFileAction{ @Override public File getFilesToDealWith(File files) { return files; } @Override public void doFileAction(File files) { try { // 定义报表运行环境,用于执行报表 String envpath = "E:\\FineReport_7.0\\WebReport\\WEB-INF"; FRContext.setCurrentEnv(new LocalEnv(envpath)); // ModuleContext.startModule(EngineModule.class.getName()); // 读取环境下的模板文件 TemplateWorkBook workbook = TemplateWorkBookIO.readTemplateWorkBook(FRContext.getCurrentEnv(), "doc\\Primary\\Parameter\\Parameter.cpt"); // 读取用于保存的参数值的txt文件 File parafile = new File(envpath + "\\para.txt"); FileInputStream fileinputstream; fileinputstream = new FileInputStream(parafile); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileinputstream)); // 定义保存参数的map,用于执行报表 java.util.Map paramap = new java.util.HashMap(); /* * 遍历参数值所在txt文件,txt文件中参数保存形式为 para1,para2 江苏,陈羽 江苏,安娜 首先取出第一行保存参数名称 * 遍历每个参数组合,如para1=江苏、para2=陈羽,根据参数执行模板,并将结果导出excel excel文件名为名称+导出编号 */ // 读第一行,保存参数名称 String lineText = bufferedReader.readLine(); lineText = lineText.trim(); String paraname = Utils.splitString(lineText, ","); System.out.println(Arrays.toString(paraname)); // 遍历每个参数组合,执行模板,导出结果 int number = 0; while ((lineText = bufferedReader.readLine()) != null) { lineText = lineText.trim(); String paravalue = Utils.splitString(lineText, ","); for (int j = 0; j < paravalue.length; j++) { paramap.put(paraname, paravalue); } ResultWorkBook result = workbook.execute(paramap); File sendfile = new File(number + ".xls"); OutputStream outputdtream = new FileOutputStream(sendfile); ExcelExporter excelexporter = new ExcelExporter(); excelexporter.export(outputdtream, result); //定义sendfile为参数导出生成的数据文件,传入send函数 EmailManager mgr=ConfigManager.getInstance().getEmailManager(); try { String email= (String)paramap.get("邮箱");//定义email为获取参数中的邮箱列的内容,传入send函数 mgr.send(email,"","","stefan465srb@gmail.com","You succeed!","",sendfile); } catch (MessagingException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 最后要清空一下参数map,用于下次计算 paramap.clear(); number++; } } catch (Exception e) { e.printStackTrace(); } finally{ } } }(2) 在报表平台管理的服务器设置中对于邮件发送地址进行相应设置,示例如下图:http://bbs.fanruan.com/data/attachment/album/201212/20/154506yz4yvvg0p7kns9yy.png点击发送测试邮件进行测试,若成功则可以点击提交,则邮件设置成功!(3) 在决策管理平台中定时任务中利用自定义附件功能调用Test类即可实现给不同的收件人发送不同数据的功能。
【BUG编号:24712】 新打开报表页面监听主框架事件
新打开报表页面监听主框架事件需求介绍:客户希望先打开报表页面,然后可以通过配置的方式将数据源动态传递给报表,而且产品框架这边不动,希望报表页面那块可以主动监听主框架选择事件 解决方案:主要要实现子页面根据主页面的参数表单变化而自动刷新页面。思路为在子页面用js写一个周期函数,每隔一定时间去检查主页面的参数表单,如果值有变化了,则刷新本页面。 示例分析:子报表的填报预览设置中增添加载结束后JS事件,代码如下:if(typeof window.opener!="undefined"){ $$=window.opener.$;val=$$("input:checked").val();//获取主页面中的值function checkChange(){var tmp=$$("input:checked").val();if(tmp!=val){val=tmp;return true;}else{return false;};} //检查是否有值改变,结果返回true/falsefunction doInterval(){if(checkChange()){window.location="ReportServer?reportlet=son.cpt&op=write&area="+FR.cjkEncode(val);}}//如果有变化,动态传参并重新打开报表即刷新setInterval(doInterval,1000); // setInterval函数实现周期性调用doInterval函数,周期为1000ms,即1s}
【BUG编号:25317】复选框实现全选操作
复选框实现全选操作需求介绍:客户使用我们报表做一个审批流程,对下级单位的录入数据统一审批。在一张报表中展示所有下级单位和相关信息,可以通过超链等查看详细信息。如果审核合格,则勾选下级信息前的复选框,表示“已审核”;如果上级对所有下级单位的数据比较肯定,或者通过其他方式审核过了,就没有必要每个单位都去勾选复选框,希望能够通过一个单独的复选框,能够将所有下级的复选框都勾上,减少工作。 需求总结即扩展出来的复选框,需要全选操作。 解决方案:主要实现对复选框进行全选。在复选框中的初始化事件中把控件加入到一个全局数组里,然后在全选复选框里对数组里的控件进行遍历赋值。示例见附件。 示例分析:单独复选框JS初始化后事件编辑,代码如下:if (!window.lineboxes) { window.lineboxes = ; //控件加入到一个全局数组里} lineboxes = this; 对于全选复选框进行JS状态改变后事件编辑,代码如下:var flag=this.getValue(); //获取当前复选框控件的状态,true /falsefor(var i=0;i
【BUG编号:29407】 插入行时,给动态单元格赋值
应用场景: 下拉框选择后动态给后面单元格赋值,根据文档http://www.finereporthelp.com/help/8/0/5/1/6.html做出来的效果不对。文档中可以给扩展单元格赋值,不过这只适用于自动扩展的,对于通过增加行按钮增加的行这方法不行。 解决方案: 如果用文档中的row,col做参数对于增加行等情况确实存在不确定性,这里我们建议利用JS编辑控件实现对应功能。附件中的例子就是实现将第二列的数据赋值给第一列的数据,点击增加行依然可以满足该功能。为了更贴近你的需求,我设置成第二列文本控件编辑结束事件就把值直接赋给第一列。具体思路和方法你也可以参考售前技术共享平台中分享的公共接口函数文档附录中的示例二。
12下一页
个人成就
内容被浏览432
加入社区11年171天
返回顶部