@@ -0,0 +1,36 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<classpath> | |||||
<classpathentry kind="src" output="target/classes" path="src/main/java"> | |||||
<attributes> | |||||
<attribute name="optional" value="true"/> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> | |||||
<attributes> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry kind="src" output="target/test-classes" path="src/test/java"> | |||||
<attributes> | |||||
<attribute name="optional" value="true"/> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> | |||||
<attributes> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"> | |||||
<attributes> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> | |||||
<attributes> | |||||
<attribute name="maven.pomderived" value="true"/> | |||||
</attributes> | |||||
</classpathentry> | |||||
<classpathentry kind="output" path="target/classes"/> | |||||
</classpath> |
@@ -0,0 +1,23 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<projectDescription> | |||||
<name>easypoi-annotation</name> | |||||
<comment></comment> | |||||
<projects> | |||||
</projects> | |||||
<buildSpec> | |||||
<buildCommand> | |||||
<name>org.eclipse.jdt.core.javabuilder</name> | |||||
<arguments> | |||||
</arguments> | |||||
</buildCommand> | |||||
<buildCommand> | |||||
<name>org.eclipse.m2e.core.maven2Builder</name> | |||||
<arguments> | |||||
</arguments> | |||||
</buildCommand> | |||||
</buildSpec> | |||||
<natures> | |||||
<nature>org.eclipse.jdt.core.javanature</nature> | |||||
<nature>org.eclipse.m2e.core.maven2Nature</nature> | |||||
</natures> | |||||
</projectDescription> |
@@ -0,0 +1,3 @@ | |||||
eclipse.preferences.version=1 | |||||
encoding//src/main/java=UTF-8 | |||||
encoding//src/test/java=UTF-8 |
@@ -0,0 +1,5 @@ | |||||
eclipse.preferences.version=1 | |||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 | |||||
org.eclipse.jdt.core.compiler.compliance=1.6 | |||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning | |||||
org.eclipse.jdt.core.compiler.source=1.6 |
@@ -0,0 +1,4 @@ | |||||
activeProfiles= | |||||
eclipse.preferences.version=1 | |||||
resolveWorkspaceProjects=true | |||||
version=1 |
@@ -0,0 +1,11 @@ | |||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |||||
<modelVersion>4.0.0</modelVersion> | |||||
<parent> | |||||
<groupId>org.jeecgframework</groupId> | |||||
<artifactId>easypoi</artifactId> | |||||
<version>2.0.8-SNAPSHOT</version> | |||||
</parent> | |||||
<artifactId>easypoi-annotation</artifactId> | |||||
<description>基础注解类,解耦合</description> | |||||
</project> |
@@ -47,5 +47,10 @@ | |||||
<groupId>org.slf4j</groupId> | <groupId>org.slf4j</groupId> | ||||
<artifactId>slf4j-api</artifactId> | <artifactId>slf4j-api</artifactId> | ||||
</dependency> | </dependency> | ||||
<dependency> | |||||
<groupId>org.jeecgframework</groupId> | |||||
<artifactId>easypoi-annotation</artifactId> | |||||
</dependency> | |||||
</dependencies> | </dependencies> | ||||
</project> | </project> |
@@ -4,15 +4,16 @@ import java.util.Collection; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | import java.util.Map; | ||||
import javax.servlet.ServletOutputStream; | |||||
import javax.servlet.http.HttpServletRequest; | import javax.servlet.http.HttpServletRequest; | ||||
import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook; | import org.apache.poi.hssf.usermodel.HSSFWorkbook; | ||||
import org.apache.poi.ss.usermodel.Workbook; | |||||
import org.jeecgframework.poi.excel.ExcelExportUtil; | |||||
import org.jeecgframework.poi.excel.entity.ExportParams; | import org.jeecgframework.poi.excel.entity.ExportParams; | ||||
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | ||||
import org.jeecgframework.poi.excel.entity.vo.MapExcelConstants; | import org.jeecgframework.poi.excel.entity.vo.MapExcelConstants; | ||||
import org.jeecgframework.poi.excel.export.ExcelExportServer; | |||||
import org.springframework.web.servlet.view.document.AbstractExcelView; | |||||
/** | /** | ||||
* Map 对象接口 | * Map 对象接口 | ||||
@@ -21,31 +22,37 @@ import org.springframework.web.servlet.view.document.AbstractExcelView; | |||||
* @date 2014年11月25日 下午3:26:32 | * @date 2014年11月25日 下午3:26:32 | ||||
*/ | */ | ||||
@SuppressWarnings("unchecked") | @SuppressWarnings("unchecked") | ||||
public class JeecgMapExcelView extends AbstractExcelView { | |||||
public class JeecgMapExcelView extends MiniAbstractExcelView { | |||||
public JeecgMapExcelView() { | |||||
super(); | |||||
} | |||||
@Override | @Override | ||||
protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook hssfWorkbook, | |||||
HttpServletRequest httpServletRequest, | |||||
HttpServletResponse httpServletResponse) throws Exception { | |||||
String codedFileName = "临时文件.xls"; | |||||
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, | |||||
HttpServletResponse response) throws Exception { | |||||
String codedFileName = "临时文件"; | |||||
Workbook workbook = ExcelExportUtil.exportExcel( | |||||
(ExportParams) model.get(MapExcelConstants.PARAMS), | |||||
(List<ExcelExportEntity>) model.get(MapExcelConstants.ENTITY_LIST), | |||||
(Collection<? extends Map<?, ?>>) model.get(MapExcelConstants.MAP_LIST)); | |||||
if (model.containsKey(MapExcelConstants.FILE_NAME)) { | if (model.containsKey(MapExcelConstants.FILE_NAME)) { | ||||
codedFileName = (String) model.get(MapExcelConstants.FILE_NAME) + ".xls"; | |||||
codedFileName = (String) model.get(MapExcelConstants.FILE_NAME); | |||||
} | } | ||||
if (isIE(httpServletRequest)) { | |||||
if (workbook instanceof HSSFWorkbook) { | |||||
codedFileName += HSSF; | |||||
} else { | |||||
codedFileName += XSSF; | |||||
} | |||||
if (isIE(request)) { | |||||
codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); | codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); | ||||
} else { | } else { | ||||
codedFileName = new String(codedFileName.getBytes("UTF-8"), "ISO-8859-1"); | codedFileName = new String(codedFileName.getBytes("UTF-8"), "ISO-8859-1"); | ||||
} | } | ||||
httpServletResponse | |||||
.setHeader("content-disposition", "attachment;filename=" + codedFileName); | |||||
new ExcelExportServer().createSheetForMap(hssfWorkbook, | |||||
(ExportParams) model.get(MapExcelConstants.PARAMS), | |||||
(List<ExcelExportEntity>) model.get(MapExcelConstants.ENTITY_LIST), | |||||
(Collection<? extends Map<?, ?>>) model.get(MapExcelConstants.MAP_LIST)); | |||||
response.setHeader("content-disposition", "attachment;filename=" + codedFileName); | |||||
ServletOutputStream out = response.getOutputStream(); | |||||
workbook.write(out); | |||||
out.flush(); | |||||
} | } | ||||
public boolean isIE(HttpServletRequest request) { | |||||
return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request | |||||
.getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true : false; | |||||
} | |||||
} | } |
@@ -4,55 +4,70 @@ import java.util.Collection; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | import java.util.Map; | ||||
import javax.servlet.ServletOutputStream; | |||||
import javax.servlet.http.HttpServletRequest; | import javax.servlet.http.HttpServletRequest; | ||||
import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook; | import org.apache.poi.hssf.usermodel.HSSFWorkbook; | ||||
import org.apache.poi.ss.usermodel.Workbook; | |||||
import org.jeecgframework.poi.excel.ExcelExportUtil; | |||||
import org.jeecgframework.poi.excel.entity.ExportParams; | import org.jeecgframework.poi.excel.entity.ExportParams; | ||||
import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; | import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; | ||||
import org.jeecgframework.poi.excel.export.ExcelExportServer; | import org.jeecgframework.poi.excel.export.ExcelExportServer; | ||||
import org.springframework.web.servlet.view.document.AbstractExcelView; | |||||
/** | /** | ||||
* @Author JueYue on 14-3-8. Excel 生成解析器,减少用户操作 | * @Author JueYue on 14-3-8. Excel 生成解析器,减少用户操作 | ||||
*/ | */ | ||||
@SuppressWarnings("unchecked") | @SuppressWarnings("unchecked") | ||||
public class JeecgSingleExcelView extends AbstractExcelView { | |||||
public class JeecgSingleExcelView extends MiniAbstractExcelView { | |||||
public JeecgSingleExcelView() { | |||||
super(); | |||||
} | |||||
@Override | @Override | ||||
protected void buildExcelDocument(Map<String, Object> model, HSSFWorkbook hssfWorkbook, | |||||
HttpServletRequest httpServletRequest, | |||||
HttpServletResponse httpServletResponse) throws Exception { | |||||
String codedFileName = "临时文件.xls"; | |||||
if (model.containsKey(NormalExcelConstants.FILE_NAME)) { | |||||
codedFileName = (String) model.get(NormalExcelConstants.FILE_NAME) + ".xls"; | |||||
} | |||||
if (isIE(httpServletRequest)) { | |||||
codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); | |||||
} else { | |||||
codedFileName = new String(codedFileName.getBytes("UTF-8"), "ISO-8859-1"); | |||||
} | |||||
httpServletResponse | |||||
.setHeader("content-disposition", "attachment;filename=" + codedFileName); | |||||
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, | |||||
HttpServletResponse response) throws Exception { | |||||
String codedFileName = "临时文件"; | |||||
Workbook workbook = null; | |||||
if (model.containsKey(NormalExcelConstants.MAP_LIST)) { | if (model.containsKey(NormalExcelConstants.MAP_LIST)) { | ||||
List<Map<String, Object>> list = (List<Map<String, Object>>) model | List<Map<String, Object>> list = (List<Map<String, Object>>) model | ||||
.get(NormalExcelConstants.MAP_LIST); | .get(NormalExcelConstants.MAP_LIST); | ||||
for (Map<String, Object> map : list) { | |||||
new ExcelExportServer().createSheet(hssfWorkbook, | |||||
(ExportParams) map.get(NormalExcelConstants.PARAMS), | |||||
(Class<?>) map.get(NormalExcelConstants.CLASS), | |||||
(Collection<?>) map.get(NormalExcelConstants.DATA_LIST)); | |||||
if (list.size() == 0) { | |||||
throw new RuntimeException("MAP_LIST IS NULL"); | |||||
} | |||||
workbook = ExcelExportUtil.exportExcel( | |||||
(ExportParams) list.get(0).get(NormalExcelConstants.PARAMS), (Class<?>) list.get(0) | |||||
.get(NormalExcelConstants.CLASS), | |||||
(Collection<?>) list.get(0).get(NormalExcelConstants.DATA_LIST)); | |||||
for (int i = 1; i < list.size(); i++) { | |||||
new ExcelExportServer().createSheet(workbook, | |||||
(ExportParams) list.get(i).get(NormalExcelConstants.PARAMS), (Class<?>) list | |||||
.get(i).get(NormalExcelConstants.CLASS), | |||||
(Collection<?>) list.get(i).get(NormalExcelConstants.DATA_LIST)); | |||||
} | } | ||||
} else { | } else { | ||||
new ExcelExportServer().createSheet(hssfWorkbook, | |||||
workbook = ExcelExportUtil.exportExcel( | |||||
(ExportParams) model.get(NormalExcelConstants.PARAMS), | (ExportParams) model.get(NormalExcelConstants.PARAMS), | ||||
(Class<?>) model.get(NormalExcelConstants.CLASS), | (Class<?>) model.get(NormalExcelConstants.CLASS), | ||||
(Collection<?>) model.get(NormalExcelConstants.DATA_LIST)); | (Collection<?>) model.get(NormalExcelConstants.DATA_LIST)); | ||||
} | } | ||||
} | |||||
public boolean isIE(HttpServletRequest request) { | |||||
return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request | |||||
.getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true : false; | |||||
if (model.containsKey(NormalExcelConstants.FILE_NAME)) { | |||||
codedFileName = (String) model.get(NormalExcelConstants.FILE_NAME); | |||||
} | |||||
if (workbook instanceof HSSFWorkbook) { | |||||
codedFileName += HSSF; | |||||
} else { | |||||
codedFileName += XSSF; | |||||
} | |||||
if (isIE(request)) { | |||||
codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8"); | |||||
} else { | |||||
codedFileName = new String(codedFileName.getBytes("UTF-8"), "ISO-8859-1"); | |||||
} | |||||
response.setHeader("content-disposition", "attachment;filename=" + codedFileName); | |||||
ServletOutputStream out = response.getOutputStream(); | |||||
workbook.write(out); | |||||
out.flush(); | |||||
} | } | ||||
} | } |
@@ -13,7 +13,6 @@ import org.jeecgframework.poi.excel.ExcelExportUtil; | |||||
import org.jeecgframework.poi.excel.entity.TemplateExportParams; | import org.jeecgframework.poi.excel.entity.TemplateExportParams; | ||||
import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; | import org.jeecgframework.poi.excel.entity.vo.NormalExcelConstants; | ||||
import org.jeecgframework.poi.excel.entity.vo.TemplateExcelConstants; | import org.jeecgframework.poi.excel.entity.vo.TemplateExcelConstants; | ||||
import org.springframework.web.servlet.view.AbstractView; | |||||
/** | /** | ||||
* Excel模板视图 | * Excel模板视图 | ||||
@@ -22,20 +21,10 @@ import org.springframework.web.servlet.view.AbstractView; | |||||
* @date 2014年6月30日 下午9:15:49 | * @date 2014年6月30日 下午9:15:49 | ||||
*/ | */ | ||||
@SuppressWarnings("unchecked") | @SuppressWarnings("unchecked") | ||||
public class JeecgTemplateExcelView extends AbstractView { | |||||
private static final String CONTENT_TYPE = "application/vnd.ms-excel"; | |||||
private static final String HSSF = ".xls"; | |||||
private static final String XSSF = ".xlsx"; | |||||
public class JeecgTemplateExcelView extends MiniAbstractExcelView { | |||||
public JeecgTemplateExcelView() { | public JeecgTemplateExcelView() { | ||||
setContentType(CONTENT_TYPE); | |||||
} | |||||
public boolean isIE(HttpServletRequest request) { | |||||
return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request | |||||
.getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true : false; | |||||
super(); | |||||
} | } | ||||
@Override | @Override | ||||
@@ -0,0 +1,28 @@ | |||||
package org.jeecgframework.poi.excel.view; | |||||
import javax.servlet.http.HttpServletRequest; | |||||
import org.springframework.web.servlet.view.AbstractView; | |||||
/** | |||||
* 基础抽象Excel View | |||||
* @author JueYue | |||||
* @date 2015年2月28日 下午1:41:05 | |||||
*/ | |||||
public abstract class MiniAbstractExcelView extends AbstractView { | |||||
private static final String CONTENT_TYPE = "application/vnd.ms-excel"; | |||||
protected static final String HSSF = ".xls"; | |||||
protected static final String XSSF = ".xlsx"; | |||||
public MiniAbstractExcelView() { | |||||
setContentType(CONTENT_TYPE); | |||||
} | |||||
protected boolean isIE(HttpServletRequest request) { | |||||
return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request | |||||
.getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true : false; | |||||
} | |||||
} |
@@ -10,6 +10,7 @@ | |||||
<module>easypoi-base</module> | <module>easypoi-base</module> | ||||
<module>easypoi-web</module> | <module>easypoi-web</module> | ||||
<module>easypoi-test</module> | <module>easypoi-test</module> | ||||
<module>easypoi-annotation</module> | |||||
</modules> | </modules> | ||||
<url>www.jeecg.org</url> | <url>www.jeecg.org</url> | ||||
@@ -128,6 +129,11 @@ | |||||
<artifactId>easypoi-base</artifactId> | <artifactId>easypoi-base</artifactId> | ||||
<version>${sub.version}</version> | <version>${sub.version}</version> | ||||
</dependency> | </dependency> | ||||
<dependency> | |||||
<groupId>org.jeecgframework</groupId> | |||||
<artifactId>easypoi-annotation</artifactId> | |||||
<version>${sub.version}</version> | |||||
</dependency> | |||||
</dependencies> | </dependencies> | ||||
</dependencyManagement> | </dependencyManagement> | ||||
@@ -164,11 +170,11 @@ | |||||
<distributionManagement> | <distributionManagement> | ||||
<repository> | <repository> | ||||
<id>postaop-common-release</id> | <id>postaop-common-release</id> | ||||
<url>http://192.168.1.99:8081/nexus/content/repositories/postaop-common-release/</url> | |||||
<url>http://172.16.100.99:8081/nexus/content/repositories/postaop-common-release/</url> | |||||
</repository> | </repository> | ||||
<snapshotRepository> | <snapshotRepository> | ||||
<id>postaop-common-snapshot</id> | <id>postaop-common-snapshot</id> | ||||
<url>http://192.168.1.99:8081/nexus/content/repositories/postaop-common-snapshot/</url> | |||||
<url>http://172.16.100.99:8081/nexus/content/repositories/postaop-common-snapshot/</url> | |||||
</snapshotRepository> | </snapshotRepository> | ||||
</distributionManagement> | </distributionManagement> | ||||