- 浏览: 469069 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
fkbld:
楼主给个密码,谢谢了,baild_zr@126.com
ExtJs direct 推送 DEMO -
文思涌动:
你的方法太好用了,感激不尽。
MyEclipse 安装ADT -
zys08:
...
jquery uploadify -
攻城使:
我现在也在学习使用Uploadfiy,摸索中
jquery uploadify -
gksrxn:
liuyulovely 写道怎么解压还要密码,楼主解压的密码是 ...
ExtJs direct 推送 DEMO
1、点击批量导入,先做个弹出层 弹出层里面选择文件和返回信息 确定导入 返回信息,追加到div里面展示
$.getJSON(encodeURI('xxxAction!toImportExcel.action?filePat h='+filePath),function(result){ $.each(result.ERROR_LIST,function(key,value){ $("#message").append("<font color='red'>"+key+":"+value.errorInfor+"</font><br/>"); }); });
ACTION - service 主要调用组件类,封装了map集合,列出错误格式集合或正确导入集合
private JSONObject jsonObject = new JSONObject(); //get-set method JSONObject // 获取 excel path路径 String filePath = new String(ServletActionContext.getRequest().getParameter("filePath").getBytes("iso8859-1"),"utf-8"); // 获取 map 集合 Map<String,List<ExcelBean>> map = this.customerService.toImportExcel(filePath ); //遍历 map Iterator it = map.entrySet().iterator(); List<ExcelBean> errorList = null; List<ExcelBean> successList = null; while(it.hasNext()){ Map.Entry mapEntry = (Map.Entry)it.next(); if(mapEntry.getKey().equals("fail")){ errorList = (List<ExcelBean>)mapEntry.getValue(); }else if(mapEntry.getKey().equals("success")){ successList = (List<ExcelBean>)mapEntry.getValue(); } } // 返回错误集合 或 操作 批量插入 if(errorList.size() != 0){ System.out.println("有错误excel格式,不执行批量操作,返回错误列表"); ServletActionContext.getResponse().setCharacterEncoding("UTF-8"); JSONArray jsonArray = JSONArray.fromObject(errorList); jsonObject.put("ERROR_LIST", jsonArray); ServletActionContext.getResponse().getWriter().write(jsonObject.toSt ring()); System.out.println("json :" + jsonObject.toString()); return null; }else{ // 调用dao层执行批量插入操作 System.out.println("调用dao层执行批量插入操作"); // 封装解析成功的数据格式返回 // dosomething ... return null; }
xml配置
xml 配置层 <!-- cheng ren yin (structs-jquery-json) --> <result-types> <result-type name="json" class="com.opensymphony.webwork.dispatcher.json.JSONResult"></result-type> </result-types> <!-- cry --> <action name="toExportExcel" class="xxxAction" method="toExportExcel"></action> <action name="toImportExcel" class="xxxxAction" method="toImportExcel"> <result name="success" type="json"/> </action>
解析xml组件,把错误的放到 错误集合,正确的放到正确集合
/** * ClassName:ImportExcelUtil * Project: * Company: * * @author 程仁银 * @version * @since Ver 1.1 * @Date 2011 Apr 20, 2011 10:41:21 AM * @see */ public class ImportExcelUtil { private HSSFWorkbook book = null; private HSSFSheet sheet = null; private HSSFRow row = null;// 行对象 public Map<String,List<ExcelBean>> readTemplateFile(String path) { HSSFWorkbook work=null; Map<String,List<ExcelBean>> map = new HashMap<String, List<ExcelBean>>(); List<ExcelBean> listFail = new ArrayList<ExcelBean>(); List<ExcelBean> listSuccess = new ArrayList<ExcelBean>();; try { FileInputStream file = new FileInputStream(path); work=new HSSFWorkbook(file); HSSFSheet sheet=work.getSheetAt(0); HSSFRow row=null;//行对像; HSSFCell cell=null;//列对像; int rowNum ; rowNum=sheet.getLastRowNum();//得到总行数 System.out.println("总行数为"+rowNum); for(int i=1;i<=rowNum;i++) { ExcelBean errorBean = new ExcelBean(); ExcelBean successBean = new ExcelBean(); System.out.println("第 "+i+" 行"); row=sheet.getRow(i); //获取名称 cell=row.getCell((short)0); String name=this.chickCell(cell); System.out.println("名称 = "+ name); if(("".equals(name) || (null == name))){ errorBean.setErrorInfor("第 "+i+" 行 名称"+name+" 格式错误 !"); }else{ successBean.setName(name); } //获取客户名称 cell=row.getCell((short)1); String nameCn=this.chickCell(cell); System.out.println("客户名称 = "+ nameCn); if(("".equals(nameCn) || (null == nameCn))){ errorBean.setErrorInfor("第 "+i+" 行 客户名称"+nameCn+" 格式 错误!"); }else{ successBean.setNameCn(nameCn); } //获取邮箱 cell=row.getCell((short)2); String email=this.chickCell(cell); System.out.println("邮箱 = "+ email); String check = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+ )?\\.)+[a-zA-Z]{2,}$"; Pattern regex = Pattern.compile(check); Matcher matcher = regex.matcher(email); boolean isMatched = matcher.matches(); if(isMatched){ successBean.setEmail(email); }else{ errorBean.setErrorInfor("第 "+i+" 行 邮箱"+email+" 格式错误 !"); } //获取电话 cell=row.getCell((short)3); String tel=this.chickCell(cell); System.out.println("电话 = "+ tel); String checkTel = "^(13[4,5,6,7,8,9]|15[0,3,8,9,1,7]|188|187)\\d{8}$"; Pattern regexTel = Pattern.compile(checkTel); Matcher matcherTel = regexTel.matcher(tel); boolean isMatchedTel = matcherTel.matches(); if(isMatchedTel){ successBean.setTel(tel); }else{ errorBean.setErrorInfor("第 "+i+" 行 电话"+tel+" 格式错误 !"); } //客户主管 int responsible = 0 ; cell=row.getCell((short)4); String khzg=this.chickCell(cell); if(("".equals(khzg) || (null == khzg))){ errorBean.setErrorInfor("第 "+i+" 行 客户主管"+khzg+" 格式错 误!"); }else{ successBean.setFlag(khzg=="是"?"0":"1"); } System.out.println("客户主管 = "+ responsible); if(successBean.getEmail() != null && successBean.getFlag() != null && successBean.getName() != null && successBean.getNameCn() != null && successBean.getTel() != null){ listSuccess.add(successBean); }else if(successBean.getEmail() != null || successBean.getFlag() != null || successBean.getName() != null || successBean.getNameCn() != null || successBean.getTel() != null){ listFail.add(errorBean); } System.out.println("----------------------------------"); } } catch (Exception e) { e.printStackTrace(); } /*System.out.println("正确的 " + listSuccess.size()); for(ExcelBean eb:listFail){ System.out.println(eb.getEmail()+" "+ eb.getFlag() +" "+eb.getName() +" "+eb.getNameCn() +" "+eb.getTel() ); } System.out.println("错误的 " + listFail.size()); for(ExcelBean ebc:listSuccess){ System.out.println(ebc.getEmail()+" "+ ebc.getFlag() +" "+ebc.getName() +" "+ebc.getNameCn() +" "+ebc.getTel() ); }*/ map.put("success",listSuccess); map.put("fail",listFail); return map; } private String chickCell(HSSFCell cell) { // 判断是否为String型 String all=""; if(cell.getCellType()==cell.CELL_TYPE_STRING){ all=cell.getStringCellValue(); //all=all.replaceAll(",","").trim(); all.trim(); }else{ //判断是否为数值型 if(cell.getCellType()==cell.CELL_TYPE_NUMERIC){ //判断是否为日期型 if(HSSFDateUtil.isCellDateFormatted(cell)) { Date date=cell.getDateCellValue(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); all=formatter.format(date); }else{//一般数值型 double d=cell.getNumericCellValue(); all=Double.toString(d); } } } return all; } }
POJO
public class ExcelBean implements Serializable{ private String name ; private String nameCn ; private String email ; private String tel ; private String flag ; private String errorInfor ;
批量导出 代码 - 根据 sql 语句导出EXCEL
/** * ClassName:ExportExcelUtil * Project: * Company: xxxxxxxx 人才库 .... * * @author 程仁银 * @version * @since Ver 1.1 * @Date 2011 Apr 20, 2011 2:21:45 AM * @see */ public class ExportExcelUtil { private static String shtName = ""; private static String[] cNames = null; private static String[] cLabels = null; private static int rpp = 200; private static HSSFCellStyle style = null; /** * 通过给定的Sql导出Excel文件到Response输出流,需要指定Connection * * @param response * HttpServletResponse Response * @param conn * Connection 指定的数据库连接 * @param sqlStr * String 查询的Sql语句 * @param sheetName * String 导出的Excel Sheet名称 * @param columnNames * String[] 导出的 Excel 列名称 * @param rowPerPage * int 每一个Sheet页的行数 * @throws SQLException * 48. */ public static void export(Connection conn, String sqlStr, String sheetName, String columnNames[], int rowPerPage,HttpServletResponse response) throws SQLException { PreparedStatement ps = null; ResultSet rs = null; ps = conn.prepareStatement(sqlStr); rs = ps.executeQuery(); ResultSetMetaData rsmd = rs.getMetaData(); if (rowPerPage <= 10000 && rowPerPage >= 1) { rpp = rowPerPage; } if (!"".equals(sheetName) && null != sheetName) { shtName = sheetName; } else { shtName = rsmd.getTableName(0); } cNames = getColumnNames(rsmd); if (null != columnNames) { cLabels = columnNames; // compare( columnNames ) ; } else { cLabels = cNames; } HSSFWorkbook wb = new HSSFWorkbook(); style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); HSSFSheet sheet = createSheet(wb, 1); setSheetColumnTitle(sheet); int rowCnt = 0; int sheetNum = 2; while (rs.next()) { if (rowCnt == rpp) { sheet = createSheet(wb, sheetNum); setSheetColumnTitle(sheet); rowCnt = 0; sheetNum++; } HSSFRow row = sheet.createRow(rowCnt + 1); for (int i = 0; i < cNames.length; i++) { HSSFCell cell = row.createCell((short) i); // cell.setEncoding(HSSFCell.ENCODING_UTF_16); String val = rs.getString(cNames[i]); if (null == val) { val = ""; } cell.setCellValue(val.toUpperCase()); } rowCnt++; } try { OutputStream os = response.getOutputStream(); response.reset(); response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment; filename="+getFileName(shtName)); wb.write(os); // FileOutputStream fos = new FileOutputStream(new File("d:\\","saveName.xls")); // fos.close(); // wb.write(fos); if (conn != null) { conn.close(); } } catch (IOException ex) { MyLogger.logserverLogger.info("Export Excel file error ! " + ex.getMessage()); } } /** *设置Sheet页的列属性 * @param sht * HSSFSheet 124. */ private static void setSheetColumnTitle(HSSFSheet sht) { HSSFRow row = sht.createRow(0); for (int i = 0; i < cLabels.length; i++) { HSSFCell cell = row.createCell((short) (i)); // cell.setEncoding(HSSFCell.ENCODING_COMPRESSED_UNICODE); cell.setCellValue(cLabels[i]); cell.setCellStyle(style); } } /** * 获得源数据中的列名称 * @param rsmd * ResultSetMetaData * @return String[] 139. */ private static String[] getColumnNames(ResultSetMetaData rsmd) { try { StringBuffer result = new StringBuffer(""); for (int i = 1; i <= rsmd.getColumnCount(); i++) { result.append(rsmd.getColumnLabel(i)).append(","); } if (result.length() > 0) { return result.substring(0, result.length() - 1).toString().split(","); } } catch (Exception e) { return null; } return null; } /** *创建一个Sheet页并返回该对象 * @param wb * HSSFWorkbook * @param seq int * @return HSSFSheet */ private static HSSFSheet createSheet(HSSFWorkbook wb, int seq) { int sup = seq * rpp; int sub = (seq - 1) * rpp + 1; if (sub < 1) { sub = 1; } return wb.createSheet(shtName + "(" + sub + "-" + sup + ")"); } private static String getFileName(String tableName) { return tableName + new java.util.Date().getTime() + ".xls"; } }
========================dao @Override public void toExportExcel(HttpServletResponse response) { System.out.println("************ - ExportExcelUtil ...."); ExportExcelUtil eeu = new ExportExcelUtil(); String[] columnNames = {"名称","邮箱","电话 "}; String QUERY_EXP_SQL = " 自定义,要把这上面几个列查询出来 "; try { eeu.export(this.getSession().connection(), QUERY_EXP_SQL, "excelName_", columnNames,100000,response); } catch (SQLException e) { e.printStackTrace(); } }
//后期修改 $(function(){ $('#sub').click(function() { var filePath = $('#fileId').val(); var theform = $('#fileId').val(); if(theform==''){ alert('请选择excel文件!'); return false; } if(theform.match(/^(.*)(\.)(.{1,8})$/)[3] != 'xls') { alert('文件格式不对,请重新选择!'); return false; } // import excel $.getJSON(encodeURI('customToImportExcel!toImportExcel.action?filePath='+filePath),function(result){ $.each(result.ERROR_LIST,function(key,value){ if(value.state=='0'){ if(key==0){ //$("#success").append("<font color='red'>错误"+(value.totalRow-result.ERROR_LIST.length)+"行"+"</font><br/>"); for(var i=0;i<result.ERROR_LIST.length;i++){ var obj = {}; for(var j in result.ERROR_LIST[i]) { if(j == 'errorInfor') { obj.errorInfor = result.ERROR_LIST[i][j]; } } $("#success").append("<font color='red'>"+obj.errorInfor+"</font><br/>"); } } }else { if(key==0){ $("#success").append("<font color='red'>成功导入"+(value.totalRow-result.ERROR_LIST.length)+"行"+"</font><br/>"); for(var i=0;i<result.ERROR_LIST.length;i++){ var obj = {}; for(var j in result.ERROR_LIST[i]) { if(j == 'errorInfor') { obj.errorInfor = result.ERROR_LIST[i][j]; } } $("#success").append("<font color='red'>"+obj.errorInfor+"</font><br/>"); } } } }); }); }); });
评论
2 楼
snowday88
2011-07-01
还有这样在页面迭代也是有问题的!太麻烦!可以直接把集合传过来!
1 楼
snowday88
2011-07-01
王国波:这样做导入是有问题的!如果项目部署在服务器 在本地机导入的话,它的file控件获取path是获取不到的!所以应该先把文件上传然后再解析。
上传有两种方式 异步和同步 异步使用ajaxfileupload.js插件实现ajax文件上传。 同步的话 可以使用struts2文件上传
上传有两种方式 异步和同步 异步使用ajaxfileupload.js插件实现ajax文件上传。 同步的话 可以使用struts2文件上传
发表评论
-
jquery uploadify
2012-06-13 18:21 4679使用jquery uploadify组件的时候遇到上传成功 ... -
javascript 单元格互换值
2011-05-23 17:57 1497<%@ page language="ja ... -
弹出窗口 ymPrompt API
2011-04-14 15:59 1344http://wenku.baidu.com/view/a05 ... -
jquery tabs 面板
2010-11-19 11:06 1131<%@ page language="java ... -
jquery - tags 百度样式的动态提示
2010-11-18 18:27 1325<%@ page language="ja ... -
jQuery 弹出层
2010-11-06 18:43 1243<%@ page language="java ... -
jquery 鼠标移动,连接提示
2010-11-01 16:36 1423jQuery(document).ready(functi ... -
jquery-实现拖拽功能
2010-09-28 18:17 1005jqueryui.com - demo - sorttable ... -
js操作table,实现拖拽,保存顺序思路
2010-09-27 15:03 2033<%@ page language="java ... -
js 验证的样式 有点EXT味道
2010-07-23 09:25 1016if('SUCCESS'=='${SUCCESS}') ... -
正则表达式 验证表单 regular
2010-04-30 09:48 1275<title>表单验证类 Validator ... -
jQuery js 图片轮换显示 缩略图 滚动预览小图的相册
2010-04-14 09:50 4365<!DOCTYPE html PUBLIC &quo ... -
js 滚动图片
2010-04-12 12:43 2082<!-- *********************** ... -
showDialog 窗口模式
2010-03-09 11:35 1256var url = 'orderInfor.jsp'; ... -
jQuery Ajax
2010-03-05 14:31 1066var data = 'id='+id; $.aja ... -
jQuery获取表单值
2010-02-07 10:06 6877获取所有SELECT值 //获取所有属性值 var it ... -
js 操作 json
2010-02-06 10:28 1129var data = 'id='+$('#menuThr ... -
js 选择提示 confirm
2010-01-27 16:02 1223if(window.confirm('确定删除?')) ... -
JS 提示输入字符数
2010-01-27 14:06 1021<script type="text/ja ... -
JS 提示输入字符数
2010-01-27 14:05 1044<script type="text/ja ...
相关推荐
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于网络数据传输,因为它易于人阅读和编写,同时也易于机器解析和生成。JSON-C是一个针对C语言的JSON库,它提供了解析、生成JSON以及将JSON...
给出的代码片段并不是json-c库的一部分,而是Python与C扩展模块相关的代码,用于定义Python中的JSON解析器和编码器类。尽管如此,我们仍然可以从中学到一些关于C语言和Python扩展编程的知识: ```c #include ...
赠送jar包:mapstruct-1.1.0.Final.jar; 赠送原API文档:mapstruct-1.1.0.Final-javadoc.jar; 赠送源代码:mapstruct-1.1.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.1.0.Final.pom; 包含翻译后...
《深入理解Armink-struct2json工具:从结构体到JSON的转换之道》 在现代软件开发中,数据交换和序列化是至关重要的环节。JSON(JavaScript Object Notation)因其简洁明了的格式,被广泛应用于跨平台的数据交互。 ...
通过"struct2json-master"库,开发者无需从零开始编写复杂的JSON解析和生成代码,而是可以专注于业务逻辑,大大提高了开发效率和代码可维护性。在进行C语言编程并涉及JSON数据交换的项目时,这个库是一个非常实用的...
同时也易于机器解析和生成。它基于 JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999 的一个子集。 JSON 采用完全独立于语言的文本格式,但是也使用了类似于 C 语言家族的习惯...
MapStruct 的工作原理是基于Java的JSR 269注释处理器,它通过getter和setter方法进行字段拷贝,避免了反射带来的性能损耗。如果源对象和目标对象的字段名称相同,MapStruct会自动进行映射;对于字段名称不同的情况,...
Go语言是一种高效、轻量级且并发性能出色的编程语言,尤其适合构建网络服务和API。在Go语言中,`go-json-rest`是一个流行的开源库,它简化了创建RESTful JSON API的过程。本篇文章将深入探讨如何使用`go-json-rest`...
` 和 `double json_object_get_double(struct json_object *this);`:对应于双精度浮点数的创建和获取。 - `struct json_object* json_object_new_string(char *s);` 和 `char* json_object_get_string(struct json_...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于Web服务和应用程序之间的数据传输。Go语言,由Google开发,是现代编程中的一种高效、简洁的静态类型语言,特别适合构建网络服务和API。在...
赠送jar包:mapstruct-jdk8-1.2.0.Final.jar; 赠送原API文档:mapstruct-jdk8-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-jdk8-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-jdk8-1.2.0....
用于协议缓冲区的Mapstruct SPI实现 这种命名策略有助于在您的域类和protobuf类之间生成有效的映射代码。 无论和类支载。 注意:取决于mapstruct 1.4.0.CR1ProtobufAccessor命名策略扩展...
关于使用struct2框架时部分缺失的json的jar包的补充
赠送jar包:mapstruct-jdk8-1.2.0.Final.jar; 赠送原API文档:mapstruct-jdk8-1.2.0.Final-javadoc.jar; 赠送源代码:mapstruct-jdk8-1.2.0.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-jdk8-1.2.0....
`x2struct` 是一个针对这两种格式的解析库,它旨在简化JSON和XML的处理,提供类似于JAVA的API,使得在C++中操作这些格式的数据更加简便和高效。 `x2struct` 的核心功能是提供了一套易于理解和使用的接口,用于读取...
在Struts2中,返回JSON数据是一种常见的需求,尤其在处理AJAX请求时,它允许前端和后端进行无刷新的数据交互。这篇博客"Struts2返回json -- demo"可能是关于如何在Struts2框架中实现JSON响应的教程。 在Struts2中,...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,其特点在于格式简单、易于理解和编写,并且易于机器解析和生成。它基于JavaScript编程语言标准ECMA-262第三版(1999年12月)的一个子集。JSON采用了...
1. **简介**:这部分通常会介绍MapStruct的基本概念和设计原则,包括约定优于配置的哲学,以及如何利用它来简化Java Bean之间的数据转换。MapStruct通过注解驱动的方式工作,开发者只需要定义映射接口,而具体的实现...
map 和 bean 之间的转换,可以利用反射的原理实现
赠送jar包:mapstruct-1.3.1.Final.jar; 赠送原API文档:mapstruct-1.3.1.Final-javadoc.jar; 赠送源代码:mapstruct-1.3.1.Final-sources.jar; 赠送Maven依赖信息文件:mapstruct-1.3.1.Final.pom; 包含翻译后...