package com.qingxs.common.util;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.text.DecimalFormat;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;
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.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFSimpleShape;
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.DateUtil;
public class PoiUtil {
private static final String ENFONT = "宋体";
/**
* 设置数据中间行样式
*
* @author zmh
* @param row
* @param defultStyle
* @param rightStyle
* @param cellNum
* 2017年2月17日
*/
public static void setRowStyle(HSSFRow row, HSSFCellStyle defultStyle, HSSFCellStyle leftStyle, HSSFCellStyle rightStyle,
int cellNum) {
HSSFCell cell = row.getCell(0);
cell.setCellStyle(leftStyle);
for (int i = 1; i < cellNum; i++) {
cell = row.getCell(i);
if (cell == null) {
cell = row.createCell(i);
}
cell.setCellStyle(defultStyle);
}
cell.setCellStyle(rightStyle);
}
/**
* 设置数据最后一行样式
*
* @author zmh
* @param row
* @param bottomStyle
* @param bottomRightStyle
* @param cellNum
* 2017年2月17日
*/
public static void setBottomRowStyle(HSSFRow row, HSSFWorkbook wb, int cellNum) {
HSSFCell cell = row.getCell(0);
HSSFCellStyle bottomStyle = PoiUtil.getBottomStyle(wb);
HSSFCellStyle bottomLeftStyle = PoiUtil.getBottomLeftStyle(wb);
HSSFCellStyle bottomRightStyle = PoiUtil.getBottomRightStyle(wb);
cell.setCellStyle(bottomLeftStyle);
for (int i = 1; i < cellNum; i++) {
cell = row.getCell(i);
if (cell == null) {
cell = row.createCell(i);
}
cell.setCellStyle(bottomStyle);
}
cell.setCellStyle(bottomRightStyle);
}
/**
* 找到需要插入的行数,并新建一个POI的row对象
*
* @param sheet
* @param rowIndex
* @return
*/
public static HSSFRow createRow(HSSFSheet sheet, Integer rowIndex) {
HSSFRow row = null;
if (sheet.getRow(rowIndex) != null) {
sheet.shiftRows(rowIndex, sheet.getLastRowNum(), 1, true, false);
}
row = sheet.createRow(rowIndex);
return row;
}
/**
* 默认9号宋体
*
* @author zmh
* @param wb
* @return 2017年2月17日
*/
public static HSSFFont defaultFont9(HSSFWorkbook wb) {
HSSFFont curFont = wb.createFont(); // 设置字体
curFont.setFontName(PoiUtil.ENFONT);
curFont.setCharSet(HSSFFont.DEFAULT_CHARSET); // 设置中文字体,那必须还要再对单元格进行编码设置
curFont.setFontHeightInPoints((short) 9);
return curFont;
}
/**
* 数据默认样式
*
* @author zmh
* @param workbook
* @return 2017年2月17日
*/
public static HSSFCellStyle getDefaultStyle(HSSFWorkbook workbook) {
HSSFCellStyle style = workbook.createCellStyle();
// 设置 上下左右 边框 为实线;
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
style.setFont(PoiUtil.defaultFont9(workbook));
setDefaultStyle(style);
return style;
}
/**
* 数据行最右侧单元格样式
*
* @author zmh
* @param workbook
* @return 2017年2月17日
*/
public static HSSFCellStyle getRightStyle(HSSFWorkbook workbook) {
HSSFCellStyle style = workbook.createCellStyle();
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
style.setFont(PoiUtil.defaultFont9(workbook));
setDefaultStyle(style);
return style;
}
/**
* 数据行最左侧单元格样式
*
* @author zmh
* @param workbook
* @return 2017年2月17日
*/
public static HSSFCellStyle getLeftStyle(HSSFWorkbook workbook) {
HSSFCellStyle style = workbook.createCellStyle();
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
style.setFont(PoiUtil.defaultFont9(workbook));
setDefaultStyle(style);
return style;
}
/**
* 设置默认样式
*
* @author zmh
* @param style
* 2017年2月17日
*/
public static void setDefaultStyle(HSSFCellStyle style) {
// 设置 上下左右 边框颜色;
style.setTopBorderColor(HSSFColor.BLACK.index);
style.setTopBorderColor(HSSFColor.BLACK.index);
style.setLeftBorderColor(HSSFColor.BLACK.index);
style.setRightBorderColor(HSSFColor.BLACK.index);
style.setWrapText(true);// 设置自动换行;
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 设置水平对齐的样式为居中对齐;
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 设置垂直对齐的样式为居中对齐;
}
/**
* 数据行最后低行样式
*
* @author zmh
* @param workbook
* @return 2017年2月17日
*/
public static HSSFCellStyle getBottomStyle(HSSFWorkbook workbook) {
HSSFCellStyle style = workbook.createCellStyle();
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
style.setFont(PoiUtil.defaultFont9(workbook));
setDefaultStyle(style);
return style;
}
/**
* 数据行最后低行 右侧样式
*
* @author zmh
* @param workbook
* @return 2017年2月17日
*/
public static HSSFCellStyle getBottomRightStyle(HSSFWorkbook workbook) {
HSSFCellStyle style = workbook.createCellStyle();
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_MEDIUM);
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
style.setFont(PoiUtil.defaultFont9(workbook));
setDefaultStyle(style);
return style;
}
/**
* 数据行最后低行 左侧样式
*
* @author zmh
* @param workbook
* @return 2017年3月22日
*/
public static HSSFCellStyle getBottomLeftStyle(HSSFWorkbook workbook) {
HSSFCellStyle style = workbook.createCellStyle();
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_MEDIUM);
style.setBorderLeft(HSSFCellStyle.BORDER_MEDIUM);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
style.setFont(PoiUtil.defaultFont9(workbook));
setDefaultStyle(style);
return style;
}
public HSSFCellStyle defaultStyle(HSSFWorkbook wb, HSSFFont defaultFont9, short rmb4Format) {
HSSFCellStyle curStyle = wb.createCellStyle();
curStyle.setWrapText(true); // 换行
curStyle.setFont(defaultFont9);
curStyle.setDataFormat(rmb4Format);
return curStyle;
}
// 指定图片类型为jpg
public void setPicture(HSSFWorkbook wb, HSSFPatriarch patriarch, String pic, int iRow, int iCol) throws IOException {
// 判断文件是否存在
File imgFile = new File(pic);
if (imgFile.exists()) {
// 图片处理
ByteArrayOutputStream byteArrayOut = new Byt