我就简单的分享一下我常用的工具

这次由于个人问题工具注释全部乱码差点无法还原,也是为了防止数据丢失后期找不到再次保留方法把。

调用工具个别方法

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.9</version>
</dependency>
public void supplierBankExport(HttpServletResponse response, HttpSession session) throws Exception {
String typeName="表名";
String username = "admin";
String sheetName = "sheet";
String[] titles=new String[11];
titles[0]="BBB";//B
titles[1] = "CCC";//C
List<Map<String, Object>> mapData=这个是DAO层获取的数据
//创建表头
HSSFWorkbook wb = ExportTool.getHSSFWorkbook(sheetName, titles, null);
HSSFSheet sheet1 = wb.getSheet(sheetName+ "1"); for (int n = mapData.size(), i = 1; i < n; i++) {
HSSFRow row1 = sheet1.createRow(i); HSSFCell cell0 = row1.createCell(0);//BBB
if (mapData.get(i).get("BBB") != null) {
HSSFRichTextString richString = new HSSFRichTextString(String.valueOf(mapData.get(i).get("BBB")));
cell0.setCellValue(richString);
}
HSSFCell cell1 = row1.createCell(1);//CCC
if (mapData.get(i).get("CCC") != null) {
HSSFRichTextString richString = new HSSFRichTextString(String.valueOf(mapData.get(i).get("CCC")));
cell1.setCellValue(richString);
}
}
//创建文档摘要信息
ExportTool.setTextInfo(wb, username,typeName+"信息批量添加",typeName+"信息批量添加",typeName+"信息批量添加");
try {
String fileName = typeName+"批量新增模板" + System.currentTimeMillis();
// 设定输出文件头
response.setHeader("Content-disposition", "attachment; filename=" + new String((fileName + ".xls").getBytes("GBK"), "ISO8859-1"));
// 定义输出类型
response.setContentType("application/msexcel");
// 取得输出流
OutputStream os = response.getOutputStream();
wb.write(os);
os.flush();
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.Map; import org.apache.poi.hpsf.DocumentSummaryInformation;
import org.apache.poi.hpsf.SummaryInformation;
import org.apache.poi.hssf.usermodel.DVConstraint;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFComment;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Name;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.util.CellRangeAddressList; public class ExportTool {
/**
* 给sheet页,添加下拉列表
*
* @param workbook excel文件,用于添加Name
* @param targetSheet 级联列表所在sheet页
* @param options 级联数据 ['百度','阿里巴巴']
* @param column 下拉列表所在列 从'A'开始
* @param fromRow 下拉限制开始行
* @param endRow 下拉限制结束行
*/
public static void addValidationToSheet(Workbook workbook, Sheet targetSheet, Object[] options, char column, int fromRow, int endRow) {
String hiddenSheetName = "sheet1" + workbook.getNumberOfSheets();
System.out.println(hiddenSheetName);
Sheet optionsSheet = workbook.createSheet(hiddenSheetName);
String nameName = "";
if (Integer.valueOf(column) <= 116 && Integer.valueOf(column) >90) {
nameName ="A" + ((char) (column-26)) + "_parent";
} else {
nameName = column + "_parent";
}
int rowIndex = 0;
for (Object option : options) {
int columnIndex = 0;
Row row = optionsSheet.createRow(rowIndex++);
Cell cell = row.createCell(columnIndex++);
cell.setCellValue(option.toString());
} createName(workbook, nameName, hiddenSheetName + "!$A$1:$A$" + options.length); DVConstraint constraint = DVConstraint.createFormulaListConstraint(nameName);
CellRangeAddressList regions = new CellRangeAddressList(fromRow, endRow, (int) column - 'A', (int) column - 'A');
targetSheet.addValidationData(new HSSFDataValidation(regions, constraint));
} /**
* 给sheet页 添加级联下拉列表
*
* @param workbook excel
* @param targetSheet sheet页
* @param options 要添加的下拉列表内容 , keys 是下拉列表1中的内容,每个Map.Entry.Value 是对应的级联下拉列表内容
* @param keyColumn 下拉列表1位置
* @param valueColumn 级联下拉列表位置
* @param fromRow 级联限制开始行
* @param endRow 级联限制结束行
*/
public static void addValidationToSheet(Workbook workbook, Sheet targetSheet, Map<String, List<String>> options, char keyColumn, char valueColumn, int fromRow, int endRow) {
String hiddenSheetName = "sheet1" + workbook.getNumberOfSheets();
System.out.println(hiddenSheetName);
Sheet hiddenSheet = workbook.createSheet(hiddenSheetName);
List<String> firstLevelItems = new ArrayList<String>(); int rowIndex = 0;
for (Map.Entry<String, List<String>> entry : options.entrySet()) {
String parent = formatNameName(entry.getKey());
firstLevelItems.add(parent);
List<String> children = entry.getValue(); int columnIndex = 0;
Row row = hiddenSheet.createRow(rowIndex++);
Cell cell = null; for (String child : children) {
cell = row.createCell(columnIndex++);
cell.setCellValue(child);
} char lastChildrenColumn = (char) ((int) 'A' + children.size() - 1);
createName(workbook, parent, String.format(hiddenSheetName + "!$A$%s:$%s$%s", rowIndex, lastChildrenColumn, rowIndex)); DVConstraint constraint = DVConstraint.createFormulaListConstraint("INDIRECT($" + keyColumn + "1)");
CellRangeAddressList regions = new CellRangeAddressList(fromRow, endRow, valueColumn - 'A', valueColumn - 'A');
targetSheet.addValidationData(new HSSFDataValidation(regions, constraint));
} addValidationToSheet(workbook, targetSheet, firstLevelItems.toArray(), keyColumn, fromRow, endRow); } /**
* 根据用户在keyColumn选择的key, 自动填充value到valueColumn
*
* @param workbook excel
* @param targetSheet sheet页
* @param keyValues 匹配关系 {'百度','www.baidu.com'},{'淘宝','www.taobao.com'}
* @param keyColumn 要匹配的列(例如 网站中文名称)
* @param valueColumn 匹配到的内容列(例如 网址)
* @param fromRow 下拉限制开始行
* @param endRow 下拉限制结束行
*/
public static void addAutoMatchValidationToSheet(Workbook workbook, Sheet targetSheet, Map<String, String> keyValues, char keyColumn, char valueColumn, int fromRow, int endRow) {
String hiddenSheetName = "sheet1" + workbook.getNumberOfSheets();
System.out.println(hiddenSheetName);
Sheet hiddenSheet = workbook.createSheet(hiddenSheetName); // init the search region(A and B columns in hiddenSheet)
int rowIndex = 0;
for (Map.Entry<String, String> kv : keyValues.entrySet()) {
Row totalSheetRow = hiddenSheet.createRow(rowIndex++); Cell cell = totalSheetRow.createCell(0);
cell.setCellValue(kv.getKey()); cell = totalSheetRow.createCell(1);
cell.setCellValue(kv.getValue());
} for (int i = fromRow; i <= endRow; i++) {
Row totalSheetRow = targetSheet.getRow(i);
if (totalSheetRow == null) {
totalSheetRow = targetSheet.createRow(i);
} Cell cell = totalSheetRow.getCell((int) valueColumn - 'A');
if (cell == null) {
cell = totalSheetRow.createCell((int) valueColumn - 'A');
} String keyCell = String.valueOf(keyColumn) + (i + 1);
String formula = String.format("IF(ISNA(VLOOKUP(%s,%s!A:B,2,0)),\"\",VLOOKUP(%s,%s!A:B,2,0))", keyCell, hiddenSheetName, keyCell, hiddenSheetName); cell.setCellFormula(formula);
} // init the keyColumn as comboList
addValidationToSheet(workbook, targetSheet, keyValues.keySet().toArray(), keyColumn, fromRow, endRow);
} /**
* 创建表单名
*
* @param workbook 表
* @param nameName 名称
* @param formula 不知道
* @return 表单名
*/
public static Name createName(Workbook workbook, String nameName, String formula) {
Name name = workbook.createName();
name.setNameName(nameName);
name.setRefersToFormula(formula);
return name;
} /**
* 隐藏excel中的sheet页
*
* @param workbook
* @param start 需要隐藏的 sheet开始索引
*/
public static void hideTempDataSheet(HSSFWorkbook workbook, int start) {
for (int i = start; i < workbook.getNumberOfSheets(); i++) {
workbook.setSheetHidden(i, true);
}
} /**
* 不可数字开头
*
* @param name
* @return
*/
public static String formatNameName(String name) {
name = name.replaceAll(" ", "").replaceAll("-", "_").replaceAll(":", ".");
if (Character.isDigit(name.charAt(0))) {
name = "_" + name;
} return name;
} /**
* 隐藏列
*
* @param sheet
* @param hiddenColumns
*/
public static void hideColumns(Sheet sheet, List<Integer> hiddenColumns) {
if (null != hiddenColumns && hiddenColumns.size() > 0) {
for (Integer hiddenColumn : hiddenColumns) {
sheet.setColumnHidden(hiddenColumn, true);
}
}
} /**
* 设置表头
*
* @param sheetName 表单名称
* @param titles 表头数据
* @param pichText 批注数据
* @return
*/
public static HSSFWorkbook getHSSFWorkbook(String sheetName, String[] titles, String[] pichText) {
HSSFWorkbook workbook = new HSSFWorkbook();
// 在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet1 = workbook.createSheet(sheetName + "1");
HSSFSheet sheet2 = workbook.createSheet(sheetName + "2");
// 设置表格默认列宽度为15个字节
sheet1.setDefaultColumnWidth(15);
sheet2.setDefaultColumnWidth(15);
/**
* 表格标题样式
*/
HSSFCellStyle style = workbook.createCellStyle();
//true表示自动换行
style.setWrapText(true);
// 设置这些样式
style.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);
style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
/**
* 标题字体
*/
HSSFFont font = workbook.createFont();
font.setColor(HSSFColor.BLACK.index);
font.setFontHeightInPoints((short) 12);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
// 把字体应用到当前的样式
style.setFont(font);
/**
* 表格头部样式
*/
HSSFCellStyle style2 = workbook.createCellStyle();
style2.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);
style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
/**
* 表格头部字体
*/
HSSFFont font2 = workbook.createFont();
font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
font2.setColor(HSSFColor.BLACK.index);
// 把字体应用到当前的样式
style2.setFont(font2);
/**
* 表格内容样式
*/
HSSFCellStyle style3 = workbook.createCellStyle();
style3.setFillForegroundColor(HSSFColor.WHITE.index);
style3.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
style3.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style3.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style3.setBorderRight(HSSFCellStyle.BORDER_THIN);
style3.setBorderTop(HSSFCellStyle.BORDER_THIN);
style3.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style3.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
HSSFRow row1 = sheet1.createRow(0);
for (int n = titles.length, i = 0; i < n; i++) {
HSSFCell cell = row1.createCell(i);
cell.setCellStyle(style2);
if (titles[i] != null) {
HSSFRichTextString richString = new HSSFRichTextString(titles[i]);
cell.setCellValue(richString); // 设置批注
if (pichText != null && pichText.length == titles.length) {
setRichText(sheet1, cell, pichText[i]);
}
}
}
return workbook;
} /**
* 批注设置
*
* @param sheet 表单
* @param cell 单元格
* @param text 批注内容
*/
public static void setRichText(HSSFSheet sheet, HSSFCell cell, String text) {
HSSFPatriarch h = sheet.createDrawingPatriarch();
//创建批注位置
HSSFClientAnchor anchor = h.createAnchor(0, 0, 0, 0, cell.getColumnIndex() + 1, cell.getRowIndex() + 1, cell.getColumnIndex() + 3, cell.getRowIndex() + 4);
//创建批注
HSSFComment comment = h.createCellComment(anchor);
//设置批注内容
comment.setString(new HSSFRichTextString(text));
//设置批注作者
comment.setAuthor("admin");
//设置批注默认显示 // comment.setVisible(true);
comment.setVisible(false);
//把批注赋值给单元格
cell.setCellComment(comment);
} /**
* 文档摘要信息
*
* @param workbook 表
* @param username 用户名
*/
public static void setTextInfo(HSSFWorkbook workbook, String username,String subject,String title,String comments) {
//创建文档信息
workbook.createInformationProperties();
//摘要信息
DocumentSummaryInformation dsi = workbook.getDocumentSummaryInformation();
//类别
dsi.setCategory("Excel");
//管理者
dsi.setManager("管理者:admin");
dsi.setCompany("XXXX");//公司
//摘要信息
SummaryInformation si = workbook.getSummaryInformation();
//主题
si.setSubject(subject==null?"":subject);
//标题
si.setTitle(title==null?"":title);
//作者
si.setAuthor(username);
//备注
si.setComments(comments==null?"":comments);
} }

java Excel 简单工具的更多相关文章

  1. Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类

    Java 通过Xml导出Excel文件,Java Excel 导出工具类,Java导出Excel工具类 ============================== ©Copyright 蕃薯耀 20 ...

  2. 自己写的java excel导出工具类

    最近项目要用到excel导出功能,之前也写过类似的代码.因为这次项目中多次用到excel导出.这次长了记性整理了一下 分享给大伙 欢迎一起讨论 生成excel的主工具类: public class E ...

  3. java 生成简单word(利用Itext工具),生成简单Excel,以及下载笔记

    1.java 生成简单word(包含图片表格) pom中加入itext 相关依赖 <dependency> <groupId>com.lowagie</groupId&g ...

  4. Java对象和Excel转换工具XXL-EXCEL

    <Java对象和Excel转换工具XXL-EXCEL> 一.简介 1.1 概述 XXL-EXCEL 是一个灵活的Java对象和Excel文档相互转换的工具. 一行代码完成Java对象和Ex ...

  5. java里poi操作excel的工具类(兼容各版本)

    转: java里poi操作excel的工具类(兼容各版本) 下面是文件内具体内容,文件下载: import java.io.FileNotFoundException; import java.io. ...

  6. 由于Java的简单类型不能够精确的对浮点数进行运算,这个工具类提供精 确的浮点数运算,包括加减乘除和四舍五入。

    package com.minxinloan.utils; import java.math.BigDecimal; public class Arith { // 源文件Arith.java: /* ...

  7. 「starter推荐」简单高效Excel 导出工具

    EasyExcel EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. 64M内存1分钟内读取75M(46W行25列)的E ...

  8. java基础之JDBC三:简单工具类的提取及应用

    简单工具类: public class JDBCSimpleUtils { /** * 私有构造方法 */ private JDBCSimpleUtils() { } /** * 驱动 */ publ ...

  9. EXCEL导出工具类及调用

    一.Excel导出工具类代码 package com.qiyuan.util; import java.io.OutputStream; import java.io.UnsupportedEncod ...

随机推荐

  1. 第10组 Beta冲刺 (5/5)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/14018671.html ·作业博客:https://edu.cnblogs.co ...

  2. Go语言系列之标准库ioutil

    ioutil标准库中提供了一些常用.方便的IO操作函数 一.相关方法 func ReadAll(r io.Reader) ([]byte, error) func ReadDir(dirname st ...

  3. node之module与fs文件系统

    命令行窗口(小黑屏).cmd窗口.终端.shell 开始菜单 --> 运行 --> CMD --> 回车 常用的指令: dir 列出当前目录下的所有文件 cd 目录名 进入到指定的目 ...

  4. LabVIEW生成.NET的DLL——C#下调用NI数据采集设备功能的一种方法 [原创www.cnblogs.com/helesheng]

    LabVIEW是NI公司的数据采集设备的标准平台,在其上调用NI-DAQmx驱动和接口函数能够高效的开发数据采集和控制程序.但作为一种图形化的开发语言,使用LabVIEW开发涉及算法和流程控制的大型应 ...

  5. IDEA超级好用的插件推荐

    IDEA超级好用的插件推荐 以下都是本人使用idea开发以来,所使用过的插件,强烈推荐,提升代码质量,事半功倍之首选!!! 先介绍下如何安装这些插件:(本人使用idea的版本是2020.2.3) 1. ...

  6. Spring Boot Admin,贼好使!

    Spring Boot Admin(SBA)是一个开源的社区项目,用于管理和监控 Spring Boot 应用程序.应用程序可以通过 http 的方式,或 Spring Cloud 服务发现机制注册到 ...

  7. Java中运算符及其优先级、自动类型提升、类型转化

                   自动类型提升的规则 两个操作数中有一个为double型的数据,计算结果提升为double. 两个操作数中无double型,有一个float,计算结果自动提升为float. ...

  8. 【刷题-LeetCode】229. Majority Element II

    Majority Element II Given an integer array of size n, find all elements that appear more than ⌊ n/3 ...

  9. ThinkPad S5立体声混响以及语音识别

    smartaudio里面改成语音识别就可以是立体声混响了.但是微软语音识别在国内依然不好用,微软服务在国内太卡了. (联想总是多此一举,各种乱起八糟的软件,给用户造成困难,以前老机子驱动无线网卡锁在L ...

  10. C# 代码性能优化举例

    普通人如果说什么事情慢,指的是 5 分钟,10 分钟,或者 1 个小时.2 个小时.而程序员要说什么事情慢,他们指的是 2 纳秒. 每个纳秒对程序员来说都是非常宝贵的,所以,要对代码进行优化,优化,再 ...