Apache POI(5):公式(formula)

Apache POI(5):公式(formula)

2016年08月01日 17:44:49

阅读数:1145
  1.  
    package com.hthk.iisz.util;
  2.  
     
  3.  
    import java.io.File;
  4.  
    import java.io.FileOutputStream;
  5.  
     
  6.  
    import org.apache.poi.xssf.usermodel.XSSFCell;
  7.  
    import org.apache.poi.xssf.usermodel.XSSFRow;
  8.  
    import org.apache.poi.xssf.usermodel.XSSFSheet;
  9.  
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  10.  
     
  11.  
    public class FormulaTest {
  12.  
     
  13.  
    public static void main(String[] args) throws Exception {
  14.  
    formula();
  15.  
    }
  16.  
     
  17.  
    public static void formula() throws Exception {
  18.  
    XSSFWorkbook workbook = new XSSFWorkbook();
  19.  
    XSSFSheet sheet = workbook.createSheet("formula");
  20.  
    XSSFRow row = sheet.createRow(1);
  21.  
    XSSFCell cell = row.createCell(1);
  22.  
    cell.setCellValue("A =");
  23.  
    cell = row.createCell(2);
  24.  
    cell.setCellValue(2);
  25.  
    row = sheet.createRow(2);
  26.  
    cell = row.createCell(1);
  27.  
    cell.setCellValue("B =");
  28.  
    cell = row.createCell(2);
  29.  
    cell.setCellValue(4);
  30.  
    row = sheet.createRow(3);
  31.  
    cell = row.createCell(1);
  32.  
    cell.setCellValue("Total =");
  33.  
    cell = row.createCell(2);
  34.  
    // create sum formula
  35.  
    cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
  36.  
    cell.setCellFormula("SUM(C2:C3)");
  37.  
     
  38.  
    cell = row.createCell(3);
  39.  
    cell.setCellValue("SUM(C2:C3)");
  40.  
    row = sheet.createRow(4);
  41.  
    cell = row.createCell(1);
  42.  
    cell.setCellValue("POWER =");
  43.  
    cell = row.createCell(2);
  44.  
    // create power formula
  45.  
    cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
  46.  
    cell.setCellFormula("POWER(C2,C3)");
  47.  
     
  48.  
    cell = row.createCell(3);
  49.  
    cell.setCellValue("POWER(C2,C3)");
  50.  
    row = sheet.createRow(5);
  51.  
    cell = row.createCell(1);
  52.  
    cell.setCellValue("MAX =");
  53.  
    cell = row.createCell(2);
  54.  
    // Create MAX formula
  55.  
    cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
  56.  
    cell.setCellFormula("MAX(C2,C3)");
  57.  
     
  58.  
    cell = row.createCell(3);
  59.  
    cell.setCellValue("MAX(C2,C3)");
  60.  
    row = sheet.createRow(6);
  61.  
    cell = row.createCell(1);
  62.  
    cell.setCellValue("FACT =");
  63.  
    cell = row.createCell(2);
  64.  
    // Create FACT formula
  65.  
    cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
  66.  
    cell.setCellFormula("FACT(C3)");
  67.  
     
  68.  
    cell = row.createCell(3);
  69.  
    cell.setCellValue("FACT(C3)");
  70.  
    row = sheet.createRow(7);
  71.  
    cell = row.createCell(1);
  72.  
    cell.setCellValue("SQRT =");
  73.  
    cell = row.createCell(2);
  74.  
    // Create SQRT formula
  75.  
    cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);
  76.  
    cell.setCellFormula("SQRT(C5)");
  77.  
     
  78.  
    cell = row.createCell(3);
  79.  
    cell.setCellValue("SQRT(C5)");
  80.  
    workbook.getCreationHelper().createFormulaEvaluator().evaluateAll();
  81.  
    FileOutputStream out = new FileOutputStream(new File("formula.xlsx"));
  82.  
    workbook.write(out);
  83.  
    out.close();
  84.  
    System.out.println("fromula.xlsx written successfully");
  85.  
    }
  86.  
     
  87.  
    }

效果截图

 
 
cell.SetCellType(CellType.FORMULA);
sheet.ForceFormulaRecalculation = true;

1.使用cell.setCellFormula方法重新在制定Cell里写入公式。

2.使用sheet.setForceFormulaRecalculation(true);方法强制让改Sheet执行公式。

EvaluateFormulaCell

#region 插入块
int rowsindex = 0;
for (int i = 0; i < lastarea.Count - 1; i++)
{
int tj = rowsindex + 70;
for (; rowsindex < tj; rowsindex++)
{
sheet.CreateRow(rowsindex + 70);   //有些行为null  统一创建一下
sheet.CopyRow(rowsindex, rowsindex + 70);
}
}
#endregion

//统计
if ((HSSFCell)sheet.GetRow(dataarea + 40).GetCell(3) == null) //一个道理 为空 创建
{
ICell cell = (HSSFCell)sheet.GetRow(dataarea + 40).CreateCell(3);
}
((HSSFCell)sheet.GetRow(dataarea + 40).GetCell(3)).SetCellType(CellType.FORMULA); //设置表达式格式

//((HSSFRow)sheet.GetRow(dataarea + 40)).GetCell(3).SetCellValue("=SUM(D" + (dataarea + 1) + ":D" + (dataarea + 40) + ")");
((HSSFRow)sheet.GetRow(dataarea + 40)).GetCell(3).SetCellFormula("SUM(D" + (dataarea + 1) + ":D" + (dataarea + 40) + ")"); //设置表达式的值 不用=

工作总结 npoi 模板 导出公式 excel的更多相关文章

  1. c#使用NPOI快速导出到Excel

    接上篇博文<C#快速导出到excel>:由于此种方法不能导出成.xlsx格式,为解决此问题,本次分享使用NPOI. 参考:https://www.cnblogs.com/lazyneal/ ...

  2. c#.net 使用NPOI导入导出标准Excel (asp.net winform csharp)

    尝试过很多Excel导入导出方法,都不太理想,无意中逛到oschina时,发现了NPOI,无需Office COM组件且不依赖Office,顿时惊为天人,怀着无比激动的心情写下此文. 曾使用过的方法 ...

  3. ASP.NET- 使用NPOI导入导出标准Excel

    尝试过很多Excel导入导出方法,都不太理想,无意中逛到oschina时,发现了NPOI,无需Office COM组件且不依赖Office,顿时惊为天人,怀着无比激动的心情写下此文. 曾使用过的方法 ...

  4. 使用NPOI导入导出标准Excel

    尝试过很多Excel导入导出方法,都不太理想,无意中逛到oschina时,发现了NPOI,无需Office COM组件且不依赖Office,顿时惊为天人,怀着无比激动的心情写下此文. 曾使用过的方法 ...

  5. NPOI 设置导出的excel内容样式

    导出excel时,有时要根据需要加上一些样式,以上几种样式是我在项目中用到的 一.给单元格加背景色只需两步:一是创建单元格背景景色对象:二是给单元格绑定样式 //创建单元格背景颜色对象 HSSFPal ...

  6. 使用NPOI快速导出导入Excel

    这两天做项目需要导入导出EXCEL,是基于NPOI的封装,设计思路是使用DataTable,然后导出一个和DataTable一模一样的Excel表出来 github地址:https://github. ...

  7. NOPI读取模板导出(Excel中追加数据)

    在Controller里,我们定义一个FileResult的Action,返回值是一个文件形式被浏览器下载下来. [HttpGet] public FileResult ExportProductLi ...

  8. asp.net Mvc Npoi 导出导入 excel

    因近期项目遇到所以记录一下: 首先导出Excel : 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// < ...

  9. ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案 try.dot.net 的正确使用姿势 .Net NPOI 根据excel模板导出excel、直接生成excel .Net NPOI 上传excel文件、提交后台获取excel里的数据

    ASP.NET Core 2.2 : 十六.扒一扒新的Endpoint路由方案   ASP.NET Core 从2.2版本开始,采用了一个新的名为Endpoint的路由方案,与原来的方案在使用上差别不 ...

随机推荐

  1. python的ORM框架SQLAlchemy

    本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业  一.ORM介绍 如果写程序用pymysql和程序交互,那是不是要写原生sql语句 ...

  2. 针对各地项目icomet停止服务的临时处理办法

    1.编辑一个脚本 vi /usr/local/watchicomet.sh #!/bin/bash sn=`ps -ef | grep ./icomet-server | grep -v grep | ...

  3. UVA——11988 Broken Keyboard (a.k.a. Beiju Text)

    11988 Broken Keyboard (a.k.a. Beiju Text)You’re typing a long text with a broken keyboard. Well it’s ...

  4. luogu P2776 [SDOI2007]小组队列

    题目背景 嘛,这道非常简单的给大家提供信心的省选题洛谷居然没有! 这么简单的题怎么可以没有! 给大家提升士气是义不容辞的责任! 所以我就来补一下啦.. 值得一提的是,标程是我自己做的.. 很渣,因为数 ...

  5. 二分图变种之最小路径覆盖、最小点覆盖集【poj3041】【poj2060】

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=54859604 向大(hei)佬(e)势力学(di ...

  6. js日常笔记

    写在前面: 在工作中,有时候会遇到一些零零碎碎的小知识点,虽然这些网上都可以查询到,但还是想把一些自己不是很熟悉的当做笔记记录下来,方便以后查询. 1.按钮隐藏/显示/可用/不可用 $("# ...

  7. 集合框架(04)HashMap扩展知识

    Map扩展知识 map集合被使用是具备映射关系 “bigclass”: “001”, ”zhangsan” “002”, ”lisi” “smallclass” : ”001”, “wangwu” : ...

  8. iOS AudioSession详解 Category选择 听筒扬声器切换

    在你读这篇文章之前,如果你不嫌读英文太累,推荐阅读下苹果iOS Human Interface Guidelines中Sound这一章.   选择一个Category AVAudioSessionCa ...

  9. 个人博客 V0.0.3 版本 ...

    早就想弄个人博客网站,一直拖到现在...事情总是忙不完的,想能力提升的快,只能挤时间多练多写了,Keep On Unsleeping 以后原创的笔记都会在自己的博客网站写,博客园和简书就用来转发文章了 ...

  10. MyBatis参数为Integer型并赋值为0时判断失误的问题解决

    mybatis.xml中有if判断条件判断参数不为空时,赋值为0的Integer参数被MyBatis判断为空,因此不执行<if test="param != null and para ...