java spring mvc jsp excel 匯入

airland發表於2021-09-09

pom檔案新增

<!-- poi jar 解析excel --&gt
org.apache.poipoi-ooxml3.12commons-fileupload
    artifactId>commons-fileupload

spring配置

    <!-- 檔案上傳表單的檢視解析器 --&gt
    

jsp頁面程式碼


......
<!-- excel上傳 --&gt

js程式碼

$(".addExcelBtn").unbind('click');
    $(".addExcelBtn").click(function() {
        $(".import").unbind('click');
        $(".import").click(function() {
            $('input[type="file"][name="uploadFile"]').click();
        });

        $('input[type="file"]').unbind("change");
        $('input[type="file"]').change(function () {
            uploadFile();
            $('input[type="file"][name="uploadFile"]').val("");
        });
    });

function uploadFile() {
    var fileName = $('input[type="file"][name="uploadFile"]').val();
    if (fileName === '') {
        frameModal.hitModal("請選擇檔案");
        return;
    }
    var fileType = (fileName.substring(fileName
            .lastIndexOf(".") + 1, fileName.length))
            .toLowerCase();
    if (fileType !== 'xls' && fileType !== 'xlsx') {
        frameModal.hitModal("檔案格式不正確,excel檔案!");
        return;
    }

    $(".fileForm").ajaxSubmit({
        dataType : "json",
        data: {'1': 1},
        type: "POST",
        url: 'url',
        success : function(data, textStatus) {
            console.log(data);
        },
        error: function () {
            frameModal.hitModal('操作失敗');
        }
    });
};

controller程式碼

@RequestMapping(value = "/uploadExcel.action", method = RequestMethod.POST)
    @ResponseBody
    public ResponseVo uploadExcel(HttpServletRequest request) {
        // 建立一個通用的多部分解析器
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
                request.getSession().getServletContext());
        // 判斷 request 是否有檔案上傳,即多部分請求
        if (multipartResolver.isMultipart(request)) {
            // 轉換成多部分request
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
            MultipartFile file = multiRequest.getFile("uploadFile");
            try {
                //excelUtil工具類
                List res = ExcelUtil.readExcel(file);
                if (res != null && res.size() > 0) {
                    //存庫或者其他處理邏輯
                }
            } catch (IOException e) {

            }
        }

        return null;
    }

excelUtil工具類

import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.InputStream;  
import java.text.DecimalFormat;
import java.util.ArrayList;  
import java.util.List;  

import org.apache.log4j.Logger;  
import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
import org.apache.poi.ss.usermodel.Cell;  
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.usermodel.XSSFWorkbook;  
import org.springframework.web.multipart.MultipartFile; 

/** 
* @ClassName: ExcelUtil 
* @Description: Excel匯入匯出工具類
*/
public class ExcelUtil {

    private static Logger logger  = Logger.getLogger(ExcelUtil.class);  
    private final static String xls = "xls";  
    private final static String xlsx = "xlsx";  

    /** 
     * 讀入excel檔案,解析後返回 
     * @param file 
     * @throws IOException  
     */  
    public static List readExcel(MultipartFile file) throws IOException{  
        //檢查檔案  
        checkFile(file);  
        //獲得Workbook工作薄物件  
        Workbook workbook = getWorkBook(file);  
        //建立返回物件,把每行中的值作為一個陣列,所有行作為一個集合返回  
        List list = new ArrayList();  
        if(workbook != null){  
            for(int sheetNum = 0;sheetNum 

注意:
1.excel中如果有長數字如果在getCellValue時不把型別轉換為字串型別,可能會導致數字損失精度
2.工具類原方法中解析excel是根據每行中的列數去獲取,修改了工具類,如果列獲取不到數值,就返回空。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/964/viewspace-2807942/,如需轉載,請註明出處,否則將追究法律責任。

相關文章