Excel导入导出工具优化,支持多Sheet。
This commit is contained in:
@@ -25,14 +25,13 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Assert;
|
||||
|
||||
import com.jeesite.common.io.FileUtils;
|
||||
import com.jeesite.common.text.DiffMatchPatch.Diff;
|
||||
import com.jeesite.common.text.DiffMatchPatch.LinesToCharsResult;
|
||||
import com.jeesite.common.text.DiffMatchPatch.Patch;
|
||||
|
||||
import junit.framework.Assert;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
public class DiffMatchPatchTest {
|
||||
|
||||
private DiffMatchPatch dmp;
|
||||
|
||||
@@ -75,12 +75,13 @@ public class ExcelExport {
|
||||
/**
|
||||
* 注解列表(Object[]{ ExcelField, Field/Method })
|
||||
*/
|
||||
List<Object[]> annotationList = ListUtils.newArrayList();
|
||||
List<Object[]> annotationList;
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
* @param title 表格标题,传“空值”,表示无标题
|
||||
* @param cls 实体对象,通过annotation.ExportField获取标题
|
||||
* @param type 导出类型(1:导出数据)
|
||||
*/
|
||||
public ExcelExport(String title, Class<?> cls){
|
||||
this(title, cls, Type.EXPORT);
|
||||
@@ -94,7 +95,7 @@ public class ExcelExport {
|
||||
* @param groups 导入分组
|
||||
*/
|
||||
public ExcelExport(String title, Class<?> cls, Type type, String... groups){
|
||||
this(null, null, title, cls, type, groups);
|
||||
this(null, title, cls, type, groups);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -106,7 +107,57 @@ public class ExcelExport {
|
||||
* @param type 导出类型(1:导出数据;2:导出模板)
|
||||
* @param groups 导入分组
|
||||
*/
|
||||
public ExcelExport(Workbook wb, String sheetName, String title, Class<?> cls, Type type, String... groups){
|
||||
public ExcelExport(Workbook wb, String title, Class<?> cls, Type type, String... groups){
|
||||
if (wb != null){
|
||||
this.wb = wb;
|
||||
}else{
|
||||
this.wb = createWorkbook();
|
||||
}
|
||||
this.createSheet(null, title, cls, type, groups);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
* @param title 表格标题,传“空值”,表示无标题
|
||||
* @param headerList 表头数组
|
||||
*/
|
||||
public ExcelExport(String title, List<String> headerList) {
|
||||
this(null, null, title, headerList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
* @param wb 工作簿对象,支持多个Sheet,通过ExcelExport.createWorkbook()创建
|
||||
* @param sheetName,指定Sheet名称
|
||||
* @param title 表格标题,传“空值”,表示无标题
|
||||
* @param headerList 表头列表
|
||||
*/
|
||||
public ExcelExport(Workbook wb, String sheetName, String title, List<String> headerList) {
|
||||
if (wb != null){
|
||||
this.wb = wb;
|
||||
}else{
|
||||
this.wb = createWorkbook();
|
||||
}
|
||||
this.createSheet(sheetName, title, headerList, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建一个工作簿
|
||||
*/
|
||||
private Workbook createWorkbook(){
|
||||
return new SXSSFWorkbook(500);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建工作表
|
||||
* @param sheetName,指定Sheet名称
|
||||
* @param title 表格标题,传“空值”,表示无标题
|
||||
* @param cls 实体对象,通过annotation.ExportField获取标题
|
||||
* @param type 导出类型(1:导出数据;2:导出模板)
|
||||
* @param groups 导入分组
|
||||
*/
|
||||
public void createSheet(String sheetName, String title, Class<?> cls, Type type, String... groups){
|
||||
this.annotationList = ListUtils.newArrayList();
|
||||
// Get annotation field
|
||||
Field[] fs = cls.getDeclaredFields();
|
||||
for (Field f : fs){
|
||||
@@ -155,34 +206,8 @@ public class ExcelExport {
|
||||
headerList.add(headerTitle);
|
||||
headerWidthList.add(ef.width());
|
||||
}
|
||||
initialize(wb, sheetName, title, headerList, headerWidthList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
* @param title 表格标题,传“空值”,表示无标题
|
||||
* @param headers 表头数组
|
||||
*/
|
||||
public ExcelExport(String title, List<String> headerList) {
|
||||
this(null, null, title, headerList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造函数
|
||||
* @param wb 工作簿对象,支持多个Sheet,通过ExcelExport.createWorkbook()创建
|
||||
* @param sheetName,指定Sheet名称
|
||||
* @param title 表格标题,传“空值”,表示无标题
|
||||
* @param headerList 表头列表
|
||||
*/
|
||||
public ExcelExport(Workbook wb, String sheetName, String title, List<String> headerList) {
|
||||
initialize(wb, sheetName, title, headerList, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建一个工作簿
|
||||
*/
|
||||
public static Workbook createWorkbook(){
|
||||
return new SXSSFWorkbook(500);
|
||||
// 创建工作表
|
||||
this.createSheet(sheetName, title, headerList, headerWidthList);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -212,14 +237,14 @@ public class ExcelExport {
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化函数
|
||||
* 创建工作表
|
||||
* @param sheetName,指定Sheet名称
|
||||
* @param title 表格标题,传“空值”,表示无标题
|
||||
* @param headerList 表头列表
|
||||
* @param cls 实体对象,通过annotation.ExportField获取标题
|
||||
* @param type 导出类型(1:导出数据;2:导出模板)
|
||||
* @param groups 导入分组
|
||||
*/
|
||||
private void initialize(Workbook wb, String sheetName, String title, List<String> headerList, List<Integer> headerWidth) {
|
||||
if (wb == null){
|
||||
this.wb = createWorkbook();
|
||||
}
|
||||
public void createSheet(String sheetName, String title, List<String> headerList, List<Integer> headerWidthList) {
|
||||
this.sheet = wb.createSheet(StringUtils.defaultString(sheetName, "Export"));
|
||||
this.styles = createStyles(wb);
|
||||
// Create title
|
||||
@@ -253,11 +278,11 @@ public class ExcelExport {
|
||||
}
|
||||
// sheet.autoSizeColumn(i);
|
||||
}
|
||||
boolean isDefWidth = (headerWidth != null && headerWidth.size() == headerList.size());
|
||||
boolean isDefWidth = (headerWidthList != null && headerWidthList.size() == headerList.size());
|
||||
for (int i = 0; i < headerList.size(); i++) {
|
||||
int colWidth = -1;
|
||||
if (isDefWidth){
|
||||
colWidth = headerWidth.get(i);
|
||||
colWidth = headerWidthList.get(i);
|
||||
}
|
||||
if (colWidth == -1){
|
||||
colWidth = sheet.getColumnWidth(i)*2;
|
||||
@@ -269,9 +294,29 @@ public class ExcelExport {
|
||||
sheet.setColumnWidth(i, colWidth);
|
||||
}
|
||||
}
|
||||
log.debug("Initialize success.");
|
||||
log.debug("Create sheet {0} success.", sheetName);
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 构造函数
|
||||
// * @param title 表格标题,传“空值”,表示无标题
|
||||
// * @param headers 表头数组
|
||||
// */
|
||||
// public ExcelExport(String title, List<String> headerList) {
|
||||
// this(null, null, title, headerList);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 构造函数
|
||||
// * @param wb 工作簿对象,支持多个Sheet,通过ExcelExport.createWorkbook()创建
|
||||
// * @param sheetName,指定Sheet名称
|
||||
// * @param title 表格标题,传“空值”,表示无标题
|
||||
// * @param headerList 表头列表
|
||||
// */
|
||||
// public ExcelExport(Workbook wb, String sheetName, String title, List<String> headerList) {
|
||||
// initialize(wb, sheetName, title, headerList, null);
|
||||
// }
|
||||
|
||||
/**
|
||||
* 创建表格样式
|
||||
* @param wb 工作薄对象
|
||||
|
||||
@@ -131,15 +131,7 @@ public class ExcelImport {
|
||||
}else{
|
||||
throw new ExcelException("文档格式不正确!");
|
||||
}
|
||||
if (sheetIndexOrName instanceof Integer || sheetIndexOrName instanceof Long){
|
||||
this.sheet = this.wb.getSheetAt(ObjectUtils.toInteger(sheetIndexOrName));
|
||||
}else{
|
||||
this.sheet = this.wb.getSheet(ObjectUtils.toString(sheetIndexOrName));
|
||||
}
|
||||
if (this.sheet == null){
|
||||
throw new ExcelException("没有找到工作表!");
|
||||
}
|
||||
this.headerNum = headerNum;
|
||||
this.setSheet(sheetIndexOrName, headerNum);
|
||||
log.debug("Initialize success.");
|
||||
}
|
||||
|
||||
@@ -169,6 +161,30 @@ public class ExcelImport {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前工作薄
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public Workbook getWorkbook() {
|
||||
return wb;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置当前工作表和标题行数
|
||||
* @author ThinkGem
|
||||
*/
|
||||
public void setSheet(Object sheetIndexOrName, int headerNum) {
|
||||
if (sheetIndexOrName instanceof Integer || sheetIndexOrName instanceof Long){
|
||||
this.sheet = this.wb.getSheetAt(ObjectUtils.toInteger(sheetIndexOrName));
|
||||
}else{
|
||||
this.sheet = this.wb.getSheet(ObjectUtils.toString(sheetIndexOrName));
|
||||
}
|
||||
if (this.sheet == null){
|
||||
throw new ExcelException("没有找到‘"+sheetIndexOrName+"’工作表!");
|
||||
}
|
||||
this.headerNum = headerNum;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取行对象
|
||||
* @param rownum
|
||||
@@ -191,7 +207,7 @@ public class ExcelImport {
|
||||
* @return
|
||||
*/
|
||||
public int getLastDataRowNum(){
|
||||
//return this.sheet.getLastRowNum()+headerNum;
|
||||
//return this.sheet.getLastRowNum() + headerNum;
|
||||
return this.sheet.getLastRowNum() + 1;
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
@@ -12,7 +12,6 @@
|
||||
<ul class="nav navbar-nav">
|
||||
<% if(__info_type == '0'){ %>
|
||||
<li><a href="javascript:" data-href="http://jeesite.com" class="addTabPage"><i class="fa fa-diamond"></i> 官方网站</a></li>
|
||||
<li><a href="javascript:" data-href="http://blog.jeesite.com" class="addTabPage"><i class="fa fa-codepen"></i> 作者博客</a></li>
|
||||
<% } %>
|
||||
<li><a href="javascript:" id="fullScreen" title="全屏"><i class="fa fa-arrows-alt"></i></a></li>
|
||||
<li><a href="javascript:" id="switchSkin" title="切换主题" style="margin-top:-1px;"><i class="fa fa-dashboard"></i></a></li>
|
||||
|
||||
@@ -24,14 +24,14 @@ public class InitCoreData extends com.jeesite.modules.db.InitCoreData {
|
||||
initConfig();
|
||||
initModule();
|
||||
initDict();
|
||||
// initRole();
|
||||
// initMenu();
|
||||
// initUser();
|
||||
initRole();
|
||||
initMenu();
|
||||
initUser();
|
||||
// initArea();
|
||||
// initOffice();
|
||||
// initCompany();
|
||||
// initPost();
|
||||
// initEmpUser();
|
||||
initOffice();
|
||||
initCompany();
|
||||
initPost();
|
||||
initEmpUser();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user