1. ホーム
  2. java

ajaxでエクセルをアップロードする

2022-02-16 23:21:20

htmlを使用します。

<li>
         <span>on&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pass:</span>
         <span class="input">
   <input type="file" id="upfile" name="upfile" placeholder=""/>
</span>
         <button onclick="importExp();">import</button>
         <span> format: .xls</span>
     </li>

jsです。

//import file
function importExp() {
    var formData = new FormData();
    var name = $("#upfile").val();
    formData.append("file",$("#upfile")[0].files[0]);
    formData.append("name",name);
    $.ajax({
        url : '#springUrl('')/summary/importExp',
        type : 'POST',
        async : false,
        data : formData,
        // Tell jQuery not to process the sent data
        processData : false,
        // Tell jQuery not to set the Content-Type request header
        contentType : false,
        beforeSend:function(){
            console.log("In progress, please wait");
        },
        success : function(responseStr) {
            if(responseStr=="01"){
                alert("Imported successfully");
            }else{
                alert("Import failed");
            }
        }
    });
}

コントローラを使用します。

@RequestMapping("/importExp")
    レスポンスボディ
    public String importExp(@RequestParam("file") MultipartFile file, HttpServletRequest request){... <未定義
        // ファイルが空かどうか判断する
        String flag = "02";// アップロードフラグ
        if (!file.isEmpty()) { <未定義
            トライ { <未定義
                String originalFilename = file.getOriginalFilename();//元のファイル名
                InputStream is = file.getInputStream();//入力ストリームの取得
                flag = summaryExpServiceImpl.writeExelData(is);//summaryExpServiceImpl これはサービスです、springを使ってこのようなサービスに注入してください。
                // ファイルをダンプする
                // file.transferTo(new File(filePath))を実行します。
            } catch (Exception e) { <未定義
                flag="03";//アップロードエラー
                e.printStackTrace()を実行します。
            }
        }
        フラグを返します。
    }

サービスを提供します。

/**
 * Write to
 * @param is
 */
public String writeExelData(InputStream is){
    List<List<String>> list = readExcelContent(is);
    for (int i=0,j=list.size();i<j;i++){
        List<String> row = list.get(i);
        ExpInfoSummary expInfoSummary = new ExpInfoSummary();
        expInfoSummary.setOrgName(row.get(0));
        expInfoSummary.setSiteName(row.get(1));
        expInfoSummary.setProductCode(row.get(2));
        expInfoSummary.setProductName(row.get(3));
        expInfoSummary.setProductNum(row.get(4));
        expInfoSummary.setProductPrice(Double.valueOf(row.get(5)));
        expInfoSummary.setProductState(row.get(6));
        pool.getSqlSession("psEpfSqlSession").selectList("com.test.ps.data.epf.mapper.expInfoSummary.insertExp", expInfoSummary);
    }
    return "01";
}

/**
 * Read the contents of Excel data
 * @param is
 * @return Map Map object containing the contents of the cell data
 */
public List<List<String>> readExcelContent(InputStream is) {
    List<List<String>> content = new ArrayList<List<String>>();
    POIFSFileSystem fs;
    HSSFWorkbook wb;
    HSSFSheet sheet;
    HSSFRow row;
    String str = "";
    try {
        fs = new POIFSFileSystem(is);
        wb = new HSSFWorkbook(fs);
        sheet = wb.getSheetAt(0);
        // Get the total number of rows
        int rowNum = sheet.getLastRowNum();
        row = sheet.getRow(0);
        int colNum = row.getPhysicalNumberOfCells();
        // The text should start from the second row, the first row is the title of the table header
        for (int i = 1; i <= rowNum; i++) {
            row = sheet.getRow(i);
            int j = 0;
            List<String> list = new ArrayList<String>();
            while (j < colNum) {
                // The data content of each cell is split with "-", later when needed, use the String class's replace() method to restore the data
                // You can also set the data of each cell to a javabean property, which requires a new javabean
                // str += getStringCellValue(row.getCell((short) j)).trim() +
                // "-";
                str = getCellFormatValue(row.getCell((short) j)).trim();
                list.add(str);
                j++;
            }
            content.add(list);
            str = "";
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return content;
}

/**
 * Set the data according to the HSSFCell type
 * @param cell
 * @return
 */
private String getCellFormatValue(HSSFCell cell) {
    String cellvalue = "";
    if (cell ! = null) {
        // Determine the type of the current Cell
        switch (cell.getCellType()) {
            // If the Type of the current Cell is NUMERIC
            case HSSFCell.CELL_TYPE_NUMERIC:
            case HSSFCell.CELL_TYPE_FORMULA: {
                // Determine if the current cell is a Date
                if (HSSFDateUtil.isCellDateFormatted(cell)) {
                    // If it's a Date, convert it to Data format

                    // Method 1: The data format is with hours, minutes and seconds: 2011-10-12 0:00:00
                    // cellvalue = cell.getDateCellValue().toLocaleString();

                    // method 2: this way the data format is not with the hour, minute and second: 2011-10-12
                    Date date = cell.getDateCellValue();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    cellvalue = sdf.format(date);

                }
                // If it is a pure number
                else {
                    // get the value of the current Cell
                    cellvalue = String.valueOf(cell.getNumericCellValue());
                }
                break;
            }
            // If the type of the current Cell is STRIN
            case HSSFCell.CELL_TYPE_STRING:
                // Get the current Cell string