在Liferay中匯入Excel基本上跟在Java之中作法一樣;

首先在對應的Jsp頁內一定要有上傳excel檔案的選擇框,接下來就是後端的工作;

 

if ("xls".equals(mimeType) || "xlsx".equals(mimeType)) {

 

在此段程式碼之前是跟一搬從前端抓取上傳的檔案作法一樣,若上傳的檔案是xls檔時,就開始進行匯入的動作;

 

InputStream is = uploadRequest.getFileAsStream("file");
POIFSFileSystem poiFs = new POIFSFileSystem(is);
HSSFWorkbook workbook = new HSSFWorkbook(poiFs);

將POIFSFileSystem 物件放入workbook之中,HSSFWorkbook 就是主要用來讀取xls的api。

 

HSSFSheet sheet = workbook.getSheetAt(0);// 取得資料表,0就是第一張,1為第2資料表
int RowNum = 0;
RowNum = sheet.getLastRowNum(); // 取得行數
_log.info("------------------------RowNum:" + RowNum);

for (int i = 1; i <= sheet.getLastRowNum(); i++) { // 逐行讀取,因用通常第一行都是標頭,所以略過第一行標頭。

HSSFRow row = sheet.getRow(i);
HSSFCell cell = row.getCell(0);// 讀取該行第一個欄位。
if (cell == null || "".equals(cell.toString())) {
RowNum = RowNum - 1;
// 讀到最後一行沒資料時,總行數減去多出的那行。
}

}

 

String msg = ""; // 訊息
if (RowNum > 0) {
for (int i = 1; i <= RowNum; i++) {// 逐行讀取,略過第一行

HSSFRow row = sheet.getRow(i);

如果總行數超過1,就逐行讀取,此段程式碼之下可以宣告一些變數用來放xls的資料。

接著開始讀取每一格的資料,從第一格讀取直到最後一格;

for (int j = 0; j <= row.getLastCellNum(); j++) {
HSSFCell cell = row.getCell(j);
switch (j) {

case 0:
if (cell != null && !"".equals(cell)) {
employeeId = stringvalidator(cell);
} else {
msg += "第" + j + "欄位未填寫工號,請重新輸入。<br/>";
}
break;
case 1:
if (cell != null && !"".equals(cell)) {
volunteerNameFromCell = stringvalidator(cell);
} else {
msg += "第" + j + "欄位未填寫姓名,請重新輸入。<br/>";
}
break;

}

在這裡只貼兩欄做紀錄,使用switch迴圈,如果資料格內有值存在,就存入變數。

若沒有資料,就填入錯誤訊息。

接著就可以做資料比對的動作了

if (msg != null && !"".equals(msg)) { // 如果有錯誤的話就回傳錯誤訊息。
SessionErrors.add(httpResRequest, "importError", msg);
SessionErrors.add(request, "importError", msg);
PortletURL portletURL = PortletURLFactoryUtil
.create(request, (String) request
.getAttribute(WebKeys.PORTLET_ID),
themeDisplay.getPlid(),
PortletRequest.RENDER_PHASE);
String redirect = portletURL.toString();
sendRedirect(request, response, redirect);
return;

以上這段是如果有錯誤訊息,便會返回上傳頁顯示錯誤訊息,若沒錯誤接著就可以寫入資料了。

基本上匯入excel就是如此,主要還是在於匯入資料之後值的判斷比較重要。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 squall75726 的頭像
    squall75726

    菜鳥工程師的Liferay Portal學習筆記

    squall75726 發表在 痞客邦 留言(1) 人氣()