angular实现excel导入

excel工具类(全)

package com.people2000.common.file;

import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.IndexedColors;

public class ExcelUtils {
 private String arr[]=null;
	/**
	 * @info 写出Excel标题
	 * @param fos
	 * @return
	 */
	@SuppressWarnings("resource")
	public static void writeExcelTitle(String filePath, String[] ss)
			throws IOException {
		OutputStream fos = new FileOutputStream(filePath);
		HSSFWorkbook xls = new HSSFWorkbook();
		HSSFSheet sheet = xls.createSheet();
		HSSFRow row = sheet.createRow(0);// 第一行
		CellStyle style = setHeadStyleColor(xls);
	       
		for (int i = 0; i < ss.length; i++) {
			row.createCell(i).setCellValue(ss[i]);
			row.getCell(i).setCellStyle(style);
			
		}
		xls.write(fos);
		fos.close();
	}

	/**
	 * @info 写出Excel标题内容
	 * @param fos
	 * @return
	 */
	@SuppressWarnings("resource")
	public static byte[] writeExcel(String[] titles,
			List> lists) throws IOException {
		HSSFWorkbook xls = new HSSFWorkbook();
		HSSFSheet sheet = xls.createSheet();
		HSSFRow row = sheet.createRow(0);// 第一行

		CellStyle style = setHeadStyleColor(xls);
	       
		for (int i = 0; i < titles.length; i++) {
			row.createCell(i).setCellValue(titles[i]);
			row.getCell(i).setCellStyle(style);
			
		}
		// 内容
		int rowNum = 1;
		for (Map map : lists) {
			HSSFRow rowTmp = sheet.createRow(rowNum);
			int cols = map.size();
			for (int i = 0; i < cols; i++) {
				rowTmp.createCell(i).setCellValue(map.get(i));
			}
			rowNum++;
		}
		ByteArrayOutputStream fos = new ByteArrayOutputStream();
		xls.write(fos);
		byte[] buf = fos.toByteArray();// 获取内存缓冲区中的数据
		fos.close();
		return buf;
	}

	/**
	 * @info 写出Excel标题内容
	 * @param fos
	 * @return
	 */
	@SuppressWarnings("resource")
	public static void writeExcel(String filePath, String[] titles,
			List> lists) throws IOException {
		OutputStream fos = new FileOutputStream(filePath);
		HSSFWorkbook xls = new HSSFWorkbook();
		HSSFSheet sheet = xls.createSheet();
		HSSFRow row = sheet.createRow(0);// 第一行
		CellStyle style = setHeadStyleColor(xls);
       
		for (int i = 0; i < titles.length; i++) {
			row.createCell(i).setCellValue(titles[i]);
			row.getCell(i).setCellStyle(style);
			
		}
		// 内容
		int rowNum = 1;
		for (Map map : lists) {
			HSSFRow rowTmp = sheet.createRow(rowNum);
			int cols = map.size();
			for (int i = 0; i < cols; i++) {
				rowTmp.createCell(i).setCellValue(map.get(i));
			}
			rowNum++;
		}
		xls.write(fos);
		fos.close();
	}
	/**设置表头背景颜色
	 * 
	 * @param arr
	 */
     @SuppressWarnings("deprecation")
	public static CellStyle setHeadStyleColor(HSSFWorkbook xls){
    	// 创建表头style
		  HSSFCellStyle cellStyleTitle = xls.createCellStyle();
		  cellStyleTitle.setBorderBottom(CellStyle.BORDER_THIN); // 下边框
		  cellStyleTitle.setBorderLeft(CellStyle.BORDER_THIN);// 左边框
		  cellStyleTitle.setBorderTop(CellStyle.BORDER_THIN);// 上边框
		  cellStyleTitle.setBorderRight(CellStyle.BORDER_THIN);// 右边框
		  cellStyleTitle.setVerticalAlignment(CellStyle.ALIGN_LEFT);
		  cellStyleTitle.setWrapText(true);
		  //颜色
		  CellStyle style = xls.createCellStyle();
		  style.setFillForegroundColor(IndexedColors.AQUA.getIndex());
		  style.setFillPattern(CellStyle.SOLID_FOREGROUND);// 填充单元格
		  cellStyleTitle.setFillBackgroundColor(HSSFColor.LIGHT_YELLOW.index);
		  cellStyleTitle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// //居中显示
		  return style;
		   
     }
	/**
	 * @info 读取Excel内容,List行,MAP行数据
	 * @param filePath
	 * @return
	 */
	@SuppressWarnings("resource")
	public static List> readExcelKeyMap(String filePath)
			throws IOException {
		List> contents = new LinkedList>();
		InputStream is = new FileInputStream(filePath);
		POIFSFileSystem fs = new POIFSFileSystem(is);
		HSSFWorkbook wb = new HSSFWorkbook(fs);
		HSSFSheet sheet = wb.getSheetAt(0);
		// 得到总行数
		int rowNum = sheet.getLastRowNum();

		HSSFRow row = sheet.getRow(0);// 第一行
		// 总列数
		int colNum = row.getPhysicalNumberOfCells();

		// 正文内容应该从第二行开始,第一行为表头的标题
		String[] keys = readExcelTitle(filePath);
		for (int i = 1; i <= rowNum; i++) {
			row = sheet.getRow(i);
			int j = 0;
			Map content = new HashMap();
			while (j < colNum) {
				String cellValue = getCellFormatValue(row.getCell(j)).trim();

				content.put(keys[j], cellValue);
				j++;
			}
			contents.add(content);
		}
		is.close();
		return contents;
	}

	@SuppressWarnings("resource")
	public static List> readExcelKeyMap(InputStream is)
			throws IOException {
		List> contents = new LinkedList>();
		POIFSFileSystem fs = new POIFSFileSystem(is);
		HSSFWorkbook wb = new HSSFWorkbook(fs);
		HSSFSheet sheet = wb.getSheetAt(0);
		// 得到总行数
		int rowNum = sheet.getLastRowNum();

		HSSFRow row = sheet.getRow(0);// 第一行
		// 总列数
		int colNum = row.getPhysicalNumberOfCells();

		// 正文内容应该从第二行开始,第一行为表头的标题
		// 标题总列数
		String[] keys = new String[colNum];
		for (int i = 0; i < colNum; i++) {
			keys[i] = getCellFormatValue(row.getCell(i));
		}
		for (int i = 1; i <= rowNum; i++) {
			row = sheet.getRow(i);
			int j = 0;
			Map content = new HashMap();
			while (j < colNum) {
				String cellValue = getCellFormatValue(row.getCell(j)).trim();

				content.put(keys[j], cellValue);
				j++;
			}
			contents.add(content);
		}
		is.close();
		return contents;
	}

	/**
	 * @info 读取Excel标题
	 * @param is
	 * @return
	 */
	@SuppressWarnings("resource")
	public static String[] readExcelTitle(String filePath) throws IOException {
		InputStream is = new FileInputStream(filePath);
		POIFSFileSystem fs = new POIFSFileSystem(is);
		HSSFWorkbook wb = new HSSFWorkbook(fs);
		HSSFSheet sheet = wb.getSheetAt(0);
		HSSFRow row = sheet.getRow(0);// 第一行
		// 标题总列数
		int colNum = row.getPhysicalNumberOfCells();
		String[] title = new String[colNum];
		for (int i = 0; i < colNum; i++) {
			title[i] = getCellFormatValue(row.getCell(i));
		}
		is.close();
		return title;
	}

	/**
	 * @info 读取Excel内容,List行,MAP行数据
	 * @param filePath
	 * @return
	 */
	@SuppressWarnings("resource")
	public static List> readExcelContent(String filePath)
			throws IOException {
		List> contents = new LinkedList>();
		InputStream is = new FileInputStream(filePath);
		POIFSFileSystem fs = new POIFSFileSystem(is);
		HSSFWorkbook wb = new HSSFWorkbook(fs);
		HSSFSheet sheet = wb.getSheetAt(0);
		// 得到总行数
		int rowNum = sheet.getLastRowNum();

		HSSFRow row = sheet.getRow(0);// 第一行
		// 总列数
		int colNum = row.getPhysicalNumberOfCells();

		// 正文内容应该从第二行开始,第一行为表头的标题

		for (int i = 1; i <= rowNum; i++) {
			row = sheet.getRow(i);
			int j = 0;
			Map content = new HashMap();
			while (j < colNum) {
				String cellValue = getCellFormatValue(row.getCell(j)).trim();
				content.put(j, cellValue);
				j++;
			}
			contents.add(content);
		}
		is.close();
		return contents;
	}

	/**
	 * @info 读取Excel值
	 * @param cell
	 * @return
	 */
	@SuppressWarnings("deprecation")
	static String getCellFormatValue(HSSFCell cell) {
		String cellvalue = "";

		if (cell != null) {
			switch (cell.getCellType()) {
			case HSSFCell.CELL_TYPE_NUMERIC: {
				BigDecimal b = new BigDecimal(cell.getNumericCellValue());
				cellvalue = b.toPlainString();
				break;
			}
			case HSSFCell.CELL_TYPE_FORMULA: {
				cell.setCellType(Cell.CELL_TYPE_STRING);
				cellvalue = cell.getStringCellValue();
				// System.out.println(cellvalue);
				break;
			}
			case HSSFCell.CELL_TYPE_STRING:
				cellvalue = cell.getRichStringCellValue().getString();
				// System.out.println(cellvalue);
				break;
			default:
				cellvalue = "";
			}
		} else {
			cellvalue = "";
		}
		return cellvalue;

	}

	/**
	 * @info 读取Excel值
	 * @param cell
	 * @return
	 */
	@SuppressWarnings("deprecation")
	static String getStringCellValue(HSSFCell cell) {
		String strCell = "";
		switch (cell.getCellType()) {
		case HSSFCell.CELL_TYPE_STRING:
			strCell = cell.getStringCellValue();
			break;
		case HSSFCell.CELL_TYPE_NUMERIC:
			strCell = String.valueOf(cell.getNumericCellValue());
			break;
		case HSSFCell.CELL_TYPE_BOOLEAN:
			strCell = String.valueOf(cell.getBooleanCellValue());
			break;
		case HSSFCell.CELL_TYPE_BLANK:
			strCell = "";
			break;
		default:
			strCell = "";
			break;
		}
		if (strCell.equals("") || strCell == null) {
			return "";
		}
		return strCell;
	}
}

html页面

js控制层

        'use strict';
app.controller("communityInfoListListCtrl", [
        '$scope',
        '$state',
        '$stateParams',
        '$http',
         'FileUploader',
        'platformUtil',
        'Dic',
        function($scope, $state, $stateParams, $http,FileUploader, platformUtil, Dic) {
            'use strict';   
var EXCELIN = "community/excelin.do";//导入
var LOADING_PIC_PATH = "image/loading.gif"; 
$scope.pictures = [];
 $scope.loadingPath = LOADING_PIC_PATH;
//导入文件文本框变化
			var fileBtn = $("input[type=file]");
			fileBtn.on("change", function() {
				var index = $(this).val().lastIndexOf("\\");
				var sFileName = $(this).val().substr((index + 1));
				$("#rightText").html(sFileName);
			});
			/*
			 * excel批量导入
			 * 
			 */
			 $scope.uploader = new FileUploader({
                 url: EXCELIN,
                 autoUpload:true,
                 removeAfterUpload:true,
               
             });
			
	          //添加文件之后
	          $scope.uploader.onAfterAddingFile = function(fileItem) {
	              // 格式仅限xls
				  if ("application/vnd.ms-excel" != fileItem._file.type) {
					  platformUtil.showAlert('提示', '格式不正确,只能上传.xls格式');
					  $scope.canUpload = 1;
					  return false;
				  }
				  // 不得大于500K
 				  if (fileItem._file.size > 512000) {
 					  platformUtil.showAlert('提示', '文件超出最大限制,最大限制为500KB');
 					  $scope.canUpload = 1;
 					  return false;
 				  }
	              $scope.pictures.push({
	            	  id:null,
		        	  url : LOADING_PIC_PATH,
		        	  isDeleted : 0
		          });
	          };
	          //加载当前条目完成回调
	          $scope.uploader.onCompleteItem = function(fileItem, response, status, headers) {
		          if(status==200){
		        	  //重新获取当前的列表
		        	  $scope.getData();
		        	  platformUtil.showAlert('提示', '导入成功');
		          }else{
		        	  platformUtil.showAlert('提示', '导入失败');
		          }
		        
	          };

java代码controller层

/**批量导入
	 * 
	 * @param community
	 * @return
	 */
	@SuppressWarnings("null")
	@RequestMapping(value="/excelin" , method = RequestMethod.POST)
	@ResponseBody
	private void excelin(HttpServletRequest req,HttpServletResponse res) {
		String savePath=req.getSession().getServletContext().getRealPath("WEB-INF/upload");
		File saveFileDir=new File(savePath);
		if(!saveFileDir.exists()){
			//创建临时目录
			saveFileDir.mkdirs();
		}
		//上传时生成临时文件保存目录
		String tmpPath=req.getSession().getServletContext().getRealPath("WEB-INF/tmp");
		File tmpFile=new File(tmpPath);
		if(!tmpFile.exists()){
			tmpFile.mkdirs();
		}

		//消息提示
		String message="";
		try{
			DiskFileItemFactory factory=new DiskFileItemFactory();
			factory.setSizeThreshold((1024*10));
			factory.setRepository(tmpFile);
			ServletFileUpload upload=new ServletFileUpload(factory);
			upload.setProgressListener(new ProgressListener() {

				//@Override
				public void update(long readedBytes, long totalBytes, int currentItem) {
					System.out.println("当前已处理:"+readedBytes+totalBytes+currentItem);
				}

			});
			upload.setHeaderEncoding("UTF-8");


			if(!ServletFileUpload.isMultipartContent(req)){
				return;
			}

			upload.setFileSizeMax(1024*1024*1);
			upload.setSizeMax(1024*1024*10);
			@SuppressWarnings("rawtypes")
			List items=upload.parseRequest(req);

			@SuppressWarnings("rawtypes")
			Iterator itr=items.iterator();
			while (itr.hasNext()){
				FileItem item= (FileItem)itr.next();
				if (item.isFormField()){
					String name=item.getFieldName();
					String value=item.getString("UTF-8");
					System.out.println(name+"="+value);


				}else {
					String fileName=item.getName();
					System.out.println("文件名:"+fileName);
					if(fileName==null&& fileName.trim().length()==0){
						continue;
					}
					fileName=fileName.substring(fileName.lastIndexOf("\\")+1);

					String fileExt=fileName.substring(fileName.lastIndexOf(".")+1).toLowerCase();

					System.out.println("上传的文件扩展名是:"+fileExt);
					if(!Ext_Nmae.contains(fileExt)){
						System.out.println("上传文件扩展是不允许的扩展名:"+fileExt);
						message=message+"文件:"+fileName+",上传文件的扩展名是不允许扩展名的:"+fileExt+"
"; break; } if(item.getSize()==0) continue; if(item.getSize()>1024 * 1024 * 1){ System.out.println("上传文件大小:"+item.getSize()); message=message+"文件:"+fileName+",上传文件大小超过限制:"+upload.getFileSizeMax()+"
"; } String saveFileName=makeFileName(fileName); InputStream is=item.getInputStream(); FileOutputStream out=new FileOutputStream(savePath+"\\"+saveFileName); byte buffer[] =new byte[2014]; int len=0; while ((len=is.read(buffer))>0){ out.write(buffer,0,len); } out.close(); is.close(); item.delete(); //开始往数据库中写入东西 path="savePath+"\\"+saveFileName"; String currentPathString=savePath+"\\"+saveFileName; communityWriteManager.writExcelData(currentPathString); message=message+"文件:"+fileName+",上传成功
"; } } }catch (FileSizeLimitExceededException e){ message=message+"上传文件大小超过限制
"; e.printStackTrace(); }catch (Exception e){ e.printStackTrace(); } } private String makeFileName(String fileName){ return UUID.randomUUID().toString().replaceAll("-","")+"_"+fileName;
	/*
	 * 开始往数据中写人excel表格数据 (non-Javadoc)
	 * 
	 * @see
	 * com.people2000.mzadmin.business.write.CommunityWriteManager#writExcelData
	 * ()
	 */
	@Override
	public void writExcelData(String path) throws IOException {
		List> readExcelKeyMap = ExcelUtils
				.readExcelKeyMap(path);
		int temp = -1;
		int beanNum=1;
		int paramNum=0;
		for (Map map : readExcelKeyMap) {
			Iterator> iterator = map.entrySet()
					.iterator(); // map.entrySet()得到的是set集合,可以使用迭代器遍历
			Community community=null;
			while (iterator.hasNext()) {
				Entry entry = iterator.next();
				// key值:副标题 value值:110
				// key值:活动编号 value值:110
				// key值:作者 value值:110
				// key值:微信连接 value值:110
				// key值:标题 value值:110
				temp =temp+1;
				System.out.println("key值:" + entry.getKey() + " value值:"
						+ entry.getValue());
				if (temp % 5 == 0) {
					 community = new Community();
					 beanNum=beanNum+1;
				}
					if (entry.getKey().equals("作者")) {
						community.setAuthor(entry.getValue());
					} else if (entry.getKey().equals("副标题")) {
						community.setSubtitle(entry.getValue());
					} else if (entry.getKey().equals("标题")) {
						community.setTitle(entry.getValue());
					} else if (entry.getKey().equals("微信连接")) {
						community.setWxLinkUrl(entry.getValue());
					}else{
						
					}
					paramNum=paramNum+1;//为5的倍数就是一列数据填充完成,更新数据库
				
				if((beanNum % 2 ==0)&¶mNum % 5 ==0){//默认第一次创建bean 此时为偶数
					communityMapper.insertSelective(community);
				}else if(beanNum % 2==1&¶mNum % 5 ==0){//再次创建此时为奇数
					communityMapper.insertSelective(community);
				}

				

			}
		}

	}



你可能感兴趣的:(java)