package frame.file.office.excel;
|
|
import java.util.Map;
|
|
import org.apache.poi.sl.usermodel.Sheet;
|
|
import frame.data.DataContext;
|
import frame.data.EntitySet;
|
import frame.file.FileIO;
|
import frame.file.FileIOContainer;
|
import frame.file.FileIOItem;
|
import frame.file.processor.Processor;
|
import frame.persist.NamedSQL;
|
import frame.persist.SQLRunner;
|
import frame.util.Util;
|
|
public class ExcelWriter {
|
|
private Processor progressor;
|
private FileIOItem workingIoItem;
|
|
public ExcelWriter(Processor progressor) {
|
this.progressor = progressor;
|
}
|
public DownloadResult writeOneFile(String ioCode, DataContext dataContext) {
|
progressor.newTask("导出" + ioCode);
|
try {
|
// this.dataContext = dataContext;
|
|
//1. get file io
|
progressor.newPhase("getFileIO", "获取导出定义");
|
|
FileIO fileIO = FileIOContainer.get(ioCode);
|
if (fileIO == null) {
|
progressor.appendMesage("can not find fileIO: " + ioCode);
|
return null;
|
}
|
|
workingIoItem = fileIO.getItemList(FileIOItem.TypeCode_Output).get(0);
|
|
if (workingIoItem == null) {
|
progressor.appendMesage("can not find fileIO item: " + ioCode);
|
return null;
|
}
|
|
progressor.endPhase();
|
|
//2. get template file
|
progressor.newPhase("getTemplate", "获取导出模板");
|
|
String template = FileIOItem.extractFileName(workingIoItem.getToName());
|
|
if (Util.isEmptyStr(template) || "*".equals(template)) {
|
template = "standard.xlsx";
|
}
|
|
FileInfo templateFile = new FileInfo(Util.joinPath(Configer.path_template, template));
|
|
if (!templateFile.Exists) {
|
progressor.appendMesage("can not find template: " + templateFile.FullName);
|
return null;
|
}
|
|
progressor.endPhase();
|
|
//3. get temp file
|
progressor.newPhase("createTempFile", "生成临时文件");
|
|
String fileName = Path.GetFileNameWithoutExtension(template);
|
String ext = Path.GetExtension(template);
|
String tempFile = Util.joinPath(Configer.path_temp, fileName + Utils.newShortGUID() + ext);
|
|
File.Copy(templateFile.FullName, tempFile);
|
|
progressor.endPhase();
|
|
//4. do write one file
|
progressor.newPhase("exportData", "导出数据");
|
processFile(tempFile);
|
progressor.endPhase();
|
|
return new DownloadResult(tempFile, fileName + ext);
|
}
|
finally {
|
progressor.endTask();
|
}
|
}
|
|
protected void processSheets() {
|
//1. get sheet
|
progressor.newPhase("getSheet", "获取指定Sheet");
|
|
String sheetname = FileIOItem.extractSheetName(workingIoItem.getToName());
|
Sheet sheet = getSheetByName(sheetname);
|
|
if (sheet == null) {
|
progressor.appendMesage("can not find sheet: " + sheetname);
|
}
|
|
progressor.endPhase();
|
|
//2. get data
|
progressor.newPhase("GetData", "获取数据");
|
|
NamedSQL namedSQL = NamedSQL.getInstance("getList");
|
namedSQL.setParam("tablename", workingIoItem.getFromName()).setParameter("filter", dataContext.getFilter()).setParameter("orderby", dataContext.getOrderBy());
|
EntitySet entitySet = SQLRunner.getEntitySet(namedSQL);
|
|
progressor.endPhase();
|
|
//3. write data
|
progressor.newPhase("writeData", "向Sheet内写入数据");
|
writeOneSheet(sheet, entitySet);
|
progressor.endPhase();
|
}
|
}
|