mirror of https://github.com/alibaba/easyexcel
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
130 lines
4.2 KiB
130 lines
4.2 KiB
package com.alibaba.excel.write; |
|
|
|
import java.util.List; |
|
|
|
import org.apache.poi.ss.util.CellRangeAddress; |
|
|
|
import com.alibaba.excel.context.WriteContext; |
|
import com.alibaba.excel.context.WriteContextImpl; |
|
import com.alibaba.excel.enums.WriteTypeEnum; |
|
import com.alibaba.excel.exception.ExcelGenerateException; |
|
import com.alibaba.excel.util.FileUtils; |
|
import com.alibaba.excel.write.executor.ExcelWriteAddExecutor; |
|
import com.alibaba.excel.write.executor.ExcelWriteFillExecutor; |
|
import com.alibaba.excel.write.metadata.WriteSheet; |
|
import com.alibaba.excel.write.metadata.WriteTable; |
|
import com.alibaba.excel.write.metadata.WriteWorkbook; |
|
import com.alibaba.excel.write.metadata.fill.FillConfig; |
|
|
|
/** |
|
* @author jipengfei |
|
*/ |
|
public class ExcelBuilderImpl implements ExcelBuilder { |
|
|
|
private WriteContext context; |
|
private ExcelWriteFillExecutor excelWriteFillExecutor; |
|
private ExcelWriteAddExecutor excelWriteAddExecutor; |
|
|
|
static { |
|
// Create temporary cache directory at initialization time to avoid POI concurrent write bugs |
|
FileUtils.createPoiFilesDirectory(); |
|
} |
|
|
|
public ExcelBuilderImpl(WriteWorkbook writeWorkbook) { |
|
try { |
|
context = new WriteContextImpl(writeWorkbook); |
|
} catch (RuntimeException e) { |
|
finishOnException(); |
|
throw e; |
|
} catch (Throwable e) { |
|
finishOnException(); |
|
throw new ExcelGenerateException(e); |
|
} |
|
} |
|
|
|
@Override |
|
public void addContent(List data, WriteSheet writeSheet) { |
|
addContent(data, writeSheet, null); |
|
} |
|
|
|
@Override |
|
public void addContent(List data, WriteSheet writeSheet, WriteTable writeTable) { |
|
try { |
|
context.currentSheet(writeSheet, WriteTypeEnum.ADD); |
|
context.currentTable(writeTable); |
|
if (excelWriteAddExecutor == null) { |
|
excelWriteAddExecutor = new ExcelWriteAddExecutor(context); |
|
} |
|
excelWriteAddExecutor.add(data); |
|
} catch (RuntimeException e) { |
|
finishOnException(); |
|
throw e; |
|
} catch (Throwable e) { |
|
finishOnException(); |
|
throw new ExcelGenerateException(e); |
|
} |
|
} |
|
|
|
@Override |
|
public void fill(Object data, FillConfig fillConfig, WriteSheet writeSheet) { |
|
try { |
|
if (data == null) { |
|
return; |
|
} |
|
if (context.writeWorkbookHolder().getTempTemplateInputStream() == null) { |
|
throw new ExcelGenerateException("Calling the 'fill' method must use a template."); |
|
} |
|
context.currentSheet(writeSheet, WriteTypeEnum.FILL); |
|
if (excelWriteFillExecutor == null) { |
|
excelWriteFillExecutor = new ExcelWriteFillExecutor(context); |
|
} |
|
excelWriteFillExecutor.fill(data, fillConfig); |
|
} catch (RuntimeException e) { |
|
finishOnException(); |
|
throw e; |
|
} catch (Throwable e) { |
|
finishOnException(); |
|
throw new ExcelGenerateException(e); |
|
} |
|
} |
|
|
|
private void finishOnException() { |
|
finish(true); |
|
} |
|
|
|
@Override |
|
public void finish(boolean onException) { |
|
if (context != null) { |
|
context.finish(onException); |
|
} |
|
} |
|
|
|
@Override |
|
public void addContent(List data, WriteSheet writeSheet, WriteTable writeTable, String password) { |
|
try { |
|
context.currentSheet(writeSheet, WriteTypeEnum.ADD); |
|
context.currentTable(writeTable); |
|
if (excelWriteAddExecutor == null) { |
|
excelWriteAddExecutor = new ExcelWriteAddExecutor(context); |
|
} |
|
excelWriteAddExecutor.add(data); |
|
} catch (RuntimeException e) { |
|
finishOnException(); |
|
throw e; |
|
} catch (Throwable e) { |
|
finishOnException(); |
|
throw new ExcelGenerateException(e); |
|
} |
|
} |
|
|
|
@Override |
|
public void merge(int firstRow, int lastRow, int firstCol, int lastCol) { |
|
CellRangeAddress cra = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol); |
|
context.writeSheetHolder().getSheet().addMergedRegion(cra); |
|
} |
|
|
|
@Override |
|
public WriteContext writeContext() { |
|
return context; |
|
} |
|
}
|
|
|