### 1. json.load(json_data)與json.dump(python_data) json.load()用來將讀取json文件,json.dump()用來將數據寫入json文件 ### 2. json.loads()與json.dumps() - json.dumps 將 Pyt ...
引入阿裡easyExcel依賴
<!-- easyexcel -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.6</version>
<exclusions>
<exclusion>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
</exclusion>
</exclusions>
</dependency>
自定義的阿裡easyexcel攔截器方法
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import com.jerry.util.ExcelUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URL;
public class SheetWriteHandlerUtil implements SheetWriteHandler {
private String title;
private String[] header;
private String imageurl;
private String sheetName;
private final Log log = LogFactory.getLog(getClass());
public SheetWriteHandlerUtil(String title, String[] header, String imageurl, String sheetName) {
this.title = title;
this.header = header;
this.imageurl = imageurl;
this.sheetName = sheetName;
}
public SheetWriteHandlerUtil(String sheetName) {
this.sheetName = sheetName;
}
@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
}
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
Workbook workbook = writeWorkbookHolder.getWorkbook();
Sheet sheet = workbook.getSheetAt(0);
if (StringUtils.isNotEmpty(sheetName)){
writeWorkbookHolder.getCachedWorkbook().setSheetName(0, sheetName);
}
if (StringUtils.isNotEmpty(title)){
//設置標題
Row row1 = sheet.createRow(0);
row1.setHeight((short) 800);
Cell cell = row1.createCell(0);
//設置單元格內容
cell.setCellValue(title);
CellStyle cellStyle = workbook.createCellStyle();
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
cellStyle.setAlignment(HorizontalAlignment.LEFT);
Font font = workbook.createFont();
font.setBold(true);
font.setFontHeight((short) 400);
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
}
if (header != null){
// 第一行大標題占位設置
sheet.addMergedRegionUnsafe(new CellRangeAddress(0, 0, 0, header.length-1));
}
if(StringUtils.isNotEmpty(imageurl)){
try {
imagewrite(writeWorkbookHolder,writeSheetHolder,imageurl);
} catch (IOException e) {
e.printStackTrace();
log.error("easyexcel攔截器圖片流處理出錯"+ e.getMessage());
}
}
}
public void imagewrite(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder,String imageurl) throws IOException {
Workbook workbook = writeWorkbookHolder.getWorkbook();
Sheet sheet = workbook.getSheetAt(0);
try (ByteArrayOutputStream picOut = new ByteArrayOutputStream()) {
//讀圖片並寫入流
BufferedImage bufferedImage = ImageIO.read(new URL(imageurl));
ImageIO.write(bufferedImage, "png", picOut);
ExcelUtils.addPictureToSheet(sheet, 3, 3, 0,0,workbook.addPicture(picOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG),1.3,6.25);
} catch (Exception e) {
log.debug("", e);
}
}
}
自定義的EasyExcelUtils方法類
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.ss.usermodel.*;
import java.io.ByteArrayOutputStream;
import java.util.*;
/**
* @author wangchaofan-n
*/
public class EasyExcelUtils {
private final Log log = LogFactory.getLog(getClass());
/**
*
* @param list 數據
* @param title 標題
* @param header 動態列
*/
public static void exportDetailLeave(List<Map<String,Object>> list, String title, String[] header,ByteArrayOutputStream out,String imageurl) {
// 標題樣式
WriteCellStyle headWriteCellStyle = getHeadStyle();
// 這個策略是 頭是頭的樣式 內容是內容的樣式 其他的策略可以自己實現
HorizontalCellStyleStrategy horizontalCellStyleStrategy =
new HorizontalCellStyleStrategy(headWriteCellStyle, new WriteCellStyle());
EasyExcel.write(out)
// 第一行大標題樣式設置
.registerWriteHandler(new SheetWriteHandlerUtil(title,header, imageurl, null))
//設置預設樣式及寫入頭信息開始的行數
.useDefaultStyle(true).relativeHeadRowIndex(1)
// 表頭、內容樣式設置
.registerWriteHandler(horizontalCellStyleStrategy)
// 統一列寬,如需設置自動列寬則new LongestMatchColumnWidthStyleStrategy()
//.registerWriteHandler(new SimpleColumnWidthStyleStrategy(25))
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.sheet(title)
// 這裡放入動態頭
.head(head(header))
// 當然這裡數據也可以用 List<List<String>> 去傳入
.doWrite(detail(list));
}
private static List<List<Object>> detail(List<Map<String, Object>> mapList) {
List<List<Object>> list = new ArrayList<>();
for (Map<String, Object> map : mapList) {
List<Object> objectList = new ArrayList<>();
Set<Map.Entry<String,Object>> entrySet = map.entrySet();
for (Map.Entry<String,Object> entry :entrySet){
objectList.add(entry.getValue());
}
list.add(objectList);
}
return list;
}
/**動態頭傳入*/
public static List<List<String>> head(String[] header) {
List<String> head0 = null;
List<List<String>> list = new LinkedList<>();
for (String h : header) {
head0 = new LinkedList<>();
head0.add(h);
list.add(head0);
}
return list;
}
public static WriteCellStyle getHeadStyle(){
// 頭的策略
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
// 背景顏色
headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
// 字體
WriteFont headWriteFont = new WriteFont();
headWriteFont.setFontName("黑體");//設置字體名字
headWriteFont.setFontHeightInPoints((short)15);//設置字體大小
headWriteFont.setBold(true);//字體加粗
headWriteCellStyle.setWriteFont(headWriteFont); //在樣式用應用設置的字體;
// 樣式
headWriteCellStyle.setBorderBottom(BorderStyle.THIN);//設置底邊框;
headWriteCellStyle.setBottomBorderColor((short) 0);//設置底邊框顏色;
headWriteCellStyle.setBorderLeft(BorderStyle.THIN); //設置左邊框;
headWriteCellStyle.setLeftBorderColor((short) 0);//設置左邊框顏色;
headWriteCellStyle.setBorderRight(BorderStyle.THIN);//設置右邊框;
headWriteCellStyle.setRightBorderColor((short) 0);//設置右邊框顏色;
headWriteCellStyle.setBorderTop(BorderStyle.THIN);//設置頂邊框;
headWriteCellStyle.setTopBorderColor((short) 0); //設置頂邊框顏色;
headWriteCellStyle.setWrapped(true); //設置自動換行;
headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);//設置水平對齊的樣式為居中對齊;
headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); //設置垂直對齊的樣式為居中對齊;
//headWriteCellStyle.setShrinkToFit(true);//設置文本收縮至合適
return headWriteCellStyle;
}
}
調用示例
ByteArrayOutputStream out = new ByteArrayOutputStream()
// 此處填寫表的列名
String[] heads = new String[]{"列名1","學習","題乾","選項","答案","解析"};
// 此處為查詢資料庫語句
List<Map<String,Object>> list = nmgtkmanagemapper.querytkinfobystbhs(stbhs);
// 最後一位傳參為電子章地址 若需要可傳
EasyExcelUtils.exportDetailLeave(list,"表格的大標題",heads,out,null);