Excelファイルのインポート
6539 ワード
システムにデータをインポートする場合、Excel形式のデータインポートを使用することが多い.ここでdemoをあげます.
1、まずフロントエンドインターフェース:
これについては、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ファイルをストリーム情報に変換
3、ストリーム情報をオブジェクトに変換する
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、 。