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. 转 C#中静态方法与非静态方法区别比较

    C#静态方法与非静态方法的区别不仅仅是概念上的,那么他们有什么具体的区别呢?让我们通过本文向你做一下解析. C#的类中可以包含两种方法:C#静态方法与非静态方法.那么他们的定义有什么不同呢?他们在使用 ...

  2. asp.net word内容读取到页面

    1.添加Microsoft.Vbe.Interop.dll引用. 2.以下方法可以简单的读取到word文档文字内容,不包括图片.格式等. private string ReadWordFile(str ...

  3. 美化 input type=file控件

    大家都知道input的type=file控件默认样式是不能修改的 可以通过一个小技巧处理下 html: <a href="javascript:;" class=" ...

  4. git创建分支与合并分支

    git branch myfeture 创建分支 git checkout myfeture git add --all git commit -m git push origin myfeture ...

  5. 【Howie玩docker】-命令行只显示-bash-4.1#

    灵雀云上面用docker建了个centOS的实例,首个免费,正好当云主机来玩. 但是,打开有个问题,命令行不显示当前用户和路径. 只显示: -bash-4.1# 简单,配置文件不全而已. 下面对其重新 ...

  6. 【LeetCode题意分析&解答】35. Search Insert Position

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  7. NAND FLASH特性说明

    1.NAND FLASH 的特殊性. 1)存在坏块.由于NAND生产工艺的原因,出厂芯片中会随机出现坏块.坏块在出厂时已经被初始化,并在特殊区域中标记为不可用,在使用过程中如果出现坏块,也需要进行标记 ...

  8. C++可变参数的另一种实现

    大家熟知的C库函数printf函数就是一个可变参数函数,它是怎么实现的呢?不过他实现是有条件的,必须函数参数的入栈顺序为从右向左的顺序,也即函数的形参,在函数调用之前,必须是最右边的参数先入栈,并且参 ...

  9. BASE64URL解析

    BASE64URL是一种在BASE64的基础上编码形成新的加密方式,为了编码能在网络中安全顺畅传输,需要对BASE64进行的编码,特别是互联网中. BASE64URL编码的流程: .明文使用BASE6 ...

  10. 只有小于65535端口编程可以用,查看哪些端口被打开netstat -anp,nc命令,nmap命令

    1024以下是系统保留的,从1024-65535是用户使用的 个人写的应用程序,尽量不要使用0到1024之间的端口号. 1024到65535我们编程可以用.这个不是Linux规定的,是socket规定 ...