Java导出导入Excel方法
生活随笔
收集整理的這篇文章主要介紹了
Java导出导入Excel方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用Apach的PIO
通過網上查到Apach PIO提供了以下幾種方法:
HSSF - 讀寫XLS格式檔案(Excel2003)。
XSSF - 讀寫OOXML XLSX格式檔案(Excel2007+)。
HWPF - 讀寫Word-DOC97格式檔案。
XWPF - 讀寫Word-DOC2003格式檔案。
HSLF - 讀寫PowerPoint格式檔案。
HDGF - 讀visio格式檔案。
HPBF - 讀ublisher格式檔案。
HSMF - 讀Ooutlook格式檔案
先來看看xlsx格式的文檔導出導入(Excel2007+)
pom依賴導入阿里巴巴的easyexcel即可
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.7</version> </dependency>1、導入Excel
Controller代碼
@RequestMapping("uploadExcel") public String uploadExcel(MultipartFile file) {try {List<JSONObject> contentList = ExcelUtil.readExcelContent(file, 1, 0);return "ok";} catch (Exception e) {e.printStackTrace();return e.getMessage();} }工具類ExcelUtil
/*** 導入excel模塊* headerLineCount:標題的行數* sheetAt:讀取幾第個sheet(從0開始)*/ public static List<JSONObject> readExcelContent(MultipartFile file, Integer headerLineCount, Integer sheetAt) throws Exception {List<JSONObject> content = Lists.newArrayList();// 上傳文件名Workbook wb = ExcelUtil.getWb(file);if (wb == null) {throw new Exception("導入模板不合法,請排查!!");}Sheet sheet = wb.getSheetAt(sheetAt);// 得到總行數int rowNum = sheet.getLastRowNum();Row row;// 正文內容應該從第headerLine行開始for (int i = headerLineCount; i <= rowNum; i++) {row = sheet.getRow(i);JSONObject map = new JSONObject();boolean hasData = false;//得到第row行的列數int colNum = row.getPhysicalNumberOfCells();for (int j = 0; j < colNum; j++) {Cell cell = row.getCell(j);//下面兩行不可少,需要重新設置類型和值CellType cellType = cell.getCellTypeEnum();String val= ExcelUtil.getCellContent(cell);//日期默認是數字類型,判斷是否為數字類型if (cellType.equals(CellType.NUMERIC)) {cell.setCellType(CellType.NUMERIC);cell.setCellValue(Double.parseDouble(val));//判斷是否是日期類型if (DateUtil.isCellDateFormatted(cell)) {Date tempValue = cell.getDateCellValue();SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");val= simpleFormat.format(tempValue);} else {val= String.valueOf(cell.getNumericCellValue());}} else {cell.setCellType(CellType.STRING);val= cell.getStringCellValue();}if (StringUtils.isNotEmpty(val)) {hasData = true;}}if (hasData) {content.add(map);}}return content;}2、導出Excel
Controller
@RequestMapping("downloadExcel") public void downloadExcel(HttpServletResponse response) {try {String jsonStr="[" +" {" +" \"field1\":\"姓名\"," +" \"field2\":\"性別\"," +" \"field3\":\"年齡\"" +" }," +" {" +" \"name\":\"小明\"," +" \"sex\":\"男\"," +" \"age\":\"18\"" +" }," +" {" +" \"name\":\"小紅\"," +" \"sex\":\"女\"," +" \"age\":\"20\"" +" }" +"]";JSONArray dataArray = JSONArray.parseArray(jsonStr);List<List<String>> rowList = new ArrayList<>();for(int i=0;i<dataArray.size();i++){//字段名List<String> cellList = new ArrayList<>();JSONObject cellJSON=dataArray.getJSONObject(i);for (Map.Entry<String, Object> entry: cellJSON.entrySet()) {String val = entry.getValue()+"";cellList.add(val);}rowList.add(cellList);}ExcelUtil.exportExcel(response, rowList, "數據模板", "數據模板", 15);} catch (Exception e) {e.printStackTrace();} }工具類ExcelUtil
/*** Excel表格導出** @param response HttpServletResponse對象* @param excelData Excel表格的數據,封裝為List<List<String>>* @param sheetName sheet的名字* @param fileName 導出Excel的文件名* @param columnWidth Excel表格的寬度,建議為15* @throws IOException 拋IO異常*/ public static void exportExcel(HttpServletResponse response,List<List<String>> excelData,String sheetName,String fileName,int columnWidth) throws IOException {fileName+=".xlsx";//生成excelXSSFWorkbook workbook=manage(excelData,sheetName,columnWidth);//準備將Excel的輸出流通過response輸出到頁面下載//八進制輸出流response.setContentType("application/octet-stream");//設置導出Excel的名稱response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")+";"+"filename*=utf-8''"+URLEncoder.encode(fileName, "UTF-8"));//刷新緩沖response.flushBuffer();//workbook將Excel寫入到response的輸出流中,供頁面下載該Excel文件workbook.write(response.getOutputStream());//關閉workbookworkbook.close(); }/*** 根據輸入的信息生成excel* @param excelData* @param sheetName* @param columnWidth* @return*/ private static XSSFWorkbook manage(List<List<String>> excelData, String sheetName, int columnWidth){//聲明一個工作簿XSSFWorkbook workbook = new XSSFWorkbook();//生成一個表格,設置表格名稱XSSFSheet sheet = workbook.createSheet(sheetName);//設置表格列寬度sheet.setDefaultColumnWidth(columnWidth);//寫入List<List<String>>中的數據int rowIndex = 0;for (List<String> data : excelData) {//創建一個row行,然后自增1XSSFRow row = sheet.createRow(rowIndex++);//遍歷添加本行數據for (int i = 0; i < data.size(); i++) {//創建一個單元格XSSFCell cell = row.createCell(i);cell.setCellType(CellType.STRING);//創建一個內容對象XSSFRichTextString text = new XSSFRichTextString(data.get(i));//將內容對象的文字內容寫入到單元格中cell.setCellValue(text);}}return workbook; }總結
以上是生活随笔為你收集整理的Java导出导入Excel方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最新单片机毕业设计题目大全
- 下一篇: SwiftyJson 实现Json转模型