package com.sprucetec.tms.controller.fee.export;

import com.sprucetec.tms.controller.base.BaseFeeExportExcel;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddress; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List; /**
* 基础运费导出excel
* yangweiqiang
* 2016.7.19
*/
public class BasicDistributeFeeExportExcel extends BaseFeeExportExcel { public BasicDistributeFeeExportExcel(String title, String[] rowName, List<Object[]> dataList, HttpServletResponse response, HttpServletRequest request, String selectedCityName, String month) {
super(title, rowName, dataList, response, request, selectedCityName, month);
} /*
* 实现基础运费的导出逻辑
*/
@Override
public void export() throws Exception { //设置excel的表头
Workbook workbook = setExcelTitle();
HSSFSheet sheet = (HSSFSheet) workbook.getSheet(title); HSSFCellStyle style = getStyle(workbook); //将查询出的数据设置到sheet对应的单元格中
for (int i = 0; i < dataList.size(); i++) { Object[] obj = dataList.get(i);//遍历每个对象
HSSFRow row = sheet.createRow(i + 3);//创建所需的行数 for (int j = 0; j < obj.length; j++) {
HSSFCell cell = null; //设置单元格的数据类型
if (j == 0) {
cell = row.createCell(j);
cell.setCellValue(String.valueOf(i + 1));
} else {
cell = row.createCell(j);
if (!"".equals(obj[j]) && obj[j] != null) {
if (j == 10) {
int rownum = row.getRowNum() + 1;
String formula = "SUM(L" + rownum + ",O" + rownum + ",P" + rownum + ",Q" + rownum + ",R" + rownum + ",S" + rownum + ",W" + rownum + ")-SUM(T" + rownum + ",U" + rownum + ",V" + rownum + ")";
cell.setCellFormula(formula);
}
if (j == 11 || (14 <= j && j <= 22)) {
cell.setCellValue(Double.parseDouble(obj[j].toString())); //设置单元格的值
} else {
cell.setCellValue(obj[j].toString());
}
} else {
cell.setCellValue("");
}
}
cell.setCellStyle(style); //设置单元格样式
}
} //让列宽随着导出的列长自动适应
setSheetColumnWidthAutoResize(sheet, rowName.length); //添加数据校验
CellRangeAddress address1 = new CellRangeAddress(3, sheet.getLastRowNum(), 10, 11);
CellRangeAddress address2 = new CellRangeAddress(3, sheet.getLastRowNum(), 14, 22);
addSheetValidationByNumberData(sheet, Arrays.asList(address1, address2), 0, 10000); //设置二位小数
HSSFDataFormat dataFormat = (HSSFDataFormat) workbook.createDataFormat();
short formatStyle = dataFormat.getFormat("0.00");
int totalRows = dataList.size();
for (int i = 0; i < totalRows; i++) {
HSSFRow row = sheet.getRow(i + 3);
for (int j = 0; j < rowName.length; j++) {
if (j == 11 || (j >= 14 && j <= 22)) {
HSSFCell cell = row.getCell(j);
HSSFCellStyle tmpStyle = cell.getCellStyle();
tmpStyle.setDataFormat(formatStyle);
cell.setCellType(Cell.CELL_TYPE_NUMERIC);
}
}
} //do Export
doExport(workbook);
}
}

导入Excel加行公式和验证的更多相关文章

  1. Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)

    ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件 ...

  2. 一步步实现ABAP后台导入EXCEL到数据库【1】

    在SAP的应用当中,导入.导出EXCEL文件的情况是一个常见的需求,有时候用户需要将大量数据定期导入到SAP的数据库中.这种情况下,使用导入程序在前台导入可能要花费不少的时间,如果能安排导入程序为后台 ...

  3. [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!

    引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...

  4. 7,SFDC 管理员篇 - 数据模型 - 公式和验证 1

    1,自定义公式 Customize | Your Object | Fields | Add Fields Field SF的公式和Excel的公式差不多,都是支持各种运算和结果 例1,以opport ...

  5. DevExpress XtraGrid 数据导出导入Excel

    // <summary> /// 导出按钮 /// </summary> /// <param name="sender"></param ...

  6. java poi 导入excel

    最近项目需要导入excel,网上有很多例子,自己整合记录下,兼容2003和2007,暂时没有添加图片处理功能. 所需jar包  http://pan.baidu.com/s/1sjPuWDR pack ...

  7. 基于 Aspose.Cells与XML导入excel 数据----操作类封装

    前言 导入excel数据, 在每个项目中基本上都会遇到,第三方插件或者基于微软office,用的最多的就是npoi,aspose.cells和c#基于office这三种方式,其中各有各的优缺点,在这也 ...

  8. java之导入excel

    接口: /** * * Description: 导入excel表 * @param map * @param request * @param session * @return * @author ...

  9. 向SQL Server中导入Excel的数据

    1.  手动界面导入Excel数据 同 https://jingyan.baidu.com/article/ce09321b9a0e252bff858ff9.html 首先打开并登陆sql serve ...

随机推荐

  1. MQ学习(二)----ActiveMQ简介(转)

    1.  什么是ActiveMQ ActiveMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信.ActiveMQ使用A ...

  2. Linux命令之修改主机名

    ubuntu永久修改主机名 1.查看主机名 在Ubuntu系统中,快速查看主机名有多种方法: 其一,打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后: 其二,在终端 ...

  3. mysql查询结果写入文件

    注:转自csdn zuyi532 方法1: shell> mysql -uroot -proot -h localhost xxx库 -e " select * from xxx表 l ...

  4. Mysql 如何做双机热备和负载均衡 (方法二)

    先简要介绍一下mysql双向热备:mysql从3.23.15版本以后提供数据库复制功能.利用该功能可以实现两个数据库同步,主从模式(A->B),互相备份模式(A<=>B)的功能. m ...

  5. springmvc入门demo

    目录结构: package com.wyl; import org.springframework.stereotype.Controller; import org.springframework. ...

  6. less做个径向菜单

    在慕课网发现了一个有意思的课程,叫 数学知识在CSS动画中的应用 .用到的数学知识是如何计算圆上每个点的坐标.统一名称,中间的菜单叫触发菜单,四周发散的菜单叫子菜单, 效果预览 慕课网通过jquery ...

  7. 关于scanf("%c",&ch)直接跳过的问题

    有时候scanf("%c",&ch)本应该阻塞等待用户输入一个char型数据的,但为什么会跳过呢? 例:在该程序段中,  int year;    printf(" ...

  8. 测试scanf输入含非法控制符

    心得: 学到scanf命令时第一个想到的就是可以利用scanf做一个十进制转16进制.八进制的小程序,很天真的以为也可以转二进制,在搜索字符控制符的时候才知道原来没有二进制的控制字符,需要换算出来得出 ...

  9. IOS 特定于设备的开发:处理基本方向

    UIDevice类使用内置的orientation属性获取设备的物理方向.IOS设备支持这个属性的7个可能的值. >UIDeviceOrientationUnknown:方向目前未知. > ...

  10. [置顶] C#扩展方法 扩你所需

    通过前面的学习,了解到:使用扩展方法,可以向现有类型“添加”方法.本文将使用扩展方法来对系统类型,自定义类型及接口进行方法扩展,一睹扩展方法的风采. 1.使用扩展方法来扩展系统类型 String是c# ...