com.aspose.cells当前版本20.5中days函数有问题。自定义一个days2函数。

package test;import java.text.SimpleDateFormat;
import java.util.ArrayList;import com.aspose.cells.ICustomFunction;
import com.aspose.cells.ReferredArea;/*** 自定义函数* 使用方法:wb.calculateFormula(true, new CustomFunction());* @author * @date 2021年1月7日 下午12:00:26*/
public class CustomFunction implements ICustomFunction {@Overridepublic Object calculateCustomFunction(String functionName, ArrayList paramsList, ArrayList contextObjects) {/*for (Object o : paramsList) {ReferredArea ra = (ReferredArea) o;if (ra.isArea()) {o = ra.getValues();} else {o = ra.getValue(0, 0);}}*/try {if ("days2".equalsIgnoreCase(functionName)) {// days2(end_date, start_date)// 如果两个日期参数为数字,DAYS 使用 EndDate–StartDate 计算两个日期之间的天数。// 时间戳从1970.1.1开始的毫秒数,日期在EXCEL中是以序列号保存的,默认从1900年1月1日为序号1int endDate, startDate;ReferredArea ra = (ReferredArea) paramsList.get(0);Object o = ra.getValue(0, 0);if (o instanceof Double) {endDate = (int) (double) o;} else {String date = o.toString();String pattern = date.replaceFirst("\\d{4}", "yyyy")// 年.replaceFirst("\\d{1,2}", "MM")// 月.replaceFirst("\\d{1,2}", "dd")// 日.replaceFirst("\\d{1,2}", "HH")// 时.replaceFirst("\\d{1,2}", "mm")// 分.replaceFirst("\\d{1,2}", "ss");// 秒SimpleDateFormat sdf = new SimpleDateFormat(pattern);endDate = (int) org.apache.poi.ss.usermodel.DateUtil.getExcelDate(sdf.parse(date));}ra = (ReferredArea) paramsList.get(1);o = ra.getValue(0, 0);if (o instanceof Double) {startDate = (int) (double) o;} else {String date = o.toString();String pattern = date.replaceFirst("\\d{4}", "yyyy")// 年.replaceFirst("\\d{1,2}", "MM")// 月.replaceFirst("\\d{1,2}", "dd")// 日.replaceFirst("\\d{1,2}", "HH")// 时.replaceFirst("\\d{1,2}", "mm")// 分.replaceFirst("\\d{1,2}", "ss");// 秒SimpleDateFormat sdf = new SimpleDateFormat(pattern);startDate = (int) org.apache.poi.ss.usermodel.DateUtil.getExcelDate(sdf.parse(date));}int count = endDate - startDate;return count;}} catch (Exception e) {e.printStackTrace();}return null;}}
package test;import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;import com.aspose.cells.Cell;
import com.aspose.cells.Cells;
import com.aspose.cells.SaveFormat;
import com.aspose.cells.Workbook;
import com.aspose.cells.Worksheet;
import com.aspose.cells.WorksheetCollection;
import test.CustomFunction;
import util.AsposeLicenseUtil;public class Test3 {public static void main(String[] args) throws Exception {// 去水印验证AsposeLicenseUtil.getExcelLicense();Workbook wb = new Workbook();WorksheetCollection sheets = wb.getWorksheets();Worksheet sheet = sheets.get(0);Cells cells = sheet.getCells();Cell A1 = cells.get("A1");Cell B1 = cells.get("B1");Cell C1 = cells.get("C1");Cell D1 = cells.get("D1");Cell E1 = cells.get("E1");Cell F1 = cells.get("F1");A1.setValue("2021-01-01 00:00:00");B1.setValue("2021-01-01 23:59:58");C1.setValue("2021-01-01 23:59:59");D1.setValue("2021-01-02 00:00:00");E1.setValue("2021-01-02 23:59:58");F1.setValue("2021-01-02 23:59:59");//公式Cell A2 = cells.get("A2");Cell B2 = cells.get("B2");Cell C2 = cells.get("C2");Cell D2 = cells.get("D2");Cell E2 = cells.get("E2");Cell F2 = cells.get("F2");A2.setFormula("=Days2(D1,C1)");//Days(end_date,start_date)B2.setFormula("=Days2(F1,B1)");//Days(end_date,start_date)C2.setFormula("=Days360(C1,D1)");// Days360(start_date,end_date)D2.setFormula("=Days360(B1,F1)");// Days360(start_date,end_date)E2.setFormula("=DATEDIF(C1,D1,\"D\")");// DATEDIF(start_date,end_date,unit)F2.setFormula("=DATEDIF(B1,F1,\"D\")");// DATEDIF(start_date,end_date,unit)// 计算,然后删除公式// wb.calculateFormula(true);// 获取经过公式计算的数据,忽略计算错误wb.calculateFormula(true, new CustomFunction());cells.removeFormulas();// 删除公式Cell A3 = cells.get("A3");Cell B3 = cells.get("B3");Cell C3 = cells.get("C3");Cell D3 = cells.get("D3");Cell E3 = cells.get("E3");Cell F3 = cells.get("F3");A3.setFormula("=Days(D1,C1)");//Days(end_date,start_date)B3.setFormula("=Days(F1,B1)");//Days(end_date,start_date)C3.setFormula("=Days360(C1,D1)");// Days360(start_date,end_date)D3.setFormula("=Days360(B1,F1)");// Days360(start_date,end_date)E3.setFormula("=DATEDIF(C1,D1,\"D\")");// DATEDIF(start_date,end_date,unit)F3.setFormula("=DATEDIF(B1,F1,\"D\")");// DATEDIF(start_date,end_date,unit)String nam = "c:/test/g/" + new SimpleDateFormat("HHmmss").format(new Date()) + ".xlsx";System.out.println(nam);wb.save(new FileOutputStream(nam), SaveFormat.XLSX);wb.dispose();}}

com.aspose.cells使用ICustomFunction自定义函数相关推荐

  1. aspose.cells导出EXCEL分页分组函数

    引用命名空间 using System.Data.SqlClient; using Aspose.Cells; using System.Drawing; using System.IO; /// & ...

  2. Aspose.Cells使用总结大全

    使用到 Aspose.Cells 插件,整理一下. 一:新建解决方案,目录如下 目录说明: Program.cs - 入口类 ExcelGenerator.cs - Aspose.Cells 操作类 ...

  3. 电子表格控件Aspose.Cells V17.4.0发布 | 新增重要功能

    2019独角兽企业重金招聘Python工程师标准>>> Aspose.Cells for .NET 17.4.0 更新 功能和改进 核心 概述 类别 CELLSNET-45216 在 ...

  4. Aspose.Cells - 在任何平台上操作Excel电子表格

    Aspose.Cells - 在任何平台上操作Excel电子表格 用于创建,编辑,转换和渲染Excel文件的原生API,可在任何平台上将电子表格文档导出为多种格式. Aspose.Cells for ...

  5. Aspose.Cells中文版文档

    Aspose.Cells相应操作 1,上传 1.1 Workbook Workbook workBook = new Workbook(); 属性: 名称 值类型 说明 Colors Color[] ...

  6. resize函数_Excel VBA解读(134): 使用Excel函数提高自定义函数的效率

    学习Excel技术,关注微信公众号: excelperfect 在上篇文章中,我们展示了自定义函数有效的方式是通过将单元格区域读取到Variant型数组来传递单元格区域数据.本文将介绍在自定义函数中最 ...

  7. 使用Aspose.Cells的基础知识整理

    使用Aspose.Cells的基础知识整理 转自 http://www.cnblogs.com/kenblove/archive/2009/01/07/1371104.html 这两天用Aspose. ...

  8. Aspose Cells 控件如何实现数据过滤(附代码和下载地址)

    Aspose Cells 是一款操作和处理以及转换Excel文件的类库,支持.NET和JAVA版,几乎所有Excel能实现的功能,Aspose Cells都可以实现,在Excel中经常会用到数据过滤, ...

  9. oracle体育成绩字段,在Excel中利用自定义函数处理体育达标成绩

    一.建立标准查分表 首先是根据<国家体育锻炼标准评分表>以16岁男子(高中一年级)为例,在Excel中建立标准评分表,把工作表命名为"评分表",建立该表的目的是为了编制 ...

最新文章

  1. ∇SLAM:自动可微分SLAM
  2. Html5版本的全套股票行情图开源了,附带实现技术简介
  3. 三级C语言上机考试试题与题解,全国计算机等级三级C语言上机试题逐题解析
  4. 他不怕被拒绝_不怕被拒绝,这几大星座男追人时最有耐心
  5. wxpython使用方法_python图形界面开发之wxPython树控件使用方法详解
  6. vm虚拟机系统界面无法全屏
  7. ECCV 2020 Oral 中谷歌论文盘点,点云与3D方向工作居多
  8. iOS开发那些事-Git在Xcode中的配置与使用
  9. XXX packages are looking for funding run `npm fund` for details
  10. 计算机3c,计算机3C认证办理介绍
  11. WorldS4 2020 | 联邦学习的个性化技术综述
  12. 谷歌无法打开微信二维码链接解决方案 之 使用谷歌模拟微信浏览器
  13. 什么软件编程是最难的?
  14. 如何使用计算机中对数函数,excel对数函数LN,LOG函数等. 使用示例说明excel如何找到对数...
  15. 交叉验证方法思想简介
  16. cisaw是什么证书,cisaw证书有什么用?
  17. 知网学术论文下载caj格式转换 caj转pdf
  18. 马克思 第四章 资本主义的形成及其本质
  19. fis3前端工程构建工具使用小结
  20. springboot、quartz定时任务未触发

热门文章

  1. wed渗透:记录kali系统下扫描工具nikto的使用
  2. JAVA中面向对象基础:抽象类、初始化块
  3. python数据分析与爬虫区别_Python数据分析和爬虫的书分享
  4. python day10
  5. mysql语句创建临时表并存入数据_mysql实例:在存储过程中创建临时表并储存数据...
  6. 大数据分析如何在Python中生成FiveThirtyEight图
  7. 科技见证历史!全球140名明星在家开演唱会
  8. iPhone手动配置代理后无法下载Charles证书解决办法以及unknown文件
  9. 算法:最小生成树(prime,kruskal,floyd)
  10. WAF绕过“小迪安全课堂笔记”信息收集,漏洞发现,漏洞利用,权限控制