public AjaxResult exportExcel(Map<String,List<Object>> data, String sheetName)
{
String filename = encodingFilename(sheetName);
HorizontalCellStyleStrategy horizontalCellStyleStrategy = getHorizontalCellStyleStrategy();
try {
Integer[] columnWidthArr = new Integer[dynamicList(data).size()];
for(int i=0;i<columnWidthArr.length;i++){
columnWidthArr[i]=7000;
}
List<Integer> columnWidths = Arrays.asList(columnWidthArr);
CustomSheetWriteHandler customSheetWriteHandler = new CustomSheetWriteHandler(columnWidths);
EasyExcel.write(getAbsoluteFile(filename))
.registerWriteHandler(horizontalCellStyleStrategy)
.registerWriteHandler(customSheetWriteHandler)
.head(dynamicHead(data)).sheet(sheetName)
.doWrite(dynamicList(data));
return AjaxResult.success(filename);
}
catch (Exception e)
{
log.error("导出Excel异常{}", e.getMessage());
throw new BusinessException("导出Excel失败,请联系网站管理员!");
}
}
private List<List<String>> dynamicHead(Map<String,List<Object>> data) {
List<List<String>> headList = new ArrayList<>();
for (String key:data.entrySet())
{
List<String> head = new ArrayList<>();
head.add(key);
headList.add(head);
}
return headList;
}
private List<List<Object>> dynamicList(Map<String,List<Object>> data){
List<List<Object>> list = new ArrayList<>();
int max =0;
for (String key : data.entrySet())
{
List<Object> lineData=data.get(key);
if(max<lineData.size()){
max=lineData.size();
}
}
for(int i=0;i<max;i++){
List<Object> line=new ArrayList<> ();
for (String key : data.entrySet())
{
List<Object> lineData=data.get(key);
line.add(lineData.get(i));
}
list.add(line);
}
return list;
}
private HorizontalCellStyleStrategy getHorizontalCellStyleStrategy() {
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
WriteFont headWriteFont = new WriteFont();
headWriteFont.setFontHeightInPoints((short) 11);
headWriteCellStyle.setWriteFont(headWriteFont);
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
WriteFont contentWriteFont = new WriteFont();
contentWriteFont.setFontHeightInPoints((short)11);
contentWriteCellStyle.setWriteFont(contentWriteFont);
HorizontalCellStyleStrategy horizontalCellStyleStrategy =
new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
return horizontalCellStyleStrategy;
}
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import org.apache.commons.collections.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
public class CustomSheetWriteHandler implements SheetWriteHandler {
private List<Integer> columnWidths;
public CustomSheetWriteHandler(List<Integer> columnWidths) {
this.columnWidths = columnWidths;
}
private static final Logger LOGGER = LoggerFactory.getLogger(CustomSheetWriteHandler.class);
@Override
public void beforeSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
}
@Override
public void afterSheetCreate(WriteWorkbookHolder writeWorkbookHolder, WriteSheetHolder writeSheetHolder) {
LOGGER.info("第{}个Sheet写入成功。", writeSheetHolder.getSheetNo());
LOGGER.info("普通策略设置setColumnWidth开始~");
if(CollectionUtils.isNotEmpty(columnWidths)){
for (int i = 0; i < columnWidths.size(); i++) {
writeSheetHolder.getSheet().setColumnWidth(i, columnWidths.get(i));
}
}
LOGGER.info("普通策略设置setColumnWidth结束~");
}
}
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>