package frame.file.office.excel; import java.io.File; 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"; } File templateFile = new File(Util.joinPath(Configer.path_template, template)); if (!templateFile.exists()) { progressor.appendMesage("can not find template: " + templateFile.getName()); 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 + Util.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(); } }