提问
 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,极速登录

长期免费代写自定义函数

xiesb 社区微信达人 初学乍练(Lv1)
发表于 2017-1-20 13:33:20 | 显示全部楼层 |取消关注该作者的回复
{:8_205:}
此帖共有 881 位番薯登录后查看
  • 评论

回复 支持 反对

使用道具 举报

Poseidon 社区微信达人番薯互助团队 文档共创团队 互助叫兽、助理编辑
发表于 2017-1-20 15:27:50 | 显示全部楼层 |取消关注该作者的回复
迈神提个需求,时间类计算,
目前FR公式中只有日期计算,或者获得年月日时分秒上位置的数值,没有直接2个日期时间相减的函数,例如2017-01-20 12:30:31 到 2017-01-22 11:10:10 这样的时间差没有直接的公式,需要换算为毫秒然后再通过一堆的公式才能转换为所差的时分秒;
还有普通的时间差 例如 13:10:10 到 15:01:20 这样的时间差,都需要一堆公式去转换;
来一个时间差的函数吧{:6_160:}
  收起(1)
  • 迈达斯之手 迈达斯之手

    如果确定是两个日期类型相减倒是简单~如果是各种字符串就不行,要先转换成日期类型~本质上还是一样的~
    2017-01-20 15:33 评论
  • 评论

回复 支持 反对

使用道具 举报

luker  禁止发言
发表于 2017-1-20 18:57:21 | 显示全部楼层 |取消关注该作者的回复
提示: 作者被禁止或删除 内容自动屏蔽
  • 评论

回复 支持 反对

使用道具 举报

迈达斯之手 番薯互助团队 互助砖家
发表于 2017-1-21 07:19:18 | 显示全部楼层 |取消关注该作者的回复
luker 发表于 2017-1-20 18:57
不错,好帖子顶一顶!感谢楼主

发现就你水帖最多
来自苹果客户端来自苹果客户端
  • 评论

回复 支持 反对

使用道具 举报

monvzhilei  初出茅庐(Lv3)
发表于 2017-1-22 09:55:50 | 显示全部楼层 |取消关注该作者的回复
不知道能否实现,自定义批量导出的时候,有150个sheet表,能否自动命名?命名规则是根据每个sheet表的A2单元格参数$部门,目前自定义批量导出的时候,没有这样的功能。

点评

SHEET名字支持引用动态传参,即使用公式,公式里面用参数作为因子,比如说我们修改sheet1的名称为=$ID+"编号订单表"  发表于 2017-2-1 18:33
来自苹果客户端来自苹果客户端
  收起(1)
  • 迈达斯之手 迈达斯之手

    可以呀~不过不是自定义函数能实现的了~你可以找@星痕 他们帮你看看~
    2017-01-22 10:06 评论
  • 评论

回复 支持 反对

使用道具 举报

monvzhilei  初出茅庐(Lv3)
发表于 2017-1-22 10:10:25 | 显示全部楼层 |取消关注该作者的回复
迈达斯之手 发表于 2017-1-22 10:06
可以呀~不过不是自定义函数能实现的了~你可以找@星痕 他们帮你看看~

我很久以前找过,翻边论坛也没有这样的解决办法,我后来只有写vba代码解决,但是这样子麻烦。
来自苹果客户端来自苹果客户端
  收起(1)
  • 迈达斯之手 迈达斯之手

    java可以实现的~有接口~我帮别人实现过而且功能比你要这个还要复杂得多~只是我对实现过的东西基本上就不会再做了~所以你可以找星痕他们看看~
    2017-01-22 10:13 评论
  • 评论

回复 支持 反对

使用道具 举报

漩涡 番薯互助团队 帆软员工 互助砖家、助理编辑
发表于 2017-2-4 16:54:13 | 显示全部楼层 |取消关注该作者的回复
老板,给我来10瓶函数
  收起(1)
  • 星痕 星痕

    2017-02-05 08:14 评论
  • 评论

回复 支持 反对

使用道具 举报

flyingsnake 社区微信达人实名认证 番薯互助团队 文档共创团队 互助叫兽、助理编辑
发表于 2017-2-7 09:40:36 | 显示全部楼层 |取消关注该作者的回复
要求

想利用fr来实现html的过滤编辑,类似实现简单的爬虫功能,判断截取的逻辑可以通过fr自己来写,但是如何获取html源码不知道了。
      
设想使用方式。 公式(url)
返回值:指定url的页面html源码。

点评

旋窝大神的插件里有:http://help.finereport.com/doc-view-1493.html 函数名:htmlFinder---去帆软应用中心看,这个貌似是新增的函数  发表于 2017-2-24 11:28
  收起(1)
  • 迈达斯之手 迈达斯之手
    1. package com.func;

    2. import java.io.BufferedReader;
    3. import java.io.InputStreamReader;
    4. import java.net.HttpURLConnection;
    5. import java.net.URL;

    6. import com.fr.script.AbstractFunction;
    7. import com.fr.stable.Primitive;

    8. public class ReadWebContent extends AbstractFunction{
    9.         private static final long serialVersionUID = -8554841138953821411L;
    10.         @Override
    11.         public Object run(Object[] args) {
    12.                 if(null ==args || args.length == 0){
    13.                         return Primitive.ERROR_VALUE;
    14.                 }
    15.                 InputStreamReader isr = null;
    16.                 BufferedReader br = null;
    17.                 try {
    18.                         StringBuffer html = new StringBuffer();
    19.                         URL url = new URL((String) args[0]);
    20.                         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    21.                         isr = new InputStreamReader(conn.getInputStream());
    22.                         br = new BufferedReader(isr);
    23.                         String temp = null;
    24.                         while ((temp = br.readLine()) != null) {
    25.                                 html.append(temp).append(\"\\n\");
    26.                         }
    27.                         return html.toString();
    28.                 } catch (Exception e) {
    29.                         try{
    30.                                 if(null !=br){
    31.                                         br.close();
    32.                                 }
    33.                                 if(null !=isr){
    34.                                         isr.close();
    35.                                 }
    36.                         }catch(Exception e1){}
    37.                         return Primitive.ERROR_VALUE;
    38.                 }
    39.         }
    40. }
    复制代码


    这样的吧~我直接百度COPY的代码~
    2017-02-07 12:23 评论
  • 评论

回复 支持 反对

使用道具 举报

wangqy2015  初学乍练(Lv1)
发表于 2017-2-7 09:49:05 | 显示全部楼层 |取消关注该作者的回复
非常给力啊 ,必须赞一个
  收起(1)
  • 迈达斯之手 迈达斯之手

    2017-02-07 12:29 评论
  • 评论

回复 支持 反对

使用道具 举报

迈达斯之手 番薯互助团队 互助砖家
发表于 2017-2-13 12:02:29 | 显示全部楼层 |取消关注该作者的回复
函数分组的接口文档已经更新
  • 评论

回复 支持 反对

使用道具 举报

迈达斯之手 番薯互助团队 互助砖家
发表于 2017-2-15 10:56:28 | 显示全部楼层 |取消关注该作者的回复
问题 超链接触发按钮点击的方法:
问题传送门:http://bbs.fanruan.com/thread-85800-1-1.html
按钮初始化事件 :
  1. FR.TestBtn = this;//习惯把按钮赋值给一个变量,不喜欢用方法去拿
复制代码
点击事件:
  1. alert("按钮点击被触发了!");
复制代码
这里只是举例说明,实际事件以自己写的为主
添加一个超链接JS:
  1. FR.TestBtn.fireEvent('click');
复制代码
OK了!
1.jpg
  收起(6)
  • 星痕 星痕

    {:8_206:}霸气冲天的师傅啊
    2017-02-15 11:30 评论
  • x82905301 x82905301 : 有个小问题,我是按照这个写的,但是放在数据列会对应不上,这个要怎么办。
    2018-01-17 16:08 评论
  • 迈达斯之手 迈达斯之手 : 回复 x82905301 :扩展的你的FR.testBtn要改造成一个数组~很简单~自己思考一下就知道了~
    2018-01-18 09:00 评论
  • x82905301 x82905301 : 回复 迈达斯之手 :懂了,就是说超链接和按钮获取行号列号命名不一样,对应点击的也不一样是吧。
    2018-01-18 10:48 评论
  • 迈达斯之手 迈达斯之手 : 回复 x82905301 :是的~
    2018-01-18 11:06 评论
  • 还有1条评论 点击查看

    评论

回复 支持 反对

使用道具 举报

迈达斯之手 番薯互助团队 互助砖家
发表于 2017-2-15 13:25:31 | 显示全部楼层 |取消关注该作者的回复
问题:时间段报表联动
问题传送门:http://bbs.fanruan.com/thread-85810-1-1.html
分别做p1 p2 p3 3个参数,p1是下拉框 p2是开始时间 p3是结束时间
p2日期控件初始化事件
  1. FR.p2=this;//把控件赋值给变量,省得获取的时候写一长串代码
复制代码
p3日期控件初始化事件
  1. FR.p3=this;//把控件赋值给变量,省得获取的时候写一长串代码
复制代码
p1下拉框编辑后事件
  1. var sfv = this.getValue();
  2. var start = '';
  3. var end = '';
  4. if(sfv == '本月'){
  5.         start = FR.remoteEvaluate('FORMAT(DATEINMONTH(TODAY(),1),"yyyy-MM-dd")');
  6.         end = FR.remoteEvaluate('FORMAT(DATEINMONTH(TODAY(),-1),"yyyy-MM-dd")');
  7. }else if(sfv == '上月'){
  8.         start = FR.remoteEvaluate('FORMAT(DATEINMONTH(DATEDELTA(DATEINMONTH(TODAY(),1),-1),1),"yyyy-MM-dd")');
  9.         end = FR.remoteEvaluate('FORMAT(DATEINMONTH(DATEDELTA(DATEINMONTH(TODAY(),1),-1),-1),"yyyy-MM-dd")');
  10. }else if(sfv == '本周'){
  11.         start = FR.remoteEvaluate('FORMAT(DATEINWEEK(TODAY(),1),"yyyy-MM-dd")');
  12.         end = FR.remoteEvaluate('FORMAT(DATEINWEEK(TODAY(),-1),"yyyy-MM-dd")');
  13. }else if(sfv == '上周'){
  14.         start = FR.remoteEvaluate('FORMAT(DATEINWEEK(DATEDELTA(DATEINWEEK(TODAY(),1),-1),1),"yyyy-MM-dd")');
  15.         end = FR.remoteEvaluate('FORMAT(DATEINWEEK(DATEDELTA(DATEINWEEK(TODAY(),1),-1),-1),"yyyy-MM-dd")');
  16. }
  17. FR.p2.setValue(start);
  18. FR.p3.setValue(end);
复制代码
OK了~


  • 评论

回复 支持 反对

使用道具 举报

迈达斯之手 番薯互助团队 互助砖家
发表于 2017-2-15 13:31:44 | 显示全部楼层 |取消关注该作者的回复
问题:时间段报表联动
问题传送门:http://bbs.fanruan.com/thread-85810-1-1.html
分别做p1 p2 p3 3个参数,p1是下拉框 p2是开始时间 p3是结束时间
p2日期控件初始化事件
  1. FR.p2=this;//把控件赋值给变量,省得获取的时候写一长串代码
复制代码
p3日期控件初始化事件
  1. FR.p3=this;//把控件赋值给变量,省得获取的时候写一长串代码
复制代码
p1下拉框编辑后事件
  1. var sfv = this.getValue();
  2. var start = '';
  3. var end = '';
  4. if(sfv == '本月'){
  5.         start = FR.remoteEvaluate('FORMAT(DATEINMONTH(TODAY(),1),"yyyy-MM-dd")');
  6.         end = FR.remoteEvaluate('FORMAT(DATEINMONTH(TODAY(),-1),"yyyy-MM-dd")');
  7. }else if(sfv == '上月'){
  8.         start = FR.remoteEvaluate('FORMAT(DATEINMONTH(DATEDELTA(DATEINMONTH(TODAY(),1),-1),1),"yyyy-MM-dd")');
  9.         end = FR.remoteEvaluate('FORMAT(DATEINMONTH(DATEDELTA(DATEINMONTH(TODAY(),1),-1),-1),"yyyy-MM-dd")');
  10. }else if(sfv == '本周'){
  11.         start = FR.remoteEvaluate('FORMAT(DATEINWEEK(TODAY(),1),"yyyy-MM-dd")');
  12.         end = FR.remoteEvaluate('FORMAT(DATEINWEEK(TODAY(),-1),"yyyy-MM-dd")');
  13. }else if(sfv == '上周'){
  14.         start = FR.remoteEvaluate('FORMAT(DATEINWEEK(DATEDELTA(DATEINWEEK(TODAY(),1),-1),1),"yyyy-MM-dd")');
  15.         end = FR.remoteEvaluate('FORMAT(DATEINWEEK(DATEDELTA(DATEINWEEK(TODAY(),1),-1),-1),"yyyy-MM-dd")');
  16. }
  17. FR.p2.setValue(start);
  18. FR.p3.setValue(end);
复制代码
OK了~
说一下公式是什么个意思
DATEINMONTH/DATEINWEEK对today求1和-1分别得到的是本月/周的第一天和最后一天,DATEDELTA对本月/周第一天求-1就是上月/周的最后一天,再用DATEINMONTH/DATEINWEEK求1就得到上月/周的第一天
所以上面的上月/周最后一天还可以写成
  1. FORMAT(DATEDELTA(DATEINMONTH(TODAY(),1),-1),"yyyy-MM-dd")
  2. FORMAT(DATEDELTA(DATEINWEEK(TODAY(),1),-1),"yyyy-MM-dd")
复制代码



  • 评论

回复 支持 反对

使用道具 举报

迈达斯之手 番薯互助团队 互助砖家
发表于 2017-2-18 21:10:39 | 显示全部楼层 |取消关注该作者的回复
问题:双击任意一行页面进行跳转,传递参数
问题链接:http://bbs.fanruan.com/thread-85922-1-1.html

web属性,加载结束事件
  1. var fire = false;
  2. //超链接所在列序号
  3. var colidx = 4;
  4. //获取所有的行,当然你可以自己完善增加控制点击有效区域的代码
  5. //比如3-9行之类的点击才有效,或者A1-E15之类的看你自己需要了
  6. $('tr[tridx]').click(function(e){
  7.         fire = !fire;
  8.         if(fire){
  9.                 $('span',$('td',$(e.target.parentNode))[colidx]).click();
  10.         }
  11. });
复制代码







  收起(1)
  • doumenwangjian doumenwangjian

    谢谢,谢谢,谢谢
    2017-02-19 21:49 评论
  • 评论

回复 支持 反对

使用道具 举报

xiao27343 社区微信达人 初学乍练(Lv1)
发表于 2017-2-23 14:29:02 | 显示全部楼层 |取消关注该作者的回复
5463958ae8107d06df.png   如何用函数在填报页实现,或者在sql里实现呢?
  收起(1)
  • 迈达斯之手 迈达斯之手

    你现在做出来是什么效果呢~
    2017-02-23 15:05 评论
  • 评论

回复 支持 反对

使用道具 举报

xiao27343 社区微信达人 初学乍练(Lv1)
发表于 2017-2-23 15:10:02 | 显示全部楼层 |取消关注该作者的回复
表格从erp里导出来格式就固定的,类似于上图左边有空白的单元格“名称”,导入数据库后也是一样为空的,想在导入时的填报页面通过  函数补全,这样才能继续做视图树。效果跟上图一样,只是字段和数据不一样
  收起(1)
  • 迈达斯之手 迈达斯之手

    你如果是导入excel的话~不行的~导入的时候会把公式冲掉的~导入后所有的公式都失效了~
    2017-02-23 15:21 评论
  • 评论

回复 支持 反对

使用道具 举报

xiao27343 社区微信达人 初学乍练(Lv1)
发表于 2017-2-23 15:32:20 | 显示全部楼层 |取消关注该作者的回复
那么在导入后,再对数据库特定列为空的行 进行批量处理要怎么做呢?
  收起(1)
  • 迈达斯之手 迈达斯之手

    写excel导入后事件,通过判断目标列的格子从上到下的遍历,如果有值,放到全局变量中,没值把全局变量的值赋给当前单元格~
    2017-02-23 16:17 评论
  • 评论

回复 支持 反对

使用道具 举报

迈达斯之手 番薯互助团队 互助砖家
发表于 2017-2-24 17:32:24 | 显示全部楼层 |取消关注该作者的回复
本帖最后由 迈达斯之手 于 2017-2-24 17:37 编辑

问题:特定的sheet页面下控件不可见
连接:http://bbs.fanruan.com/thread-86190-1-1.html
1.先将要隐藏的控件赋值给一个全局对象控件初始化事件【个人习惯,不喜欢用方法去拿】
  1. FR.MyWidget = this;
复制代码

2.加载结束事件
  1. if(null == FR.WShow){
  2.         FR.WShow = true;
  3. }
  4. if(FR.WShow){
  5.         FR.WShow = false;
  6.         var btns = contentPane.$contentPane.data('TabPane').tabBtns;
  7.         btns.forEach(function(item,idx){
  8.                 item.on('click',function(e){
  9.                         if(idx==4){
  10.                                 FR.MyWidget.setVisible(false);
  11.                         }else{
  12.                                 FR.MyWidget.setVisible(true);
  13.                         }
  14.                 });
  15.         });
  16. }
复制代码
可以了,我这里设置的是第五个sheet【序号就是4,从0开始的】

其实方法还有很多种了,比如你可以重写选择sheet的js,不过这个要对FR的js有足够的了解才行。还有一种笨办法你可以监控当前选择的是哪个sheet等等~

  • 评论

回复 支持 反对

使用道具 举报

flyingsnake 社区微信达人实名认证 番薯互助团队 文档共创团队 互助叫兽、助理编辑
发表于 2017-3-2 10:21:43 | 显示全部楼层 |取消关注该作者的回复
老大,是否可以写个ip地址到实际地理位置的函数呢?比如使用淘宝或腾讯的数据接口的
  收起(1)
回复 支持 反对

使用道具 举报

flyingsnake 社区微信达人实名认证 番薯互助团队 文档共创团队 互助叫兽、助理编辑
发表于 2017-3-31 14:25:51 | 显示全部楼层 |取消关注该作者的回复
迈神,您看看这个函数是否有思路写
当页面加载的时候,如果控件太多,会早晨页面加载缓慢。用户体验感不好。
有个思路,当页面展现的时候,不加载控件,当页面加载完,才执行一个函数,进而展现控件。不知道是否可行。
  收起(1)
  • 迈达斯之手 迈达斯之手

    这种一般都不这么做的~一般都是做成主子报表~点击主表的某些单元格(需要编辑的),然后跳出子表,里面显示对应的控件,编辑后把值回填就可以了~
    2017-03-31 14:28 评论
  • 评论

回复 支持 反对

使用道具 举报

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

本版积分规则

联系管理员@兔子酱|联系帆软|免责声明|手机版|帆软社区|Copyright © 帆软软件有限公司 ( 苏ICP备14031611号-3 )

GMT+8, 2018-12-10 11:04 , Processed in 0.659153 second(s), 208 queries , Gzip On.

返回顶部 返回列表