精华内容
下载资源
问答
  • Excel计算公式大全详解
  • 叠加求和 今年增长 同比增长 累计同比增长 Excel计算
  • Excel准备 首先,我们先准备一张名为计算公式.xls用以读取Excel计算公式的excel表格。如下图所示,Excel第五行第一列为一个简单的求和公式:=SUM(A2:A4),即第五行第一列的值为第二行第一列 至 第四行第一列之和。 ...
    此后如竟没有炬火,我便是唯一的光。

    前言

    在上期:【Apache POI】Excel操作(五):Excel数据的读取 的博客中,如果有细心的小伙伴的话,恐怕会发现Excel还有一种数据类型我们并没有使用到,那就是:

    HSSFCell.CELL_TYPE_FORMULA
    

    那这个是啥呢?

    好了,不卖关子了,这个就是Excel的计算公式啦!

    具体如何使用,请接着往下看!!!

    Excel准备

    首先,我们先准备一张名为计算公式.xls用以读取Excel计算公式的excel表格。如下图所示,Excel第五行第一列为一个简单的求和公式:=SUM(A2:A4),即第五行第一列的值为第二行第一列 第四行第一列之和。
    在这里插入图片描述

    那我们这篇博客就准备把第五行第一列的计算公式以及值通过Java程序给它读取出来。

    计算公式读取

    话不多说,直接上代码

    这是excel文件的路径:

    /**
     * 路径
    */
    String PATH = "D:\\IdeaProjects\\my_study_demo\\src\\main\\java\\excel\\read";
    

    这是excel文件的名称:

    /**
     * 文件名
    */
    String FILENAME = "计算公式.xls";
    

    主菜:

    /**
     * 读取计算公式
     */
    @Test
    public void readExcelTest() throws Exception {
    
        /**
         * 读取Excel工作簿
         */
        FileInputStream in = new FileInputStream(PATH + File.separator + FILENAME);
        Workbook workbook = new HSSFWorkbook(in);
    
        // 拿到计算公式
       FormulaEvaluator formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);
    
        if (workbook != null) {
            // 获取第一个工作表
            Sheet sheet = workbook.getSheetAt(0);
    
            if (sheet != null) {
             
                // 获取第五行
                Row row = sheet.getRow(4);
    
                if (row != null) {
                    // 获取第一列
                    Cell cell = row.getCell(0);
    
                    // 拿到数据类型
                    int type = cell.getCellType();
                    switch (type) {
                        case HSSFCell.CELL_TYPE_FORMULA:
                            String formula = cell.getCellFormula();
                            System.out.println("计算公式为:" + formula);
    
                            // 进行计算并拿到值
                            CellValue value = formulaEvaluator.evaluate(cell);
                            // 将值转化成字符串
                            String format = value.formatAsString();
                            System.out.println("值为:" + format);
                            break;
                    }
                }
            }
        }
    }
    

    运行得:
    在这里插入图片描述

    直接读取

    这个时候可能有小伙伴就会发出灵魂三问了:不就读值吗?整的这么麻烦干什么?我按照博主上期的博客直接读值不就行了吗?

    那我们就来试试直接读值吧:

    	/**
         * 试图直接读取计算公式的值
         * @throws Exception
         */
        @Test
        public void readTest() throws Exception {
    
            /**
             * 读取Excel工作簿
             */
            FileInputStream in = new FileInputStream(PATH + File.separator + FILENAME);
            Workbook workbook = new HSSFWorkbook(in);
    
            if (workbook != null) {
                // 获取第一个工作表
                Sheet sheet = workbook.getSheetAt(0);
    
                if (sheet != null) {
                    // 获取第五行
                    Row row = sheet.getRow(4);
    
                    if (row != null) {
                        // 获取第一列
                        Cell cell = row.getCell(0);
    
                        if (cell != null) {
                            // 读值
                            double value = cell.getNumericCellValue();
                            System.out.println(value);
                        }
                    }
                }
            }
        }
    

    运行:
    在这里插入图片描述
    结果发现,也很顺利的把值给读取出来了!

    屠龙秘技

    那既然按照上文所说直接读值也能读取值,那我们还费那么大周折干嘛呢???俗话说得好:存在即合理。 既然存在,那么就是有它的道理所在的。如我们试着在读取之前直接通过程序将第二行第一列的值从100改为200:

     // 拿到第二行第一列,把值从100改为200
    Row row2 = sheet.getRow(1);
    Cell cell21 = row2.getCell(0);
    cell21.setCellValue(200);
    

    再直接读取

    	/**
         * 试图直接读取计算公式的值
         * @throws Exception
         */
        @Test
        public void readTest() throws Exception {
    
            /**
             * 读取Excel工作簿
             */
            FileInputStream in = new FileInputStream(PATH + File.separator + FILENAME);
            Workbook workbook = new HSSFWorkbook(in);
    
            if (workbook != null) {
                // 获取第一个工作表
                Sheet sheet = workbook.getSheetAt(0);
                
                // 拿到第二行第一列,把值从100改为200
                Row row2 = sheet.getRow(1);
                Cell cell21 = row2.getCell(0);
                cell21.setCellValue(200);
    
                if (sheet != null) {
                    // 获取第五行
                    Row row = sheet.getRow(4);
    
                    if (row != null) {
                        // 获取第一列
                        Cell cell = row.getCell(0);
    
                        if (cell != null) {
                            // 读值
                            double value = cell.getNumericCellValue();
                            System.out.println(value);
                        }
                    }
                }
            }
        }
    

    运行得:
    在这里插入图片描述
    我们会发现这个时候结果没变,还是600,但是理论上这个值应该是700!

    再通过计算公式读取

    	/**
         * 读取计算公式
         */
        @Test
        public void readExcelTest() throws Exception {
    
            /**
             * 读取Excel工作簿
             */
            FileInputStream in = new FileInputStream(PATH + File.separator + FILENAME);
            Workbook workbook = new HSSFWorkbook(in);
    
            // 拿到计算公式
           FormulaEvaluator formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);
    
            if (workbook != null) {
                // 获取第一个工作表
                Sheet sheet = workbook.getSheetAt(0);
    
                if (sheet != null) {
                    // 拿到第二行第一列,把值从100改为200
                    Row row2 = sheet.getRow(1);
                    Cell cell21 = row2.getCell(0);
                    cell21.setCellValue(200);
    
                    // 获取第五行
                    Row row = sheet.getRow(4);
    
                    if (row != null) {
                        // 获取第一列
                        Cell cell = row.getCell(0);
    
                        // 拿到数据类型
                        int type = cell.getCellType();
                        switch (type) {
                            case HSSFCell.CELL_TYPE_FORMULA:
                                String formula = cell.getCellFormula();
                                System.out.println("计算公式为:" + formula);
    
                                // 进行计算并拿到值
                                CellValue value = formulaEvaluator.evaluate(cell);
                                // 将值转化成字符串
                                String format = value.formatAsString();
                                System.out.println("值为:" + format);
                                break;
                        }
                    }
                }
            }
        }
    

    运行程序得:
    在这里插入图片描述
    完美!!!

    完整代码

    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.*;
    import org.joda.time.DateTime;
    import org.junit.Test;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.Date;
    
    /**
     * @ClassName ExcelReadTest
     * @Description excel读取操作 - 计算公式
     * @Author 古阙月
     * @Date 2020/11/12 21:58
     * @Version 1.0
     */
    public class ExcelReadTest2 {
    
        /**
         * 路径
         */
        String PATH = "D:\\IdeaProjects\\my_study_demo\\src\\main\\java\\excel\\read";
    
        /**
         * 文件名
         */
        String FILENAME = "计算公式.xls";
    
        /**
         * 试图直接读取计算公式的值
         * @throws Exception
         */
        @Test
        public void readTest() throws Exception {
    
            /**
             * 读取Excel工作簿
             */
            FileInputStream in = new FileInputStream(PATH + File.separator + FILENAME);
            Workbook workbook = new HSSFWorkbook(in);
    
            if (workbook != null) {
                // 获取第一个工作表
                Sheet sheet = workbook.getSheetAt(0);
    
                // 拿到第二行第一列,把值从100改为200
                Row row2 = sheet.getRow(1);
                Cell cell21 = row2.getCell(0);
                cell21.setCellValue(200);
    
                if (sheet != null) {
                    // 获取第五行
                    Row row = sheet.getRow(4);
    
                    if (row != null) {
                        // 获取第一列
                        Cell cell = row.getCell(0);
    
                        if (cell != null) {
                            // 读值
                            double value = cell.getNumericCellValue();
                            System.out.println(value);
                        }
                    }
                }
            }
        }
    
    
        /**
         * 读取计算公式
         */
        @Test
        public void readExcelTest() throws Exception {
    
            /**
             * 读取Excel工作簿
             */
            FileInputStream in = new FileInputStream(PATH + File.separator + FILENAME);
            Workbook workbook = new HSSFWorkbook(in);
    
            // 拿到计算公式
           FormulaEvaluator formulaEvaluator = new HSSFFormulaEvaluator((HSSFWorkbook) workbook);
    
            if (workbook != null) {
                // 获取第一个工作表
                Sheet sheet = workbook.getSheetAt(0);
    
                if (sheet != null) {
                    // 拿到第二行第一列,把值从100改为200
                    Row row2 = sheet.getRow(1);
                    Cell cell21 = row2.getCell(0);
                    cell21.setCellValue(200);
    
                    // 获取第五行
                    Row row = sheet.getRow(4);
    
                    if (row != null) {
                        // 获取第一列
                        Cell cell = row.getCell(0);
    
                        // 拿到数据类型
                        int type = cell.getCellType();
                        switch (type) {
                            case HSSFCell.CELL_TYPE_FORMULA:
                                String formula = cell.getCellFormula();
                                System.out.println("计算公式为:" + formula);
    
                                // 进行计算并拿到值
                                CellValue value = formulaEvaluator.evaluate(cell);
                                // 将值转化成字符串
                                String format = value.formatAsString();
                                System.out.println("值为:" + format);
                                break;
                        }
                    }
                }
            }
        }
    }
    
    

    往期回顾

    以下是往期Excel操作的回顾:

    【Apache POI】Excel操作(一):Excel本地写入基本操作的实现

    【Apache POI】Excel操作(二):Excel本地写入基本操作的实现(进阶版)

    【Apache POI】Excel操作(三):Excel在浏览器端即Web端写入操作的实现

    【Apache POI】Excel操作(四):Excel大数据量的写入

    【Apache POI】Excel操作(五):Excel数据的读取

    参考资料:【狂神说Java】POI及EasyExcel一小时搞定通俗易懂

    展开全文
  • 等额本金Excel计算+等额本息Excel计算公式清楚,可以综合对比哪个合算。 公式清楚,可以综合对比哪个合算。
  • 这个excel表格以详细数据列出CP/CPK的计算方法,是一个很好的参考。我们可以根据自己实际所属行业更改参数即可!相当方便!而且对新手理解公式起来也非常容易!
  • 色差值计算公式.xls

    2021-02-04 10:04:42
    计算L A B值综合色差D*ab
  • 为机械设计提供计算支持,便于设计人员的计算校核,缩短设计计算时间,加快产品的开发速度。摆阔轴、销、齿轮、轴承、电机、杆、链条、皮带等多种计算
  • Excel函数计算公式大全(完整),详细记录各实用函数极其使用
  • 9点EXCEL计算公式

    千次阅读 2018-10-11 09:14:02
    9点平面度EXCEL计算公式-对角线法 文末链接 本公式采用9点对角线法,计算平面度误差, 如图所示平均分布采样9点,X方向与Y方向采点间距可以不相同 公式详解 第一次坐标转换 以A1点为0点 这里再以C3点(对角线点)...

    9点平面度EXCEL计算公式-对角线法


    文末链接
    本公式采用9点对角线法,计算平面度误差,
    如图所示平均分布采样9点,X方向与Y方向采点间距可以不相同
    在这里插入图片描述

    自动计算出平面度

    公式详解
    第一次坐标转换
    以A1点为0点
    在这里插入图片描述
    这里再以C3点(对角线点)为0点做一次旋转,求得旋转量P和Q
    得到第二次坐标转换

    展开全文
  • 2018年个人所得税Excel计算公式

    千次阅读 2018-10-22 16:30:59
    45 15160 之前的个税计算公式是: =MAX(L60*{3,10,20,25,30,35,45}% - {0,105,555 ,1005,2755,5505,13505}, 0) 不考虑抵扣,算法和以前一样,公式如下: =MAX(L60*{3,10,20,25,30,35,45}% - {0,210,1410,2660,4410,...

    iamlaosong

    虽然抵扣方案还没有出来,但10月份开始个税起征点提高到5000,各档税率如下:

    级数征税工资税率速算
    (%)扣除数
    10-300030
    23000-1200010210
    312000-25000201410
    425000-35000252660
    535000-55000304410
    655000-80000357160
    780000以上4515160

    之前的个税计算公式是:

    =MAX(L60*{3,10,20,25,30,35,45}% - {0,105,555 ,1005,2755,5505,13505}, 0)

    不考虑抵扣,算法和以前一样,公式如下:

    =MAX(L60*{3,10,20,25,30,35,45}% - {0,210,1410,2660,4410,7160,15160},0)

    其中L60是应纳税工资,即:L60=(应发工资 - 五险一金 - 5000)。

    这是一个很有意思的公式,公式的前半部分是纳税工资乘以税率,后半部分是扣除数,所得税是取各级税率计算结果中的最大值,妙就妙在公式看似和各级税率分档阈值没有关系,实际包含其中,关键就在扣除数上。

    MAX函数最后面增加了一个元素0,是当L60为负数(扣除五险一金后不到起征点)时,最大值就是0。

    20200402补记:

    实际生活中发现有的单位是按全年总数进行扣税的,这样做效果是一样,对职工来说是好事,因为上半年不扣或者扣得少,下半年扣得多。这个方法需要累计个人的收入,也不存在年终奖分摊到12个月的问题。

    如果按全年计算,起征点就是5000*12=60000,超过这个点之后,按下面区间进行征税:

    全年累计扣税法:假定征税工资是10000(扣除五险一金及其他扣除项之后),那么1-6月是免征的,7-9月按3%每月扣税300,10月按3%和10%扣税6000*3%+4000*10%=580,11-12月按10%每月扣税1000,全年共扣税3480元。实际上,不预扣的话,全年一次性计算扣除最简单,即全年总收入120000,扣除起征点60000,剩下60000扣税36000*3%+24000*10%=3480元。

    验证一下按月扣税法,同样假定征税工资是10000,起征点5000,剩下5000元按3%和10%扣税3000*3%+2000*10%=290,全年共扣税290*12=3480元,效果一样。不过这个方法上半年要扣掉1740元,上面的方法则是一分钱没扣。

     

    展开全文
  • Excel公式开发的施工测量数据计算表V1.4.xls
  • 等额本息excel计算

    2020-07-06 08:05:25
    等额本息贷款计算器--用excel计算的。有需要的可以看看。简单美观,公式清楚可看。
  • Excel版本的机械设计计算公式,使用很方便。 包括:键的强度计算;销的强度计算;焊缝及键连接受力计算比较;链条计算;链轮计算;弹簧计算;螺纹计算;万向联轴器计算;齿式联轴器计算;减速机公称功率;过盈计算...
  • excel2010公式与函数

    2018-10-23 13:44:31
    可以用来当字典使用。我只是用来赚点积分,下载点我想要的资料
  • 经纬度转换度分秒转换经纬度与网格坐标互换计算EXCEL公式自动计算
  • Excel计算公式使用

    2019-11-01 20:49:05
    ROUNDUP向上取整,第一个参数为数字,第二个参数为小数点位数(0,结果没有小数点;1,结果小数点为1),如: ...插入计算公式,如:A2=11,Result=ROUNDUP(A2*10%,1) = 2 Excel取小公式:A2=10,C2=1, Result...

    ROUNDUP向上取整,第一个参数为数字,第二个参数为小数点位数(0,结果没有小数点;1,结果小数点为1),如:

    =ROUNDUP(1.1,0) = 2

    =ROUNDUP(2.1,0) = 3

    =ROUNDUP(21.0001,1) = 2.2

    插入计算公式,如:A2=11,Result=ROUNDUP(A2*10%,1) = 2

    Excel取小公式:A2=10,C2=1, Result=MIN(ROUNDUP(A2*10%,0),C2) = 1

    展开全文
  • Java 仿 Excel 公式计算

    2021-07-26 18:27:10
    这是我自己写的一个 Java 仿 Excel 公式计算 工具,支持自定义公式 #
  • B3~F3为输入值,G3为公式计算值 第一次读取,代码如下 import openpyxl book = openpyxl.load_workbook(r"E:\Fan\Python\20210810.xlsx") wb = book.active g3_value = wb.cell(3, 7).value print(g3_value) ...
  • 工程测量用 工程办公 资料编写
  • 利用Excel计算多项式

    2018-11-15 21:46:31
    excel中添加的趋势线是图表中的一种扩展线,它可以直观的看出数据的趋势
  • C#NPOI获取EXCEL单元格公式计算值,测试日期、数字和字符串均没有问题,参数类型:ICell,没用不收费,请勿转发,个人原创。
  • excel快递计算公式

    2019-04-28 10:49:33
    输入重量可以计算出运费。
  • 轴承计算公式.xlsx

    2020-08-04 10:43:32
    轴承规格计算,寿命公式。包含在十几情况下,不同的黏度等级,工作状况和动定载荷的情况下计算。轴承规格计算,寿命公式。包含在十几情况下,不同的黏度等级,工作状况和动定载荷的情况下计算
  • 实用标准文案 Excel 公式计算数据完整性验证方案 Validation protocol of Excel formula data Integrity 文档大全 实用标准文案 方案的审核和批准 REVIEW AND APPROVAL PAGE OF PROTOCOL REVIEW AND APPROV AL OF ...
  • 利用office的 excel计算股票盈亏情况,分时段进行补仓,查看平仓信息
  • 利用Excel数组公式按条件实现总表拆分到分表.rar,本例展示了一份商品销售情况表,其中总表包含了所以单号的销售数据,而与之对于的存在名为“X”和“D”的两个结构相同的工作表,利用介绍的公式将实现总表的数据按...
  • 响应式表格 demo 使用 vite vue3 实现的一个像 excel 那样可以使用公式,改变了单元格的值 具有公式的单元格 的值会跟着一起变
  • 利用Excel公式进行月度季度相关日期计算.rar,本例内容包括:1、返回月末、季度末日期;2、求每季度止息日期;3、确定一个日期所属的季度、半年度。
  • 利用Excel数组公式计算一周中内存采购的平均价格.rar,本例展示了一份某电脑公司一周的内存进货价格明细表,其中每天有可能多次进货,利用介绍的公式可以按每日的最后进货价格来计算出一周的内存平均价格。
  • 比如应发工资计算公式为:应发工资 = 基本工资 + 绩效考核奖 + 加班工资 实发工资 = 应发工资 - 代扣养老保险 - 代扣住房公积金 对应代码为:n07=n00+n04+n05 n10=n07-n08-n09 思路 使用正则表达式匹配计算公式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,815
精华内容 10,726
关键字:

excel计算公式