长期免费代写自定义函数

楼主
我是社区第55902位番薯,欢迎点我头像关注我哦~
本帖最后由 迈达斯之手 于 2017-2-24 17:46 编辑

免费也是有要求的:
要求
      要么是特殊场景,要求说明自定义公式的具体运用场景。
      要么是某些办公软件已经包含的公式,比如excel之类的
      要么就是某些学科的算法公式
      要么就是某些行业的特有公式
以上几类都可以
      额外要求就是:说清楚为啥要用这个公式。

各种插件开发问题也可以在这里提问~需求也可以提~
模板实现的就算了~模板不会做,多半是帮助文档没看仔细~如果仔细阅读了帮助文档2个月以上,还是不会做的~可以找星痕他们那个团体
~一起讨论一起成长~也可以找他们有偿实现都是模板达人行业精英~


时间差函数传送门      http://bbs.fanruan.com/forum.php?mod=viewthread&tid=85199&page=2&extra=#pid373361
获取WEB内容传送门 http://bbs.fanruan.com/forum.php?mod=redirect&goto=findpost&ptid=85199&pid=382293

自定义函数分组接口文档》》》》》http://help.finereport.com/doc-view-1713.html

方案都是撸主慢慢整理得到的~欢迎大家使用~如需转载撸主任意楼层请注明出处!
分享扩散:
参与人数 +4 F豆 +69 理由
flyingsnake + 1 感谢支持
windy_gui + 1 感谢分享
luker + 1 感谢分享
孤陌 + 66 感谢分享

查看全部评分

沙发
发表于 2017-1-19 11:38:25
本帖最后由 迈达斯之手 于 2017-1-19 12:11 编辑

fr-plugin-countif-1.0.zip (2.92 KB, 下载次数: 238, 售价: 20 个F豆)

EXCEL 的 COUNTIF 妈蛋测试了一下~貌似导出保留不行会被FR转换成单个的格子{:8_219:}跟层次坐标没区别了~

17-01-19 12:16  已经重新上传,现在导出可以保留正确的公式了。

板凳
发表于 2017-1-19 13:40:55
一颗种子正在发芽
地板
发表于 2017-1-19 13:49:26
5楼
发表于 2017-1-19 13:56:03
6楼
发表于 2017-1-19 14:10:41
本帖最后由 迈达斯之手 于 2017-1-19 14:20 编辑

针对番薯micky的问题分享一下:适合0基础的番薯
FR的数据集参数到底是个什么鬼?
有这么一小部分番薯,在入手FR写数据集时被帮助文档的一个${***}就搞懵逼了~
经常问我:我要怎么把我的表导入到FR的数据集里面呀?多个关联表怎么导到一起呢?
吓得我菊花一紧~纳尼~你不会写SQL么?答案是“会呀”,但是不会FR的数据集哎
容我无耐10秒先。下面就说一下FR的数据查询数据集到底是个什么鬼.

1.FR数据查询的SQL跟你在数据库管理工具里面使用的SQL本质上一模一样!
   FR数据查询的SQL跟你在数据库管理工具里面使用的SQL本质上一模一样!
   FR数据查询的SQL跟你在数据库管理工具里面使用的SQL本质上一模一样!重要的事情说3遍
   
2.区别究竟有多大呢。我们来看一个简单的例子
select * from table where kstr='${vstr}' and knum=${vnum}

这里我们定义了两个参数 vstr  vnum
假设我们参数传递的值是 vstr=aaa  vnum=1
我们的SQL就会变成
select * from table where kstr='aaa' and knum=1
这就是FR最终执行的SQL 跟 数据库管理工具是一模一样的
从这个例子我们可以知道 FR数据查询里面的${***}这种结构最终会被置换成一个字符串 跟其他外部的字符串拼接在一起成为完整的SQL

${**}内部又是啥呢?
这里直接给出说明,${}内部就是一个FR的合法公式,该公式返回的是一个转义成字符串或者数字布尔日期型对象。返回的对象跟${}外部的字符串拼接得到的就是你最终想要的SQL

那么我们怎么取写这种SQL呢,我推荐一个方法就是你先在你的管理工具里面把你实际要实现的额SQL写出来执行没问题了,OK全部复制进来~再把需要参数化的部分用${FR公式}的形式代替就可以了。

出错了怎么调试!文件>>选项>>高级>>日志级别=debug  看日志,里面会把最终替换的结果SQL显示出来~根据结果去修改自己的公式就可以了





7楼
发表于 2017-1-19 17:19:20
本帖最后由 迈达斯之手 于 2017-1-19 17:28 编辑

问题:http://bbs.fanruan.com/thread-85200-1-1.html
新建一个记事本,复制粘贴下面的CSS
.dirty{
   color: rgb(230, 108, 32) !important;
}

然后RGB改成你想要的颜色就行
另存为xxxxx.css文件到WebReport下面
然后如果想修改某一个或者某几个模板编辑后字体变色就直接给这几个模板的WEB属性 引入CSS加入这个文件,如果是要所有模板都带有这个属性,就在服务器配置引入CSS文件
就可以了~
也可以用JS~不过JS就要在编辑结束事件一个一个控件的写,不如这个方便~当然如果只需要一个控件或者几个控件编辑后变色就用JS好了
注意是编辑结束后事件,写入
$('td[id*="'+this.options.location+'"]').css('color','rgb(230,108,32)');
8楼
发表于 2017-1-19 17:37:26
本帖最后由 迈达斯之手 于 2017-1-19 17:41 编辑

问题:http://bbs.fanruan.com/thread-85225-1-1.html

方法有两种
1.通过fr_username 到finedb数据源过滤,如果是同步数据集的到对应数据集过滤就好
2.自定义函数

通过这个你可以拿到任何跟用户相关的东西。

9楼
发表于 2017-1-19 18:34:42
不错
10楼
发表于 2017-1-20 10:39:45
膜拜大神,一言不合就是写函数,写插件{:8_209:},爱谁谁不服来论{:6_154:}
11楼
发表于 2017-1-20 13:33:20
{:8_205:}
12楼
发表于 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:}
13楼
发表于 2017-1-20 18:57:21
不错,好帖子顶一顶!感谢楼主
14楼
发表于 2017-1-21 07:19:18
luker 发表于 2017-1-20 18:57
不错,好帖子顶一顶!感谢楼主

发现就你水帖最多
15楼
发表于 2017-1-22 09:55:50
不知道能否实现,自定义批量导出的时候,有150个sheet表,能否自动命名?命名规则是根据每个sheet表的A2单元格参数$部门,目前自定义批量导出的时候,没有这样的功能。
16楼
发表于 2017-1-22 10:10:25
迈达斯之手 发表于 2017-1-22 10:06
可以呀~不过不是自定义函数能实现的了~你可以找@星痕 他们帮你看看~

我很久以前找过,翻边论坛也没有这样的解决办法,我后来只有写vba代码解决,但是这样子麻烦。
17楼
发表于 2017-2-4 16:54:13
老板,给我来10瓶函数
18楼
发表于 2017-2-7 09:40:36
要求

想利用fr来实现html的过滤编辑,类似实现简单的爬虫功能,判断截取的逻辑可以通过fr自己来写,但是如何获取html源码不知道了。
      
设想使用方式。 公式(url)
返回值:指定url的页面html源码。
19楼
发表于 2017-2-7 09:49:05
非常给力啊 ,必须赞一个
20楼
发表于 2017-2-13 12:02:29
函数分组的接口文档已经更新
21楼
发表于 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了!

22楼
发表于 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了~


23楼
发表于 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")
复制代码



24楼
发表于 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. });
复制代码







25楼
发表于 2017-2-23 14:29:02
  如何用函数在填报页实现,或者在sql里实现呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

74回帖数 17关注人数 29372浏览人数
最后回复于:2024-8-13 15:32

返回顶部 返回列表