Excelファイルのインポート


システムにデータをインポートする場合、Excel形式のデータインポートを使用することが多い.ここでdemoをあげます.
    1、まずフロントエンドインターフェース:
<form action="upload" enctype="multipart/form-data">

	<input type="file" name="myFile" />

	<input type="submit" value="Upload! " />
</form>

     これについては、2点に注意してください.1)enctypeプロパティの値はmultipart/form-dataです. 2)type属性の値はfile 上記formフォームのname="myFile"については、バックグラウンドでパラメータとしてname属性値が必要なため、MultipartFileオブジェクトを取得します.
 
    2、multipart要求処理ファイルのアップロード:
    Springは、サーブレットAPIのHttpServertRequestインタフェースを拡張することで、ファイルアップロードをよりよく処理できるようにしています.拡張されたインタフェース名は、org.springframework.web.multipart.M u l t i p artHttpServertRequest(インタフェースが提供する方法は、public MultipartFile getFile(String name);public MapgetFile();public Iterator getFileName();
    実際には、コントローラインスタンスにM u l t i p artHttpServeretRequestインタフェースを実装するrequsetオブジェクトが1つ発見された場合にのみ表示されます.
    MultipartFile  multipartFile = request.getFile("myFile").リクエストにファイルが見つからない場合はnullを返します.
     org.springframework.web.multipart.MultipartFileインタフェースには、次の方法があります.
        public byte[] getBytes();
        public String getContentType();//ファイルタイプの取得
        public java.io.InputStream getInputStream();ファイルをjava.io.InputStreamストリームオブジェクトとして読み込む
        public String getName();
        public String getOriginalFilename();
        public long getSize();//ファイル長の取得
        public boolean isEmpty();
        public void transferTo(java.io.File dest);//サーバが指定したファイルにアップロードファイルを書き込むために使用します. 
次のインスタンスコード:Excelファイルをストリーム情報に変換
	public static InputStream getInputStreamFromSingleFile(
			HttpServletRequest request) throws Exception {
		MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
		MultipartFile multipartFile = multipartHttpServletRequest
				.getFile("myFile");
		InputStream in = null;
		if (multipartFile != null && !multipartFile.isEmpty()) {
			String fileName = multipartFile.getOriginalFilename();
			if (POIExcelUtil.isValidFileName(fileName.trim())
					&& POIExcelUtil.isXlsFileName(fileName.trim())) {
				in = multipartFile.getInputStream();
			} else {
				throw new BusiException("     Excel    !");
			}
		} else {
			throw new BusiException("        !");
		}
		return in;
	}

	/**
	 *           
	 * 
	 * @param fileName
	 * @return
	 */
	public static boolean isValidFileName(String fileName) {
		if (fileName == null || fileName.length() > 255
				|| !fileName.contains("."))
			return false;
		else
			return fileName
					.matches("[^\\s\\\\/:\\*\\?\\\"<>\\|](\\x20|[^\\s\\\\/:\\*\\?\\\"<>\\|])*[^\\s\\\\/:\\*\\?\\\"<>\\|\\.]$");
	}

	/**
	 *        Excel  
	 * 
	 * @param fileName
	 * @return
	 */
	public static boolean isXlsFileName(String fileName) {
		return fileName.matches("^.+\\.(?i)((xls)|(xlsx))$");
	}

 
    3、ストリーム情報をオブジェクトに変換する
                        InputStream inputStream = POIExcelUtil.getInputStreamFromSingleFile(request);
			if (inputStream != null) {//     
				
				HSSFRow row = null;
				HSSFWorkbook wb = new HSSFWorkbook(inputStream);
				HSSFSheet sheet = wb.getSheetAt(0);
				
				int totalRows = sheet.getLastRowNum();
				if (totalRows < 1) {
					throw new BusiException("      !");
				}
				if (totalRows > 10000) {
					throw new BusiException("       10000 !");
				}
				
				List<People> list = new ArrayList<People>();
				
				People people = null;

				for (int r = 1; r <= totalRows; r++) {
					row = sheet.getRow(r);
					//        
					if (POIExcelUtil.isBlankLine(row))
						continue;
					
					String name = POIExcelUtil
							.getCellStringValue(row.getCell(0)).replaceAll(" ", "").replaceAll(" ", "");
					String sex = POIExcelUtil
							.getCellStringValue(row.getCell(1)).replaceAll(" ", "").replaceAll(" ", "");
					String qq = POIExcelUtil
							.getCellStringValue(row.getCell(2)).replaceAll(" ", "").replaceAll(" ", "");
					String phone1 = POIExcelUtil
							.getCellStringValue(row.getCell(3)).replaceAll(" ", "").replaceAll(" ", "");
					String mobile1 = POIExcelUtil
							.getCellStringValue(row.getCell(4)).replaceAll(" ", "").replaceAll(" ", "");
					String email = POIExcelUtil
							.getCellStringValue(row.getCell(5)).replaceAll(" ", "").replaceAll(" ", "");
					String depName = POIExcelUtil
							.getCellStringValue(row.getCell(6)).replaceAll(" ", "").replaceAll(" ", "");
					String posName = POIExcelUtil
							.getCellStringValue(row.getCell(7)).replaceAll(" ", "").replaceAll(" ", "");
					
					if (name != null && !name.equalsIgnoreCase("")
							&& sex != null && !sex.equalsIgnoreCase("")) {
						people = new People(name, "1",
								sex.equalsIgnoreCase(" ") ? true : false, qq,
										phone1, mobile1, email, depName, posName);
						people .setId(UUID.randomUUID().toString());
						list.add(people );
					}
				}



	/**
	 *       
	 * 
	 * @param row
	 * @return
	 */
	public static boolean isBlankLine(HSSFRow row) {
		if (row == null)
			return true;

		boolean isBlankLine = true;
		for (int j = 0; j < row.getLastCellNum(); j++) {
			if (row.getCell(j) != null
					&& !"".equals(row.getCell(j).getRichStringCellValue())) {
				isBlankLine = false;
				break;
			}
		}
		return isBlankLine;
	}

 
 
 

 

    4、 。