`
- 浏览:
18949 次
- 性别:
- 来自:
上海
-
@Before({Tx.class})
public void addCustoms() {
List<UploadFile> customExcel=getFiles();
if (customExcel == null || customExcel.size()==0) {
setAttr("title", "不能导入!");
setAttr("message", "请选择一个要导入的excel文件!");
render(consts.templateErr);
return;
}
UploadFile flie=customExcel.get(0);
String filename=flie.getFileName();
int index=filename.lastIndexOf(".");
if(!".xls".equals(filename.substring(index))){
setAttr("title", "不能导入!");
setAttr("message", "请选择execl类型文件!");
render(consts.templateErr);
return;
}
Long size = flie.getFile().length();//拿到上传文件的长度
if (size > 1024 * 1024 * 5) {
setAttr("title", "不能导入!");
setAttr("message", "请选择小于5M的文件!");
render(consts.templateErr);
return;
} else {
try {
String result = this.customByExcel(flie.getFile());
String[] results = result.split(":");//返回哪行哪列格式有误
if("5000Y1".equals(result)){
setAttr("title", "不能导入!");
setAttr("message", "请下载新模板!");
render(consts.templateErr);
return;
}
if (results.length == 1) {//导入文件操作提示
setAttr("title","添加成功");
setAttr("message", "共添加"+results[0]+"条记录!");
setAttr("goName", "常旅客列表");
setAttr("goUrl", "trip/customs");
render(consts.templateSuccess);
} else {
setAttr("title", "报错!");
setAttr("message", "第" + results[0] + "位常旅客,"+results[1]);
render(consts.templateErr);
}
} catch (Exception e) {
System.out.println(e);
setAttr("title","添加错误");
setAttr("message", "对不起,添加错误!");
render(consts.templateErr);
}
}
}
@Before({Tx.class})
public String customByExcel(File customExcel) {
Member _member = getSessionAttr(consts.tmcSessionKey);
Workbook wb = null;
List<FrequenFlyer> customs=new ArrayList<FrequenFlyer>();
int rowNum = 0;//总行数
String sgin="succeed";//表示导入表格当中的每一行都符合模板要求
String errorRow="",errorCol="",result="文件没有内容!";//标记错误数据在第几行 和那个字段 最终返回结果
try {
wb=Workbook.getWorkbook(customExcel);
} catch (Exception e) {
System.out.println(e);
setAttr("title", "提交报错!");
setAttr("message", "初始化Workbook报错!");
render(consts.templateErr);
}
if(wb!=null){
Sheet[] sheet=wb.getSheets();
if(sheet != null && sheet.length > 0){
rowNum = sheet[0].getRows()-1;//拿到总行数
Cell[] cells2 = sheet[0].getRow(1);
//查看必填列 列名字是否和模板一致
if(!cells2[0].getContents().contains("姓名") ||
!cells2[1].getContents().contains("部门")
){
return "5000Y1";//模板格式不正确
}
List<Department> departs=Department.dao.find("select * from T_DEPARTMENT where com_id=? and state=0 ", _member.getNumber("comid"));
Map<String, String> departsMap=new HashMap<String, String>();
for (Department department : departs) {
departsMap.put(department.getNumber("id").toString(), department.getStr("dname"));
}
for(int i=2;i<rowNum+1;i++){
Cell[] cells = sheet[0].getRow(i);//拿到第一个表空间的第i列的数据
if(cells!=null && cells.length>0){
FrequenFlyer custom=new FrequenFlyer()
.set("id", "T_FREQUENTFLYER_ID.nextval")
.set("passname", cells[0].getContents().replace(" ", ""))//姓名
.set("departmentid", cells[1].getContents().replace(" ", ""))//部门
.set("cardtype", cells[2].getContents().replace(" ", ""))//证件类型
.set("cardnumber", cells[3].getContents().replace(" ", ""))//证件号码
customs.add(custom);
}else{
errorCol=colIsNotEmpty(cells);
errorRow=(i-1)+"";
sgin="failure";
break;
}
}
}
if(sgin.equals("succeed")){//如果模板正确并且数据格式也符合要求就添加本次导入的数据
for(FrequenFlyer c:customs){
c.save();
}
result=customs.size()+"";//返回成功添加条数
}else {
result=errorRow+":"+errorCol;//返回错误行和列信息
}
}
}
return result;
}
//验证必填字段是否都符合要求,如果不符合要求则返回字段名称
public String colIsNotEmpty(Cell[] cells){
if(StringUtils.isEmpty(cells[0].getContents().replace(" ", ""))){
return "姓名,数据格式有问题,检查是否存在空格!";
}
if(StringUtils.isEmpty(cells[1].getContents().replace(" ", ""))){
return "部门,数据格式有问题,检查是否存在空格!";
}
return "pass";
}
/**
*
* @Description 下载常旅客导入模板
* 使用场景:常旅客EXECL导入
* @author luoq
*
* @throws
*/
public void execl(){
try {
String sCurrPath = System.getProperty("java.io.tmpdir") + "\\xlsx"+ (new java.util.Date().getTime())+".xls";
DownloadExecl.createExcel(sCurrPath);
File xls=new File(sCurrPath);
renderFile(xls);
} catch (Exception e) {
System.out.println(e);
e.printStackTrace();
renderText("导出数据报错!");
}
}
public class DownloadExecl {
public static void createExcel(String sCurrPath){
try {
//** **********创建工作簿************ *//*
WritableWorkbook workbook = Workbook.createWorkbook(new File(sCurrPath));
//** **********创建工作表************ *//*
WritableSheet sheet = workbook.createSheet("常旅客导入模板", 0);
//** **********设置页眉、页脚***************** *//*
sheet.setHeader("页眉", "", "第 &P 页,共 &N 页"); // 设置页眉
sheet.setFooter("", "", "&D &T"); // 设置页脚
//** ****注:以上这些&P、&D等参数可以从EXCEL的宏录制取得******* *//*
//** *********设置列宽**************** *//*
sheet.setColumnView(0, 20); //姓名
sheet.setColumnView(1, 15);//部门
sheet.setColumnView(2, 25);//证件类型
//** ************设置单元格字体************** *//*
WritableFont NormalFont = new WritableFont(WritableFont.ARIAL, 10);
WritableFont BoldFont12 = new WritableFont(WritableFont.ARIAL, 12,WritableFont.BOLD);//加粗12号字体
WritableFont BoldFont20 = new WritableFont(WritableFont.ARIAL, 20,WritableFont.BOLD);////加粗18号字体
//** ************以下设置几种格式的单元格************ *//*
//用于台头
WritableCellFormat wcf_heading = new WritableCellFormat(BoldFont20);
wcf_heading.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_heading.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_heading.setAlignment(Alignment.CENTRE); // 水平对齐
wcf_heading.setWrap(false); // 是否换行
// 用于标题
WritableCellFormat wcf_title = new WritableCellFormat(BoldFont12);
wcf_title.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_title.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_title.setAlignment(Alignment.CENTRE); // 水平对齐
wcf_title.setWrap(false); // 是否换行
// 用于正文
WritableCellFormat wcf_text = new WritableCellFormat(NormalFont);
wcf_text.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_text.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_text.setAlignment(Alignment.CENTRE); // 水平对齐
wcf_text.setWrap(true); // 是否换行
// 用于跨行
WritableCellFormat wcf_merge = new WritableCellFormat(NormalFont);
wcf_merge.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_merge.setVerticalAlignment(VerticalAlignment.TOP); // 垂直对齐
wcf_merge.setAlignment(Alignment.LEFT);
wcf_merge.setWrap(true); // 是否换行
// 用于正文
NumberFormat nf = new jxl.write.NumberFormat("0.00"); //设定带小数点数字格式
WritableCellFormat wcfN = new jxl.write.WritableCellFormat(NormalFont,nf);//设定带小数数字单元格格式
wcfN.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcfN.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcfN.setAlignment(Alignment.CENTRE); // 水平对齐
wcf_merge.setWrap(false); // 是否换行
//** ************单元格格式设置完成****************** *//*
//** ***************以下是标题************************** *//*
sheet.setRowView(0, 800); // 设置行高
sheet.setRowView(1, 500); // 设置行高
sheet.addCell(new Label(0, 0, "常旅客导入模板", wcf_heading));
sheet.mergeCells(0,0,6,0);//合并第一行的第1列到第一行15列
sheet.addCell(new Label(0, 1, "姓名(必填)", wcf_title));
sheet.addCell(new Label(1, 1, "部门(必填)", wcf_title));
sheet.addCell(new Label(2, 1, "证件类型(必填)",
//** ***************以下是内容************************** *//*
WritableFont wcf_font=(WritableFont) wcf_text.getFont();
WritableCellFormat wcf_numberfomart = new WritableCellFormat(wcf_font,NumberFormats.TEXT);//设置数字格式类型按照文本格式输出
wcf_numberfomart.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
wcf_numberfomart.setVerticalAlignment(VerticalAlignment.CENTRE); // 垂直对齐
wcf_numberfomart.setAlignment(Alignment.LEFT); // 水平对齐
wcf_numberfomart.setWrap(true); // 是否换行
sheet.addCell(new Label(0, 2,"张三", wcf_text));//姓名
sheet.addCell(new Label(1, 2,"1", wcf_text));//部门
sheet.addCell(new Label(2, 2,"1", wcf_text));//证件类型
//--------------------------
sheet.addCell(new Label(0, 3,"李四", wcf_text));//姓名
sheet.addCell(new Label(1, 3,"1", wcf_text));//部门
sheet.addCell(new Label(2, 3,"2", wcf_text));//证件类型
/** **********以上所写的内容都是写在缓存中的,下一句将缓存的内容写到文件中******** */
workbook.write();
/** *********关闭文件************* */
workbook.close();
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
请到网站...我们主要用到poi-2.5.1-final-20040804.jar这个库文件。请把poi-2.5.1-final-20040804.jar这个文件的路径添加到系统环境变量classpath中,否则无法编译下面的示例程序
使用HSSFWorkbook 进行excel的导入导出,很简单的一个,主要看Test.java这个就可以了,里面有个excel我做实验的,其中实验的逻辑可以忽略,只看导入导出就是了,注意:导出的时候要设置编码的哈,如果要设置style的...
用Java导出页面内容为excel表格的jar包,包含使用方法
根据excel模板动态导出数据库数据 package text; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import javax.servlet....
VBA实现EXCEL计划导入OUTLOOK日历FINAL
import Excel导出要使用的包poi-3.2-FINAL-20081019.jar
大家好,我是陈亮,JAVA将数据按指定格式导出为EXCEL和从EXCEL读相关的内容视频教程 1,把poi-2.5.1-final-20040804.jar复制到jdk的classpath下,我这里用的插件是POI 我已打好在包中。。 <br>我这里JDK装到...
java导出excel方式,含POI3.10jar包,都可以正常应用到项目中。
<groupId>org.apache.poi <artifactId>poi-ooxml <version>3.10-FINAL 利用3.10-FINAL版本的poi,导出逻辑主要在FileDownloadUtils的createExcelFile方法
jeecms3.1.1.final源程序直接导入myeclipse版本 首相安装安装版本的,之后便可以吧该版本直接导入myeclipse使用,进行二次开发
本jar包为最新的netty-all-4.1.29c.jar 可导入直接用 Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。 Netty 是一个广泛使用的 Java 网络编程框架...
剪辑软件Final-Cut-Pro的快捷键
Microsoft® Excel® 2010 delivers rich, new and enhanced features to the world’s most popular productivity suite. Excel 2010 makes it possible to analyze, manage, and share information in more ways ...
http://blog.csdn.net/zou_hailin226/article/details/48713613 不知道用的可以看我博客,里面有写到怎么用,
Edius工程导出为苹果Final Cut Pro所用到的工具
将数据按指定格式导出为EXCEL和从EXCEL读相关的内容视频教程,包含实现所需要的poi-2.5.1-final-20040804.jar插件和java代码……
System.out.println("开始导出Excel文件: "+System.currentTimeMillis()); XlsExport e = new XlsExport(); // header e.createRow(0); for (ExportFiled filed : ExportFiled.values()) { e.setCell...
poi-3.10-FINAL-20140208.jar,jxls-core-1.0.5.jar,poi-ooxml-3.10-FINAL-20140208.jar,commons-digester-2.1.jar,commons-jexl-2.1.1.jar 博文地址:http://blog.csdn.net/richerg85/article/details/42459471
hibernate-distribution-3.6.0.Final手册
很好的文档,讲叙如何用POI导入导出EXCEL等文件