`
- 浏览:
19405 次
- 性别:
- 来自:
上海
-
@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中,否则无法编译下面的示例程序
为了方便开发者将程序中的数据快速导出到Excel文件,自定义Excel导出工具类是常见的做法。本篇文章将深入探讨如何利用Java的Apache POI库创建一个能够处理`List<Object>`数据的Excel工具类。 Apache POI是一个流行...
在Java编程中,导入和导出Excel数据是常见的需求,特别是在数据分析、报表生成或数据交换等场景。本示例将探讨如何使用Java处理Excel文件,主要依赖于Apache POI库和JExcelAPI库。这两个库提供了对Microsoft Excel...
使用HSSFWorkbook 进行excel的导入导出,很简单的一个,主要看Test.java这个就可以了,里面有个excel我做实验的,其中实验的逻辑可以忽略,只看导入导出就是了,注意:导出的时候要设置编码的哈,如果要设置style的...
在标题和描述中提到的"poi包(用于导入导出数据)",主要焦点在于其对Excel文件的强大支持,特别是在数据的导入和导出方面。这个库允许开发者在Java应用程序中创建、读取和修改Excel文件,极大地提升了办公自动化和...
本笔记将介绍如何使用POI来导入和导出Excel文件。 首先,我们需要将`poi-3.1-FINAL.jar`库添加到项目的类路径中,这样才能使用POI提供的API。导入这个库后,我们就可以开始编写处理Excel文件的代码了。 在示例代码...
- 当准备好将Excel表格导入到Moodle时,请使用“CSV (MS-DOS)”选项导出文件(图2)。如果你使用的是Excel 2007或更高版本,点击“Office按钮”,然后选择“另存为”下的“其他格式”选项(图3)。 **图2:保存为...
### Excel 文件导出与编辑——基于 Apache POI 的实现 #### 概述 Apache POI 是一个用于读取和写入 Microsoft Office 格式文件的开源库,它为 Java 应用程序提供了一种无需依赖 Microsoft Office 即可操作 Excel ...
首先,你需要导入相应的POI库,如 poi-3.10-FINAL-20140208.jar、poi-ooxml-schemas-3.10-FINAL-20140208.jar 等,这些库提供了处理Excel文件所需的类和方法。其中,poi-ooxml-schemas-3.10-FINAL-20140208.jar 包含...
Java中excel表数据的批量导入方法 Java中excel表数据的批量导入方法是指使用Java语言将大量的excel表数据批量导入到数据库或其他存储系统中。这种方法可以提高数据处理效率,减少人工操作的工作量和错误率。 在...
Android将数据写入Excel格式导出U盘并发送邮件 本文主要介绍了Android将数据写入Excel格式导出U盘并发送邮件的实现方法。通过本文,读者可以学习到Android如何将数据写入Excel格式并导出到U盘中,同时也可以学习到...
综上所述,这个资源包提供了一个完整的解决方案,让开发者能够利用Apache POI 3.2-FINAL版本在MySQL数据库和Excel之间进行数据的导入导出操作,特别适合于需要在Web应用(如JSP)中处理Excel数据的场景。通过提供的...
Java实现导出Excel文件和XML文件 Java实现导出Excel文件和XML文件是Java语言中的一种常见需求,本文将详细介绍如何使用Java实现导出Excel文件和XML文件的功能。 一、功能简述 点击“导出”按钮,弹出文件选择...
大家好,我是陈亮,JAVA将数据按指定格式导出为EXCEL和从EXCEL读相关的内容视频教程 1,把poi-2.5.1-final-20040804.jar复制到jdk的classpath下,我这里用的插件是POI 我已打好在包中。。 <br>我这里JDK装到...
"Final-ReadExcel(读取excel文件并写到文档)"项目就是这样一个解决方案,它允许用户读取Excel文件,并将内容导出到文档中。这里我们将深入探讨这个过程涉及的关键知识点。 首先,我们需要了解如何使用编程语言与...
Java 导出数据库中 Excel 表格数据的方法 Java 导出数据库中 Excel 表格数据的方法是指使用 Java 语言将数据库中的数据导出到 Excel 表格中的过程。这种方法具有重要的参考价值,对于感兴趣的小伙伴们可以作为参考...
public final class ExcelUtils { private static LogUtils log = LogUtils.getLogger(ExcelUtils.class); } ``` 定义了一个名为`ExcelUtils`的工具类,其中包含了一个日志对象,用于记录异常或重要的操作信息...
Spring Boot 框架在实际开发中经常需要读取 Excel 文件,以便于数据导入、导出或报表生成等操作。为了实现 Spring Boot 读取 Excel 操作,需要使用 Apache POI 库,该库提供了对 Excel 文件的读写操作。 依赖配置 ...
提供的`poi-3.0.2-FINAL-20080204.jar`文件包含了这个版本的库,可以直接导入到Java项目中使用。不过需要注意,由于版本较旧,可能不支持一些新特性,对于现代的Excel处理,建议使用更新的Apache POI版本。
Apache POI 是一个开源项目,专门用于处理微软的Office文档格式,如Excel、Word和PowerPoint。...通过熟练掌握POI,你可以轻松地在Java应用程序中处理Excel文件,实现导入导出、格式设定、公式计算等多种功能。