2019-11-21 00:28:01 kangshifu007 阅读数 36
  • 车牌识别停车场管理系统(附SSM项目源代码)

          掌握基于腾讯人工智能(AI)的车牌识别技术,使用车牌识别技术实现一个完整的停车场管理系统,项目包括网页调用摄像头拍照,车牌拍照识别,上传车牌图片识别,用户管理,车辆管理(临时车与包月车),车辆出场,入场管理,停车费收费管理,按照临时车或包月车自动计算停车费,系统参数设置,修改用户密码及安全退出等功能,该系统采用Jsp技术,使用SSM框架,Mysql数据库,ajax技术及人工智能等相关技术实现。 项目开发技术:java,jsp,mysql,MyBatis,SpringMVC,jquery,ajax,json 项目运行环境:jdk1.7及以上版本,tomcat6.0及以上版本,mysql5.5及以上版本项目开发工具: 本项目开发工具是Eclipse,也支持myEclipse,Intellij Idea等其他版本开发工具 相关课程学习顺序 本校课程是培养JAVA软件工程师及JSP WEB网络应用程序开发,android工程师的全套课程,课程学习顺序如下:JAVA初级工程师:     1、计算机基础     2、HTML语言基础     3、C语言从入门到精通+贪吃蛇游戏     4、贪吃蛇游戏     5、SQL SERVER数据库基础     6、JAVA从入门到精通+推箱子游戏+QQ即时通讯软件     7、推箱子游戏;     8、仿QQ即时通讯软件;JAVA中级工程师:     9、SQLSERVER数据库高级     10、SQLSERVER从入门到精通(基础+高级)               11、JavaScript从入门到精通,     12、JSP从入门到精通+点餐系统,     13、JSP从入门到精通+在线视频学习教育平台,     14、JSP从入门到精通+大型电商平台;     15、XML从入门到精通,     16、数据结构(JAVA版),JAVA高级工程师:     17、Oracle数据库从入门到精通,     18、ajax+jquery从入门到精通,     19、EasyUI从入门到精通,SSH框架:     20、Struts2从入门到精通课程,     21、Hibernate从入门到精通课程,     22、Spring从入门到精通课程;     23、Echarts从入门到精通,     24、Excel基于POI的导入导出工作流框架:     25、Activiti流程框架从入门到精通     26、JBPM流程框架从入门到精通SSM框架:     27、MyBatis从入门到精通     28、Spring MVC从入门到精通面试题:     29、职业生涯规划及面试题集锦商业项目:     30、微信公众号在线支付系统     31、微信生活缴费在线支付系统     32、支付宝生活缴费在线支付系统     33、在线考试系统     34、手机订餐管理系统,     35、CRM客户关系管理系统     36、大型房地产CRM销售管理系统     37、CMPP2,CMPP3移动网关系统人工智能:     38、人脸识别在线考试系统     39、人脸识别系统项目实战     40、车牌识别系统项目实战     41、身份证识别系统项目实战     42、营业执照识别系统项目实战           43、名片识别管理系统

    1022 人正在学习 去看看 赖国荣

poi导出Excel文件下载数据

poi上传Excel文件批量的添加数据 : https://blog.csdn.net/kangshifu007/article/details/103149764

步骤 :

1.添加依赖

2.添加工具类 ,

3.根据实际情况创建相对应的实体类(下面有具体的说明)

4.编写controller层代码

5.service层中的代码省略了 , 只需要根据需要查询的条件查询数据 , 把数据封装到一个list集合中 , 然后返回controller层中即可

友情提示 : 本文只是用于导出适量的数据 , 不能用于导出百万级别的数据

 

导出的Excel文件部分数据展示: 颜色等样式都是从Excel模板中读取的

 

1.添加依赖

<!--poi的依赖包-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.0.1</version>
        </dependency>
 
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>
 
        <!--文件上传 , 一般有下载就有上传 , 可以选择性添加-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>

2.添加工具类 

说明 : 工具类和下面controller层中的代码相匹配

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class DownloadUtil {
	
	/**
	 * @param filePath 要下载的文件路径
	 * @param returnName 返回的文件名
	 * @param response HttpServletResponse
	 * @param delFlag 是否删除文件
	 */
	protected void download(String filePath,String returnName,HttpServletResponse response,boolean delFlag){
		this.prototypeDownload(new File(filePath), returnName, response, delFlag);
	}


	/**
	 * @param file 要下载的文件
	 * @param returnName 返回的文件名
	 * @param response HttpServletResponse
	 * @param delFlag 是否删除文件
	 */
	protected void download(File file,String returnName,HttpServletResponse response,boolean delFlag){
		this.prototypeDownload(file, returnName, response, delFlag);
	}
	
	/**
	 * @param file 要下载的文件
	 * @param returnName 返回的文件名
	 * @param response HttpServletResponse
	 * @param delFlag 是否删除文件
	 */
	public void prototypeDownload(File file,String returnName,HttpServletResponse response,boolean delFlag){
		// 下载文件
		FileInputStream inputStream = null;
		ServletOutputStream outputStream = null;
		try {
			if(!file.exists()) return;
			response.reset();
			//设置响应类型	PDF文件为"application/pdf",WORD文件为:"application/msword", EXCEL文件为:"application/vnd.ms-excel"。  
			response.setContentType("application/octet-stream;charset=utf-8");

			//设置响应的文件名称,并转换成中文编码
			//returnName = URLEncoder.encode(returnName,"UTF-8");
			returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1"));	//保存的文件名,必须和页面编码一致,否则乱码
			
			//attachment作为附件下载;inline客户端机器有安装匹配程序,则直接打开;注意改变配置,清除缓存,否则可能不能看到效果
			response.addHeader("Content-Disposition",   "attachment;filename="+returnName);  
			
			//将文件读入响应流
			inputStream = new FileInputStream(file);
			outputStream = response.getOutputStream();
			int length = 1024;
			int readLength=0;
			byte buf[] = new byte[1024];
			readLength = inputStream.read(buf, 0, length);
			while (readLength != -1) {
				outputStream.write(buf, 0, readLength);
				readLength = inputStream.read(buf, 0, length);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				outputStream.flush();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				outputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			try {
				inputStream.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
			//删除原文件
			
			if(delFlag) {				
				file.delete();
			}
		}
	}

	/**
	 * by tony 2013-10-17
	 * @param byteArrayOutputStream 将文件内容写入ByteArrayOutputStream
	 * @param response HttpServletResponse	写入response
	 * @param returnName 返回的文件名
	 */
	public void download(ByteArrayOutputStream byteArrayOutputStream, HttpServletResponse response, String returnName) throws IOException{
		response.setContentType("application/octet-stream;charset=utf-8");
		returnName = response.encodeURL(new String(returnName.getBytes(),"iso8859-1"));			//保存的文件名,必须和页面编码一致,否则乱码
		response.addHeader("Content-Disposition",   "attachment;filename=" + returnName);  
		response.setContentLength(byteArrayOutputStream.size());
		
		ServletOutputStream outputstream = response.getOutputStream();	//取得输出流
		byteArrayOutputStream.writeTo(outputstream);					//写到输出流
		byteArrayOutputStream.close();									//关闭
		outputstream.flush();											//刷数据
	}
}

3.创建相对应的实体类

说明 : 实体类中的属性是下载Excel文件中对应的标题 , 也就是从数据库查询的数据的字段 , 根据项目需求做适当的修改

import java.io.Serializable;
import java.util.Date;

public class ContractProductVo implements Serializable {

    //属性都是Excel表中的每一列对应的标题 , 根据具体的下载情况做具体的修改

	private String customName;		//客户名称
	private String contractNo;		//合同号,订单号
	private String productNo;		//货号
	private Integer cnumber;		//数量
	private String factoryName;		//厂家名称,冗余字段
	private Date deliveryPeriod;	//交货期限
	private Date shipTime;			//船期
	private String tradeTerms;		//贸易条款

	public String getCustomName() {
		return customName;
	}

	public void setCustomName(String customName) {
		this.customName = customName;
	}

	public String getContractNo() {
		return contractNo;
	}

	public void setContractNo(String contractNo) {
		this.contractNo = contractNo;
	}

	public String getProductNo() {
		return productNo;
	}

	public void setProductNo(String productNo) {
		this.productNo = productNo;
	}

	public Integer getCnumber() {
		return cnumber;
	}

	public void setCnumber(Integer cnumber) {
		this.cnumber = cnumber;
	}

	public String getFactoryName() {
		return factoryName;
	}

	public void setFactoryName(String factoryName) {
		this.factoryName = factoryName;
	}

	public Date getDeliveryPeriod() {
		return deliveryPeriod;
	}

	public void setDeliveryPeriod(Date deliveryPeriod) {
		this.deliveryPeriod = deliveryPeriod;
	}

	public Date getShipTime() {
		return shipTime;
	}

	public void setShipTime(Date shipTime) {
		this.shipTime = shipTime;
	}

	public String getTradeTerms() {
		return tradeTerms;
	}

	public void setTradeTerms(String tradeTerms) {
		this.tradeTerms = tradeTerms;
	}
}

4.编写controller层代码(核心代码)

说明 : DownloadUtil downloadUtil = new DownloadUtil();    是第二步导入的工具类 , 因为这个工具类中的方法不是静态的 , 所以使用了new对象的方法的

import com.alibaba.dubbo.config.annotation.Reference;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

@Controller
@RequestMapping("/cargo/contract")
public class ContractPrintController{

    @Reference
    private ContractService contractService;


    /*
    * 出货表的打印
    * */
    @RequestMapping("/printExcel")
    public String printExcel(String inputDate , String companyId) throws IOException {
        //1.根据条件查询数据 , 把数据存在list集合中
        List<ContractProductVo> list = contractService.findByShipTime(inputDate,companyId);
        System.out.println("list集合"+list);
        //2.构建excel , 读取的是webAPP下的模板Excel文件,session.getServletContext().getResourceAsStream();是读取webAPP下的文件
        ///make/xlsprint/tOUTPRODUCT.xlsx  是模板文件在webAPP下的路径
        InputStream is = session.getServletContext().getResourceAsStream("/make/xlsprint/tOUTPRODUCT.xlsx");
        //2.1创建工作簿
        Workbook workbook = new XSSFWorkbook(is);
        //2.2 获得表对象
        Sheet sheet = workbook.getSheetAt(0);
        //2.3 赋值大标题
        Row row = sheet.getRow(0);
        //获得单元格
        Cell cell = row.getCell(1);
        //赋值 , 把标题中的时间设置为前端页面传入的时间
        cell.setCellValue(inputDate.replace("-","年")+"月份出货表");//2012年8月份出货表  2015年01

        //样式部分-> 先获得样式  赋值给其他的行 和 单元格
        row = sheet.getRow(2);
        short lastCellNum = row.getLastCellNum();
        CellStyle[]  cellStyles = new  CellStyle[lastCellNum];
        for (int i = 1; i < lastCellNum; i++) {
            //获得第三行的每一个cell对象
            cell = row.getCell(i);
            cellStyles[i]= cell.getCellStyle(); //将获得每一个样式 复制到数组中
        }


        //2.5 数据部分 一个对象是一行
        int index = 2 ;
        for (ContractProductVo productVo : list) { //165条数据
           
            row = sheet.createRow(index);//创建行
            // "客户",
            cell = row.createCell(1  );//创建单元格
            cell.setCellValue(productVo.getCustomName());//赋值
            cell.setCellStyle(cellStyles[1]);//赋值样式
            // "订单号",
            cell = row.createCell(2 );//创建单元格
            cell.setCellValue(productVo.getContractNo());//赋值
            cell.setCellStyle(cellStyles[2]);//赋值样式
            // "货号",
            cell = row.createCell(3  );//创建单元格
            cell.setCellValue(productVo.getProductNo());//赋值
            cell.setCellStyle(cellStyles[3]);//赋值样式
            // "数量",
            cell = row.createCell(4  );//创建单元格
            cell.setCellValue(productVo.getCnumber());//赋值
            cell.setCellStyle(cellStyles[4]);//赋值样式
            // "工厂",
            cell = row.createCell(5 );//创建单元格
            cell.setCellValue(productVo.getFactoryName());//赋值
            cell.setCellStyle(cellStyles[5]);//赋值样式
            // "工厂交期",
            cell = row.createCell(6  );//创建单元格
            cell.setCellValue(productVo.getDeliveryPeriod());//赋值
            cell.setCellStyle(cellStyles[6]);//赋值样式
            // "船期",
            cell = row.createCell(7 );//创建单元格
            cell.setCellValue(productVo.getShipTime());//赋值
            cell.setCellStyle(cellStyles[7]);//赋值样式
            // "贸易条款"
            cell = row.createCell(8 );//创建单元格
            cell.setCellValue(productVo.getTradeTerms());//赋值
            cell.setCellStyle(cellStyles[8]);//赋值样式

            index ++;//索引增加

        }

        //3.下载即可 不是写到自己本地 写回给浏览器
        DownloadUtil downloadUtil = new DownloadUtil();
        //流
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        // workbook 转换成 流
        workbook.write(byteArrayOutputStream);
        //下载
        downloadUtil.download(byteArrayOutputStream, response, "出货表.xlsx");
        return "redirect:/cargo/contract/print.do";
    }

}

 

2019-05-07 08:33:31 yuyecsdn 阅读数 123
  • 车牌识别停车场管理系统(附SSM项目源代码)

          掌握基于腾讯人工智能(AI)的车牌识别技术,使用车牌识别技术实现一个完整的停车场管理系统,项目包括网页调用摄像头拍照,车牌拍照识别,上传车牌图片识别,用户管理,车辆管理(临时车与包月车),车辆出场,入场管理,停车费收费管理,按照临时车或包月车自动计算停车费,系统参数设置,修改用户密码及安全退出等功能,该系统采用Jsp技术,使用SSM框架,Mysql数据库,ajax技术及人工智能等相关技术实现。 项目开发技术:java,jsp,mysql,MyBatis,SpringMVC,jquery,ajax,json 项目运行环境:jdk1.7及以上版本,tomcat6.0及以上版本,mysql5.5及以上版本项目开发工具: 本项目开发工具是Eclipse,也支持myEclipse,Intellij Idea等其他版本开发工具 相关课程学习顺序 本校课程是培养JAVA软件工程师及JSP WEB网络应用程序开发,android工程师的全套课程,课程学习顺序如下:JAVA初级工程师:     1、计算机基础     2、HTML语言基础     3、C语言从入门到精通+贪吃蛇游戏     4、贪吃蛇游戏     5、SQL SERVER数据库基础     6、JAVA从入门到精通+推箱子游戏+QQ即时通讯软件     7、推箱子游戏;     8、仿QQ即时通讯软件;JAVA中级工程师:     9、SQLSERVER数据库高级     10、SQLSERVER从入门到精通(基础+高级)               11、JavaScript从入门到精通,     12、JSP从入门到精通+点餐系统,     13、JSP从入门到精通+在线视频学习教育平台,     14、JSP从入门到精通+大型电商平台;     15、XML从入门到精通,     16、数据结构(JAVA版),JAVA高级工程师:     17、Oracle数据库从入门到精通,     18、ajax+jquery从入门到精通,     19、EasyUI从入门到精通,SSH框架:     20、Struts2从入门到精通课程,     21、Hibernate从入门到精通课程,     22、Spring从入门到精通课程;     23、Echarts从入门到精通,     24、Excel基于POI的导入导出工作流框架:     25、Activiti流程框架从入门到精通     26、JBPM流程框架从入门到精通SSM框架:     27、MyBatis从入门到精通     28、Spring MVC从入门到精通面试题:     29、职业生涯规划及面试题集锦商业项目:     30、微信公众号在线支付系统     31、微信生活缴费在线支付系统     32、支付宝生活缴费在线支付系统     33、在线考试系统     34、手机订餐管理系统,     35、CRM客户关系管理系统     36、大型房地产CRM销售管理系统     37、CMPP2,CMPP3移动网关系统人工智能:     38、人脸识别在线考试系统     39、人脸识别系统项目实战     40、车牌识别系统项目实战     41、身份证识别系统项目实战     42、营业执照识别系统项目实战           43、名片识别管理系统

    1022 人正在学习 去看看 赖国荣

Easyui DataGrid Spring mvc poi 数据导出Excel,具体代码:

1、html:

<div class="btnbar-tools">
    <a href="javascript:void(0);" class="count" id="exportHnStatics"><i class="fa fa-pie-chart purple"></i>导出</a>
</div>


2、JS实现,(用Ajax无法导出)

$(document).ready(function(){
    //导出
    $('#exportHnStatics').on('click', function(){
        var mouth=$('#st_mouth').val();
        //查询参数
        param = "?mouth="+mouth;
        window.location.href = basePath+"/api/exportHnStatics"+param;
        
    });
});


3、后台pom.xml依赖添加:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.10</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.17</version>
</dependency>
<dependency>
    <groupId>org.apache.directory.studio</groupId>
    <artifactId>org.apache.commons.io</artifactId>
    <version>2.4</version>
</dependency>


4、后台Controller实现:

@RequestMapping(value = "/exportHnStatics")
@ResponseBody
public void exportHnStatics(HttpServletResponse response, HttpServletRequest request, String mouth) {    
    List<Map> listData = this.dataLogService.selectLoginStatistics(params);
 
    //listData格式如下:
    //Map map = new HashMap<>();
    //map.put("date", "2018-09-27");
    //map.put("bjTotal", "100");
    //map.put("tjTotal", "200");
    //map.put("shTotal", "300");
    //List<Map> list = new ArrayList<>();
    //list.add(map);
 
    String columnNames[] = { "日期",  "北京", "天津", "上海"};// 列名
    String keys[] = { "date", "bjTotal", "tjTotal", "shTotal"};// map中的key
    String fileName = "test";
    //导出
    Map<Short, HorizontalAlignment> styleMap = new HashMap<Short, HorizontalAlignment>();
    //可以设置列样式,靠左靠右
    styleMap.put(new Short("1"), HorizontalAlignment.LEFT);
    //调用导出,数据内容为List<Map>格式
    ExportExcelUtils.exportExcel(listData, keys, columnNames, response, fileName, styleMap, request);
}


5、导出ExportExcelUtils工具类封装:

 
 

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 
 
/**
 * @ClassName: ExportExcelUtils
 * @Description: 导出Excel文件
 * @author sam
 * @date 2017年6月23日 上午9:45:03
 */
public class ExportExcelUtils {
    /**
     * @Description: 创建工作簿导出
     * @param list 导出数据集合
     * @param keys 表头数组集合
     * @param columnNames  导出excel里面的列名属性
     * @param styleMap  样式列表[可以使用默认样式]
     * @return
     */
    @SuppressWarnings("rawtypes")
    public static Workbook createWorkbook(List<Map> list, String[] keys,
            String[] columnNames,Map<Short, HorizontalAlignment> styleMap) {
        // 创建excel工作簿
        SXSSFWorkbook wb = new SXSSFWorkbook(1000);
        // 创建第一个sheet(页),并命名
        Sheet sheet = null;
        
        // 创建两种单元格格式
        CellStyle cs = wb.createCellStyle();
        CellStyle cs2 = wb.createCellStyle();
 
        // 创建两种字体
        Font f = wb.createFont();
        Font f2 = wb.createFont();
 
        // 创建第一种字体样式(用于列名)
        f.setFontHeightInPoints((short) 10);
        f.setColor(IndexedColors.BLACK.getIndex());
        f.setBold(true);
 
        // 创建第二种字体样式(用于值)
        f2.setFontHeightInPoints((short) 10);
        f2.setColor(IndexedColors.BLACK.getIndex());
 
        // 设置第一种单元格的样式(用于列名)
        cs.setFont(f);
        cs.setBorderLeft(BorderStyle.THIN);
        cs.setBorderRight(BorderStyle.THIN);
        cs.setBorderTop(BorderStyle.THIN);
        cs.setBorderBottom(BorderStyle.THIN);
        cs.setAlignment(HorizontalAlignment.CENTER);
 
        // 设置第二种单元格的样式(用于值)
        cs2.setFont(f2);
        cs2.setBorderLeft(BorderStyle.THIN);
        cs2.setBorderRight(BorderStyle.THIN);
        cs2.setBorderTop(BorderStyle.THIN);
        cs2.setBorderBottom(BorderStyle.THIN);
        cs2.setAlignment(HorizontalAlignment.CENTER);
        
        int startNum = 0;//sheet开始行
        
        // 设置每行每列的值
        for (int i = 0; i < list.size(); i++) {
            // Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的
            //超过50000条新建sheet
            int num = i%50000;
            if(0==num){
                startNum = 0;
                sheet = wb.createSheet();
                // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
                for (int k = 0; k < keys.length; k++) {
                    sheet.setColumnWidth((short) k, (short) (45 * 150));
                }
 
                // 创建第一行
                Row row = sheet.createRow((short) 0);
                // 设置列名
                for (int l = 0; l < columnNames.length; l++) {
                    Cell cell = row.createCell(l);
                    cell.setCellValue(columnNames[l]);
                    cell.setCellStyle(cs);
                }
            }
            
            // 创建一行,在页sheet上
            Row row1 = sheet.createRow( startNum + 1);
            startNum++;
            // 在row行上创建一个方格
            for (short j = 0; j < keys.length; j++) {
                Cell cell = row1.createCell(j);
                cell.setCellValue(list.get(i).get(keys[j]) == null ? " " : list.get(i).get(keys[j]).toString());
                //判断是否使用特定样式
                if (styleMap!=null && styleMap.containsKey(j)) {
                    CellStyle csItem = wb.createCellStyle();
                    csItem.setFont(f2);
                    csItem.setBorderLeft(BorderStyle.THIN);
                    csItem.setBorderRight(BorderStyle.THIN);
                    csItem.setBorderTop(BorderStyle.THIN);
                    csItem.setBorderBottom(BorderStyle.THIN);
                    csItem.setAlignment(styleMap.get(j));
                    cell.setCellStyle(csItem);
                }else{
                    cell.setCellStyle(cs2);
                }
            }
        }
        return wb;
    }
    
 
    /**
     * @Description: 导出Excel
     * @param list   导出数据集合
     * @param keys  表头集合
     * @param columnNames  列属性集合
     * @param styleMap  样式列表[可以使用默认样式]
     * @param response  response请求对象
     * @throws Exception
     */
    @SuppressWarnings("rawtypes")
    public static void exportExcel(List<Map> list, String keys[], String columnNames[], HttpServletResponse response,
            String fileName,Map<Short, HorizontalAlignment> styleMap,HttpServletRequest request) throws Exception {
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        // 调用工具类创建excel工作簿
        if(list==null || list.size()==0){
            createEmptyWorkbook(columnNames).write(os);
        } else {
            createWorkbook(list, keys, columnNames,styleMap).write(os);
        }
        byte[] content = os.toByteArray();
        InputStream is = new ByteArrayInputStream(content);
        // 设置response参数,可以打开下载页面
        response.reset();
        fileName = getDownloadFileName(fileName+".xlsx",request);
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-Disposition",
                "attachment;filename=" + fileName);
        OutputStream out = response.getOutputStream();
        byte[] b = new byte[2048];
        int length;
        while ((length = is.read(b)) > 0) {
            out.write(b, 0, length);
        }
        // 关闭。
        os.flush();
        os.close();
        is.close();
    }
 
    /**
     * @Description: List数据案例
     * @return
     */
    public static List<Map> getData() {
 
        String keys[] = { "companyName", "companyUserCount", "userCount", "notLoginCount", "useCount", "userPercent" };// map中的key
 
        Map map = new HashMap<>();
        map.put("companyName", 1);
        map.put("companyUserCount", "aaa");
        map.put("userCount", "北京");
        map.put("notLoginCount", "aaa");
        map.put("useCount", "北京");
        map.put("userPercent", "aaa");
 
        Map map2 = new HashMap<>();
        map2.put("companyName", 2);
        map2.put("companyUserCount", "bbb");
        map2.put("userCount", "武汉");
        map2.put("notLoginCount", "bbb");
        map2.put("useCount", "武汉");
        map2.put("userPercent", "bbb");
 
        List<Map> list = new ArrayList<>();
        list.add(map);
        list.add(map2);
 
        return list;
    }
    
    public static String getDownloadFileName(String fileName,HttpServletRequest request) {
        String finalFileName = null;
        try {
            String userAgent = request.getHeader("USER-AGENT");
            if(StringUtils.contains(userAgent, "MSIE")||StringUtils.contains(userAgent, "Edge")||StringUtils.contains(userAgent, "like Gecko")){//IE浏览器
                finalFileName = URLEncoder.encode(fileName,"UTF8");
            }else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
                finalFileName = new String(fileName.getBytes(), "ISO8859-1");
            }else{
                finalFileName = URLEncoder.encode(fileName,"UTF8");//其他浏览器
            }
        } catch (Exception e) {
            
        }
        return finalFileName;
    }
    
    public static Workbook createEmptyWorkbook(String[] columnNames){
        // 创建excel工作簿
        SXSSFWorkbook wb = new SXSSFWorkbook(1000);
        // 创建第一个sheet(页),并命名
        Sheet sheet = null;
        
        // 创建两种单元格格式
        CellStyle cs = wb.createCellStyle();
 
        // 创建两种字体
        Font f = wb.createFont();
 
        // 创建第一种字体样式(用于列名)
        f.setFontHeightInPoints((short) 10);
        f.setColor(IndexedColors.BLACK.getIndex());
        f.setBold(true);
        
        cs.setFont(f);
        cs.setBorderLeft(BorderStyle.THIN);
        cs.setBorderRight(BorderStyle.THIN);
        cs.setBorderTop(BorderStyle.THIN);
        cs.setBorderBottom(BorderStyle.THIN);
        cs.setAlignment(HorizontalAlignment.CENTER);
        
        sheet = wb.createSheet();
        // 手动设置列宽。第一个参数表示要为第几列设;,第二个参数表示列的宽度,n为列高的像素数。
        for (int k = 0; k < columnNames.length; k++) {
            sheet.setColumnWidth((short) k, (short) (45 * 150));
        }
 
        // 创建第一行
        Row row = sheet.createRow((short) 0);
        // 设置列名
        for (int l = 0; l < columnNames.length; l++) {
            Cell cell = row.createCell(l);
            cell.setCellValue(columnNames[l]);
            cell.setCellStyle(cs);
        }
        
        Row row2 = sheet.createRow(1);
        Cell cell = row2.createCell(0);
        cell.setCellValue("未查询到符合条件的数据");
        
        return wb;
    }
}


配置完成!

2018-12-02 12:24:21 zorro_jin 阅读数 195
  • 车牌识别停车场管理系统(附SSM项目源代码)

          掌握基于腾讯人工智能(AI)的车牌识别技术,使用车牌识别技术实现一个完整的停车场管理系统,项目包括网页调用摄像头拍照,车牌拍照识别,上传车牌图片识别,用户管理,车辆管理(临时车与包月车),车辆出场,入场管理,停车费收费管理,按照临时车或包月车自动计算停车费,系统参数设置,修改用户密码及安全退出等功能,该系统采用Jsp技术,使用SSM框架,Mysql数据库,ajax技术及人工智能等相关技术实现。 项目开发技术:java,jsp,mysql,MyBatis,SpringMVC,jquery,ajax,json 项目运行环境:jdk1.7及以上版本,tomcat6.0及以上版本,mysql5.5及以上版本项目开发工具: 本项目开发工具是Eclipse,也支持myEclipse,Intellij Idea等其他版本开发工具 相关课程学习顺序 本校课程是培养JAVA软件工程师及JSP WEB网络应用程序开发,android工程师的全套课程,课程学习顺序如下:JAVA初级工程师:     1、计算机基础     2、HTML语言基础     3、C语言从入门到精通+贪吃蛇游戏     4、贪吃蛇游戏     5、SQL SERVER数据库基础     6、JAVA从入门到精通+推箱子游戏+QQ即时通讯软件     7、推箱子游戏;     8、仿QQ即时通讯软件;JAVA中级工程师:     9、SQLSERVER数据库高级     10、SQLSERVER从入门到精通(基础+高级)               11、JavaScript从入门到精通,     12、JSP从入门到精通+点餐系统,     13、JSP从入门到精通+在线视频学习教育平台,     14、JSP从入门到精通+大型电商平台;     15、XML从入门到精通,     16、数据结构(JAVA版),JAVA高级工程师:     17、Oracle数据库从入门到精通,     18、ajax+jquery从入门到精通,     19、EasyUI从入门到精通,SSH框架:     20、Struts2从入门到精通课程,     21、Hibernate从入门到精通课程,     22、Spring从入门到精通课程;     23、Echarts从入门到精通,     24、Excel基于POI的导入导出工作流框架:     25、Activiti流程框架从入门到精通     26、JBPM流程框架从入门到精通SSM框架:     27、MyBatis从入门到精通     28、Spring MVC从入门到精通面试题:     29、职业生涯规划及面试题集锦商业项目:     30、微信公众号在线支付系统     31、微信生活缴费在线支付系统     32、支付宝生活缴费在线支付系统     33、在线考试系统     34、手机订餐管理系统,     35、CRM客户关系管理系统     36、大型房地产CRM销售管理系统     37、CMPP2,CMPP3移动网关系统人工智能:     38、人脸识别在线考试系统     39、人脸识别系统项目实战     40、车牌识别系统项目实战     41、身份证识别系统项目实战     42、营业执照识别系统项目实战           43、名片识别管理系统

    1022 人正在学习 去看看 赖国荣

一、Apache POI

        Apache POI是免费开源的、具有能对Microsoft Office格式文件进行读和写功能的Java API。它支持对Microsoft Office各种格式文件的读写,但在实际应用中,我们最常使用的是利用POI来导入导出Excel表格。

        所以这篇文章就主要讲,如何使用POI导出Excel表格,以及动态数据的导出。

二、导入必须的jar包

        若我们只需要导入导出Excel表格,则只需要导入以下三个jar包:poi.jar; poi-ooxml.jar; poi-ooxml-schemas.jar。

        poi-3.9_Excel表格所需jar包下载

三、简单的导出Excel表格示例

public void exportExcel(HttpServletRequest request, HttpServletResponse response) throws IOException{
	/**  创建excel表格  */
	// 1.创建HSSFWorkbook对象(excel的文档对象)
	HSSFWorkbook wb = new HSSFWorkbook();
	// 2.建立新的sheet对象(excel的表单)
	HSSFSheet sheet = wb.createSheet("测试导出表格");
   
	sheet.setDefaultColumnWidth(20);         //设置缺省列宽
	sheet.setDefaultRowHeight((short)22);    // 设置缺省行高
	sheet.setDefaultRowHeightInPoints(22);
	
	/** 添加样式 */
	HSSFCellStyle cellDefStyle = wb.createCellStyle();   // 创建单元格样式
	cellDefStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);   // 设置左右居中
	cellDefStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);    // 设置水平居中
	// 设置单元格边框(四周都有边框线)
	cellDefStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);    // HSSFCellStyle.BORDER_NONE:无边框线
	cellDefStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
	cellDefStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
	cellDefStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
	cellDefStyle.setWrapText(true);  // 自动换行
	// 设置文字样式
	HSSFFont fontDef = wb.createFont();
	fontDef.setFontName("宋体");    // 设置字体类型
	fontDef.setFontHeightInPoints((short)12);    // 设置字体大小
	fontDef.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);   // 设置字体加粗(fontDef.setBold(true)同样有用)
	fontDef.setUnderline(HSSFFont.U_SINGLE);    // 设置下划线
	cellDefStyle.setFont(fontDef);
  
	
	/** 设置标题  */
	// 1.在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个
	int rowIndex = 0;    // 记录行号
	HSSFRow titleRow = sheet.createRow(rowIndex);
	titleRow.setHeightInPoints(30);    // 设置此行的行高
	// 2.创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个
	HSSFCell cell = titleRow.createCell(0);
	cell.setCellValue("测试导出Excel表格");    // 设置单元格内容
	// 3.设置单元格样式
	cell.setCellStyle(cellDefStyle);
	// 4.合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列
	sheet.addMergedRegion(new CellRangeAddress(rowIndex, rowIndex, 0, 5));
	++ rowIndex;
	
	/** 设置表格内容  */
	// 1.获取要填入表格的数据(根据自己实际情况获取数据)
	List<T> datas = 。。。
	for (T obj : datas) {
		HSSFRow contentRow = sheet.createRow(rowIndex);
		cell = contentRow.createCell(0);
		cell.setCellValue(obj.getName());
		cell.setCellStyle(cellDefStyle);
		cell = contentRow.createCell(1);
		cell.setCellValue(obj.getSex());
		cell.setCellStyle(cellDefStyle);
		sheet.setColumnWidth(colIndex -1,  256 * 20);    // 设置列宽(第一个参数是列号, 第二个参数是宽度)(setColumnWidth这个方法宽度的单位是字符数的256分之一)
		cell = contentRow.createCell(2);
		cell.setCellValue(obj.getAge());
		cell.setCellStyle(cellcontentStyle);
		sheet.setColumnWidth(colIndex - 1,  256 * 80);
		sheet.addMergedRegion(new CellRangeAddress(rowIndex, rowIndex, 2, 5));    // 合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列,截止列
		++ rowIndex;
	}
	
	
	/** 设置行高(前面设置了默认行高,这里只需设置非默认部分,) */
	for (int i = 2; i < rowIndex - 1; i++) {
		HSSFRow row = sheet.getRow(i);
		row.setHeightInPoints(22);
	}
	
	/** 画表格对角线(表格中常有需要画对角线) */
	HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
	HSSFClientAnchor anchor = new HSSFClientAnchor();   // 建立锚点(startRow, startCol, startX, startY, endRow, endCol, endX, endY)
	anchor.setAnchor((short) 1, 5, 0, 0, (short) 3, 6, 0, 0);
	HSSFSimpleShape line = patriarch.createSimpleShape(anchor);    // 建立一个简单的图形
	line.setShapeType(HSSFSimpleShape.OBJECT_TYPE_LINE);    // 线
	line.setLineStyle(HSSFShape.LINESTYLE_SOLID);    // 实线
	line.setLineWidth(HSSFShape.LINEWIDTH_ONE_PT);   // 设置线条粗细(HSSFShape.LINEWIDTH_ONE_PT表示1pt)
	
	//输出Excel文件
	OutputStream output = response.getOutputStream();
	response.reset();
	response.setCharacterEncoding("UTF-8");        
	String fileName = "导出Excel表格测试文件.xls";
	response.setContentType("application/vnd.ms-excel");
	response.setHeader("Content-disposition", "attachment; filename=" + dealFileName(request, fileName) );
	wb.write(output);
	output.close();
}

/** 处理导出文件名乱码的问题 */ 
public String dealFileName(HttpServletRequest request, String fileName) {
	String returnFileName = "";
	try {
		String userAgent = request.getHeader("USER-AGENT");
		if (userAgent != null && (userAgent.indexOf("MSIE") != -1 || userAgent.indexOf("Trident") != -1) {    // IE浏览器
			returnFileName = java.net.URLEncoder.encode(fileName, "UTF8");
		} else if (userAgent != null && userAgent.indexOf("Mozilla") != -1) {    // 火狐,chrome浏览器等
			returnFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	return returnFileName;
}

四、动态数据的导出简单示例

        当我们要导出的数据格式是一致时,我们可以以对象的形式创建每一行的数据,通过对象数据列表,从而动态导出所有数据表格。

public String exportExcel() {
    try {
        // arg0:数据的集合
        List<?> data = getUserList();
        // arg1:集合中的数据的类型
        Class<?> clazz = User.class;
			
        // 创建工作本
        HSSFWorkbook workbook = new HSSFWorkbook();
        // 创建工作表
        HSSFSheet sheet = workbook.createSheet("Sheet1");
        // 创建第1行
        HSSFRow row = sheet.createRow(0);
			
        // 获取数据的字段列表
        Field[] fields = clazz.getDeclaredFields();
			
        // 创建?个单元格
        for (int i = 0; i < fields.length; i++) {
            // 设置当前字段可见
            fields[i].setAccessible(true);
            // 创建单元格
            HSSFCell cell = row.createCell((short) i);
            // 设计各单元格的数据类型(非必要)
            if ("java.lang.Integer".equals(fields[i].getType().getName())) {
                cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
            } else {
                cell.setCellType(HSSFCell.CELL_TYPE_STRING);
            }
            // 添加数据
            cell.setCellValue(fields[i].getName());
        }
	
        // 循环添加数据
        for (int i = 0; i < data.size(); i++) {
            // 创建第?行
            row = sheet.createRow(i + 1);
            // 循环创建?个单元格
            for (int c = 0; c < fields.length; c++) {
                // 创建单元格
                HSSFCell cell = row.createCell((short) c);
                // 设计各单元格的数据类型(非必要)
                if ("java.lang.Integer".equals(fields[c].getType().getName())) {
                    cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
                } else {
                    cell.setCellType(HSSFCell.CELL_TYPE_STRING);
                }
                // 添加数据
                cell.setCellValue(fields[c].get(data.get(i)).toString());
            }
        }
	
        // 将数据写到输出流对象中
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        workbook.write(out);
        // 通过输出流得到数据的byte[]
        byte[] bytes = out.toByteArray();
        // 关闭流
        out.close(); // 连接型资源都需要close()
        // 基于byte[]创建输入流对象,以返回给客户端
        setExcelStream(new ByteArrayInputStream(bytes));
        // 返回
        return "success";
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "error";
}

注:我们还可以通过自定义注解,获得每一个字段的中文列名,以及该字段是否需要导出。

2018-01-22 09:29:41 huangchunxia_1 阅读数 4150
  • 车牌识别停车场管理系统(附SSM项目源代码)

          掌握基于腾讯人工智能(AI)的车牌识别技术,使用车牌识别技术实现一个完整的停车场管理系统,项目包括网页调用摄像头拍照,车牌拍照识别,上传车牌图片识别,用户管理,车辆管理(临时车与包月车),车辆出场,入场管理,停车费收费管理,按照临时车或包月车自动计算停车费,系统参数设置,修改用户密码及安全退出等功能,该系统采用Jsp技术,使用SSM框架,Mysql数据库,ajax技术及人工智能等相关技术实现。 项目开发技术:java,jsp,mysql,MyBatis,SpringMVC,jquery,ajax,json 项目运行环境:jdk1.7及以上版本,tomcat6.0及以上版本,mysql5.5及以上版本项目开发工具: 本项目开发工具是Eclipse,也支持myEclipse,Intellij Idea等其他版本开发工具 相关课程学习顺序 本校课程是培养JAVA软件工程师及JSP WEB网络应用程序开发,android工程师的全套课程,课程学习顺序如下:JAVA初级工程师:     1、计算机基础     2、HTML语言基础     3、C语言从入门到精通+贪吃蛇游戏     4、贪吃蛇游戏     5、SQL SERVER数据库基础     6、JAVA从入门到精通+推箱子游戏+QQ即时通讯软件     7、推箱子游戏;     8、仿QQ即时通讯软件;JAVA中级工程师:     9、SQLSERVER数据库高级     10、SQLSERVER从入门到精通(基础+高级)               11、JavaScript从入门到精通,     12、JSP从入门到精通+点餐系统,     13、JSP从入门到精通+在线视频学习教育平台,     14、JSP从入门到精通+大型电商平台;     15、XML从入门到精通,     16、数据结构(JAVA版),JAVA高级工程师:     17、Oracle数据库从入门到精通,     18、ajax+jquery从入门到精通,     19、EasyUI从入门到精通,SSH框架:     20、Struts2从入门到精通课程,     21、Hibernate从入门到精通课程,     22、Spring从入门到精通课程;     23、Echarts从入门到精通,     24、Excel基于POI的导入导出工作流框架:     25、Activiti流程框架从入门到精通     26、JBPM流程框架从入门到精通SSM框架:     27、MyBatis从入门到精通     28、Spring MVC从入门到精通面试题:     29、职业生涯规划及面试题集锦商业项目:     30、微信公众号在线支付系统     31、微信生活缴费在线支付系统     32、支付宝生活缴费在线支付系统     33、在线考试系统     34、手机订餐管理系统,     35、CRM客户关系管理系统     36、大型房地产CRM销售管理系统     37、CMPP2,CMPP3移动网关系统人工智能:     38、人脸识别在线考试系统     39、人脸识别系统项目实战     40、车牌识别系统项目实战     41、身份证识别系统项目实战     42、营业执照识别系统项目实战           43、名片识别管理系统

    1022 人正在学习 去看看 赖国荣

转载自:http://bbs.chinaunix.net/thread-3620272-1-1.html

说明:我的电脑 2.0CPU 2G内存 能够十秒钟导出 20W 条数据 ,12.8M的excel内容压缩后2.68M
我们知道在POI导出Excel时,数据量大了,很容易导致内存溢出。由于Excel 一个sheet允许的最大行数是65536这时我们想到分sheet进行导出;但是这种情况也不能解决内存溢出的问题。毕竟数据还是一次性在内存中进行保存的。这时我们想是不是可以导出多个excel呢?下面我就尝试着按照导出多个excel
首先:我们要确定数据量有多大,然后确定一个excel导出多少条数据,这样就可以确定导出的Excel的数量,于是我们就可以循环的导出excel并保存在任意的临时目录中。去这样如果内存不够的话虚拟机就会去进行回收已经保存的excel在内存中的空间。
假设我们我们已经成功的生成了多个excel,这时我们怎么把这N个excel文档传到客户端呢?其实一个一个的传也未尝不可,但是考虑那样对用户来说体验不够好,再次多个文件在网络上传输也比较慢。我们可以考虑对生成的几个文件进行压缩,然后传到客户端。
总结一下第一、分批次生成excel第二、压缩后到客户端

下面我把我的一个小实例贴上供大家参考

第一、Person.java 普通javabean

Javabean代码

  1. package bean;  
  2. /**  
  3. *   
  4. * @author QQ:三二8二4七6七六  
  5. *  
  6. */  
  7. public class Person {  
  8.   
  9.     private Integer id;  
  10.     private String name;  
  11.     private String address;  
  12.     private String tel;  
  13.     private Double money=0.0;  
  14.     public Double getMoney() {  
  15.         return money;  
  16.     }  
  17.     public void setMoney(Double money) {  
  18.         this.money = money;  
  19.     }  
  20.     public Person(Integer id, String name, String address, String tel,Double money) {  
  21.         super();  
  22.         this.id = id;  
  23.         this.name = name;  
  24.         this.address = address;  
  25.         this.tel = tel;  
  26.         this.money=money;  
  27.     }  
  28.     public Integer getId() {  
  29.         return id;  
  30.     }  
  31.     public void setId(Integer id) {  
  32.         this.id = id;  
  33.     }  
  34.     public String getName() {  
  35.         return name;  
  36.     }  
  37.     public void setName(String name) {  
  38.         this.name = name;  
  39.     }  
  40.     public String getAddress() {  
  41.         return address;  
  42.     }  
  43.     public void setAddress(String address) {  
  44.         this.address = address;  
  45.     }  
  46.     public String getTel() {  
  47.         return tel;  
  48.     }  
  49.     public void setTel(String tel) {  
  50.         this.tel = tel;  
  51.     }  
  52. }  
复制代码
第二、PersonService模拟业务逻辑循环生成100023个Person对象

模拟业务逻辑代码
  1. package service;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import bean.Person;  
  7. /**  
  8. *   
  9. * @author QQ:三二8二4七6七六  
  10. *  
  11. */  
  12. public class PersonService {  
  13.     public static List getPerson(){  
  14.         List<Person> list =new ArrayList<Person>();  
  15.         for(int i=0;i<100320;i++){  
  16.             list.add(new Person(i,"zhangsan"+i,"北京"+i,"13214587632",123123.12+i));   
  17.         }  
  18.         return list;  
  19.     }  
  20.   
  21. }  
复制代码
第三、业务处理Servlet

操作servlet代码
  1. package servlet;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.IOException;  
  7. import java.io.OutputStream;  
  8. import java.text.SimpleDateFormat;  
  9. import java.util.ArrayList;  
  10. import java.util.Date;  
  11. import java.util.List;  
  12.   
  13. import javax.servlet.ServletException;  
  14. import javax.servlet.http.HttpServlet;  
  15. import javax.servlet.http.HttpServletRequest;  
  16. import javax.servlet.http.HttpServletResponse;  
  17.   
  18. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  19. import org.apache.poi.hssf.util.CellRangeAddress;  
  20. import org.apache.poi.ss.usermodel.Cell;  
  21. import org.apache.poi.ss.usermodel.CellStyle;  
  22. import org.apache.poi.ss.usermodel.Row;  
  23. import org.apache.poi.ss.usermodel.Sheet;  
  24. import org.apache.poi.ss.usermodel.Workbook;  
  25.   
  26. import bean.Person;  
  27.   
  28. import service.PersonService;  
  29.   
  30. /**  
  31. *   
  32. * @author QQ:三二8二4七6七六  
  33. *   
  34. */  
  35. public class PersonServlet extends HttpServlet {  
  36.     private String fileName;  
  37.   
  38.     public PersonServlet() {  
  39.         super();  
  40.     }  
  41.   
  42.     public void destroy() {  
  43.         super.destroy(); // Just puts "destroy" string in log  
  44.         // Put your code here  
  45.     }  
  46.   
  47.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  48.             throws ServletException, IOException {  
  49.         // 文件名获取  
  50.         Date date = new Date();  
  51.         SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");  
  52.         String f = "Person-" + format.format(date);  
  53.         this.fileName = f;  
  54.         setResponseHeader(response);  
  55.         OutputStream out = null;  
  56.         try {  
  57.             out = response.getOutputStream();  
  58.             List<Person> list = PersonService.getPerson();  
  59.             toExcel(list,request,10000,f,out);  
  60.         } catch (IOException e1) {  
  61.             e1.printStackTrace();  
  62.         } finally {  
  63.             try {  
  64.                 out.flush();  
  65.                 out.close();  
  66.             } catch (IOException e) {  
  67.                 e.printStackTrace();  
  68.             }  
  69.         }  
  70.     }  
  71.   
  72.     /** 设置响应头 */  
  73.     public void setResponseHeader(HttpServletResponse response) {  
  74.         try {  
  75.             response.setContentType("application/octet-stream;charset=UTF-8");  
  76.             response.setHeader("Content-Disposition", "attachment;filename="  
  77.                     + java.net.URLEncoder.encode(this.fileName, "UTF-8")  
  78.                     + ".zip");  
  79.             response.addHeader("Pargam", "no-cache");  
  80.             response.addHeader("Cache-Control", "no-cache");  
  81.         } catch (Exception ex) {  
  82.             ex.printStackTrace();  
  83.         }  
  84.     }  
  85.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  86.             throws ServletException, IOException {  
  87.   
  88.         doGet(request, response);  
  89.     }  
  90.     public void init() throws ServletException {  
  91.         // Put your code here  
  92.     }  
  93.   
  94.     public void toExcel(List<Person> list, HttpServletRequest request,  
  95.             int length, String f, OutputStream out) throws IOException {  
  96.         List<String> fileNames = new ArrayList();// 用于存放生成的文件名称s  
  97.         File zip = new File(request.getRealPath("/files") + "/" + f + ".zip");// 压缩文件  
  98.         // 生成excel  
  99.         for (int j = 0, n = list.size() / length + 1; j < n; j++) {  
  100.             Workbook book = new HSSFWorkbook();  
  101.             Sheet sheet = book.createSheet("person");  
  102.   
  103.             double d = 0;// 用来统计  
  104.             String file = request.getRealPath("/files") + "/" + f + "-" + j  
  105.                     + ".xls";  
  106.   
  107.             fileNames.add(file);  
  108.             FileOutputStream o = null;  
  109.             try {  
  110.                 o = new FileOutputStream(file);  
  111.   
  112.                 // sheet.addMergedRegion(new  
  113.                 // CellRangeAddress(list.size()+1,0,list.size()+5,6));  
  114.                 Row row = sheet.createRow(0);  
  115.                 row.createCell(0).setCellValue("ID");  
  116.                 row.createCell(1).setCellValue("NAME");  
  117.                 row.createCell(2).setCellValue("ADDRESS");  
  118.                 row.createCell(3).setCellValue("TEL");  
  119.                 row.createCell(4).setCellValue("Money");  
  120.   
  121.                 int m = 1;  
  122.   
  123.                 for (int i = 1, min = (list.size() - j * length + 1) > (length + 1) ? (length + 1)  
  124.                         : (list.size() - j * length + 1); i < min; i++) {  
  125.                     m++;  
  126.                     Person user = list.get(length * (j) + i - 1);  
  127.                     Double dd = user.getMoney();  
  128.                     if (dd == null) {  
  129.                         dd = 0.0;  
  130.                     }  
  131.                     d += dd;  
  132.                     row = sheet.createRow(i);  
  133.                     row.createCell(0).setCellValue(user.getId());  
  134.                     row.createCell(1).setCellValue(user.getName());  
  135.                     row.createCell(2).setCellValue(user.getAddress());  
  136.                     row.createCell(3).setCellValue(user.getTel());  
  137.                     row.createCell(4).setCellValue(dd);  
  138.   
  139.                 }  
  140.                 CellStyle cellStyle2 = book.createCellStyle();  
  141.                 cellStyle2.setAlignment(CellStyle.ALIGN_CENTER);  
  142.                 row = sheet.createRow(m);  
  143.                 Cell cell0 = row.createCell(0);  
  144.                 cell0.setCellValue("Total");  
  145.                 cell0.setCellStyle(cellStyle2);  
  146.                 Cell cell4 = row.createCell(4);  
  147.                 cell4.setCellValue(d);  
  148.                 cell4.setCellStyle(cellStyle2);  
  149.                 sheet.addMergedRegion(new CellRangeAddress(m, m, 0, 3));  
  150.             } catch (Exception e) {  
  151.                 e.printStackTrace();  
  152.             }  
  153.             try {  
  154.                 book.write(o);  
  155.             } catch (Exception ex) {  
  156.                 ex.printStackTrace();  
  157.             } finally {  
  158.                 o.flush();  
  159.                 o.close();  
  160.             }  
  161.         }  
  162.         File srcfile[] = new File[fileNames.size()];  
  163.         for (int i = 0, n = fileNames.size(); i < n; i++) {  
  164.             srcfile[i] = new File(fileNames.get(i));  
  165.         }  
  166.         util.FileZip.ZipFiles(srcfile, zip);  
  167.         FileInputStream inStream = new FileInputStream(zip);  
  168.         byte[] buf = new byte[4096];  
  169.         int readLength;  
  170.         while (((readLength = inStream.read(buf)) != -1)) {  
  171.             out.write(buf, 0, readLength);  
  172.         }  
  173.         inStream.close();  
  174.     }  
  175. }  
  176. 最后还有个工具类package util;
  177. 压缩工具类代码  
  178. import java.io.FileInputStream;  
  179. import java.io.FileOutputStream;  
  180. import java.io.IOException;  
  181. import java.util.zip.ZipEntry;  
  182. import java.util.zip.ZipOutputStream;  
  183. /**  
  184. *   
  185. * @author QQ:三二8二4七6七六  
  186. *  
  187. */  
  188. public class FileZip {  
  189.     /**  
  190.      *   
  191.      * @param srcfile 文件名数组  
  192.      * @param zipfile 压缩后文件  
  193.      */  
  194.     public static void ZipFiles(java.io.File[] srcfile, java.io.File zipfile) {  
  195.         byte[] buf = new byte[1024];  
  196.         try {  
  197.             ZipOutputStream out = new ZipOutputStream(new FileOutputStream(  
  198.                     zipfile));  
  199.             for (int i = 0; i < srcfile.length; i++) {  
  200.                 FileInputStream in = new FileInputStream(srcfile[i]);  
  201.                 out.putNextEntry(new ZipEntry(srcfile[i].getName()));  
  202.                 int len;  
  203.                 while ((len = in.read(buf)) > 0) {  
  204.                     out.write(buf, 0, len);  
  205.                 }  
  206.                 out.closeEntry();  
  207.                 in.close();  
  208.             }  
  209.             out.close();  
  210.         } catch (IOException e) {  
  211.             e.printStackTrace();  
  212.         }  
  213.     }  
  214. }  

2019-07-03 16:36:03 weixin_42118284 阅读数 1118
  • 车牌识别停车场管理系统(附SSM项目源代码)

          掌握基于腾讯人工智能(AI)的车牌识别技术,使用车牌识别技术实现一个完整的停车场管理系统,项目包括网页调用摄像头拍照,车牌拍照识别,上传车牌图片识别,用户管理,车辆管理(临时车与包月车),车辆出场,入场管理,停车费收费管理,按照临时车或包月车自动计算停车费,系统参数设置,修改用户密码及安全退出等功能,该系统采用Jsp技术,使用SSM框架,Mysql数据库,ajax技术及人工智能等相关技术实现。 项目开发技术:java,jsp,mysql,MyBatis,SpringMVC,jquery,ajax,json 项目运行环境:jdk1.7及以上版本,tomcat6.0及以上版本,mysql5.5及以上版本项目开发工具: 本项目开发工具是Eclipse,也支持myEclipse,Intellij Idea等其他版本开发工具 相关课程学习顺序 本校课程是培养JAVA软件工程师及JSP WEB网络应用程序开发,android工程师的全套课程,课程学习顺序如下:JAVA初级工程师:     1、计算机基础     2、HTML语言基础     3、C语言从入门到精通+贪吃蛇游戏     4、贪吃蛇游戏     5、SQL SERVER数据库基础     6、JAVA从入门到精通+推箱子游戏+QQ即时通讯软件     7、推箱子游戏;     8、仿QQ即时通讯软件;JAVA中级工程师:     9、SQLSERVER数据库高级     10、SQLSERVER从入门到精通(基础+高级)               11、JavaScript从入门到精通,     12、JSP从入门到精通+点餐系统,     13、JSP从入门到精通+在线视频学习教育平台,     14、JSP从入门到精通+大型电商平台;     15、XML从入门到精通,     16、数据结构(JAVA版),JAVA高级工程师:     17、Oracle数据库从入门到精通,     18、ajax+jquery从入门到精通,     19、EasyUI从入门到精通,SSH框架:     20、Struts2从入门到精通课程,     21、Hibernate从入门到精通课程,     22、Spring从入门到精通课程;     23、Echarts从入门到精通,     24、Excel基于POI的导入导出工作流框架:     25、Activiti流程框架从入门到精通     26、JBPM流程框架从入门到精通SSM框架:     27、MyBatis从入门到精通     28、Spring MVC从入门到精通面试题:     29、职业生涯规划及面试题集锦商业项目:     30、微信公众号在线支付系统     31、微信生活缴费在线支付系统     32、支付宝生活缴费在线支付系统     33、在线考试系统     34、手机订餐管理系统,     35、CRM客户关系管理系统     36、大型房地产CRM销售管理系统     37、CMPP2,CMPP3移动网关系统人工智能:     38、人脸识别在线考试系统     39、人脸识别系统项目实战     40、车牌识别系统项目实战     41、身份证识别系统项目实战     42、营业执照识别系统项目实战           43、名片识别管理系统

    1022 人正在学习 去看看 赖国荣

分享POI导出excel(含表头,冰冻,动态列,动态数据)
首先导入 POI :

		<!-- excel -->
	    <dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi</artifactId>
		    <version>3.17</version>
		</dependency>
		
		<!-- word -->
		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi-scratchpad</artifactId>
		    <version>3.17</version>
		</dependency>
		
		<!-- xlsx -->
		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi-ooxml</artifactId>
		    <version>3.17</version>
		</dependency>
		<!-- xlsx  依赖这个包 -->
		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi-ooxml-schemas</artifactId>
		    <version>3.17</version>
		</dependency>

导出的方法:

//导出数据
	@SuppressWarnings("deprecation")
	public Map<String, Object> exportRecordTask(HttpServletResponse response, Map<String, Object> param) {
		Map<String, Object> mp = new ConcurrentHashMap<>(10000000);
		
		//这里默认是从前台传过来的,自定义列
		/*@SuppressWarnings("unchecked")
		List<String> headers = (List<String>) param.get("headers");
		if( param.get("headers") == null){
			mp.put("msg", 1017);
			return mp;
		}*/
		
		@SuppressWarnings("resource")
		HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("导出数据");
        sheet.setDefaultColumnWidth(30);//默认列宽
        /*sheet.setColumnWidth(1, 30*256);//设置第几个列宽
        sheet.setColumnWidth(5, 30*256);
        sheet.setColumnWidth(8, 50*256);
        sheet.setColumnWidth(9, 50*256);
        sheet.setColumnWidth(14, 100*256);*/
        //sheet.protectSheet("123456");//设置密码
        HSSFCellStyle style = workbook.createCellStyle();
        style.setAlignment(HorizontalAlignment.CENTER);    
        style.setVerticalAlignment(VerticalAlignment.CENTER);
        style.setWrapText(true);
        style.setFillForegroundColor((short)43);
        style.setFillForegroundColor(HSSFColor.YELLOW.index);
        style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
        style.setBorderBottom(BorderStyle.THIN);
        style.setBorderLeft(BorderStyle.THIN);
        style.setBorderTop(BorderStyle.THIN);
        style.setBorderRight(BorderStyle.THIN);
        style.setLocked(true); 
        
        HSSFFont font = workbook.createFont();
        font.setFontHeightInPoints((short) 16);
        font.setColor(HSSFColor.RED.index);
        font.setFontName("宋体");
        font.setBold(true);

        HSSFFont font2 = workbook.createFont();
        font2.setFontHeightInPoints((short) 12);
        font2.setFontName("宋体");

        style.setFont(font);
        
        List<你的实体类> list = null;//这里是查出来的动态数据,需要跟你的列名对应
		//获取数据长度,获取列长度
        int listSize = list.size(), headSize = headers.size();
        
        //sheet.createFreezePane(headSize, 1);//设置冰冻列
        sheet.createFreezePane( 0, 1, 0, 1 );//设置冰冻列
        //导出excel名称,这里可以用UUID
        String fileName = "excel.xls";

        String[] headers = { "列1", "列2", "列3"};

        HSSFRow row = sheet.createRow(0);//设置第一行
        row.setHeightInPoints(40);//默认行高
        
        //在表中存放查询到的数据放入对应的列
        for (int i = 0;i < listSize; i++) {
        	HSSFRow row1 = sheet.createRow(i+1);//这里之所以 i+1是避免加入数据将第一行表头给替换
            row1.setHeightInPoints(50);
            for(int j = 0;j < headSize;j++) {
        		HSSFCell cell = row.createCell(j);//遍历列
                HSSFRichTextString text = new HSSFRichTextString(headers.get(j));//获取列名
                cell.setCellValue(text);//加内容到列中
                cell.setCellStyle(style);//加上面定义的样式
        		row1.createCell(j).getCellStyle().setWrapText(true);//设置自动换行
            	row1.createCell(j).getCellStyle().setVerticalAlignment(VerticalAlignment.CENTER);//设置居中
            	row1.createCell(j).getCellStyle().setFont(font2);//设置样式
            	if("列1".equals(headers.get(j))) {
            		row1.createCell(j).setCellValue(list.get(i).get列1());
            	}else if("列2".equals(headers.get(j))) {
            		row1.createCell(j).setCellValue(list.get(i).get列2());
            	}else if("列3".equals(headers.get(j))) {
            		row1.createCell(j).setCellValue(list.get(i).get列3());
            	}
            }
            //row1.createCell(0).getCellStyle().setAlignment(HorizontalAlignment.CENTER);        
		}

        //response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        response.setContentType("application/octet-stream");//设置打印
        response.setHeader("Content-disposition", "attachment;filename=" + fileName);
        try {
			response.flushBuffer();
	        workbook.write(response.getOutputStream());//输出
	        response.getOutputStream().close();
	        mp.put("msg", 200);
		} catch (IOException e) {
			//mp.put("msg", 500);
		}
		return mp;//最后返回map ,方法可以直接 无返回类型
	}

冰冻的方法详解:

/ * *
*创建一个分割(freezepane)。任何现有的冷冻epane或拆分窗格都被覆盖。<p>
*
*如果colSplit和rowSplit都为零,则删除现有的冻结窗格
*
* @param colSplit的水平位置。
* @param rowSplit的垂直位置。
* @param Left tmostcolumn在右窗格中显示左列。
* @param topRow顶部行在底部窗格中可见
* /
    @Override
    public void createFreezePane(int colSplit, int rowSplit, int leftmostColumn, int topRow) {
        validateColumn(colSplit);
        validateRow(rowSplit);
        if (leftmostColumn < colSplit)
            throw new IllegalArgumentException("leftmostColumn parameter must not be less than colSplit parameter");
        if (topRow < rowSplit)
            throw new IllegalArgumentException("topRow parameter must not be less than leftmostColumn parameter");
        getSheet().createFreezePane(colSplit, rowSplit, topRow, leftmostColumn);
    }

sheet.createFreezePane( 0, 1, 0, 1 );//设置第一行冰冻
由于最近比较忙,所以就贴出了代码没有做详细的解释,后续更新
有问题可以在下面留言,每天在线

poi导出excel

阅读数 8

java poi导出Excel Demo

阅读数 145

没有更多推荐了,返回首页