java批量匯入匯出(poi)
一、批量匯入
1、匯入時我們接參時使用MultipartFile來接受excel檔案,用poi來讀取檔案內容
InputStream inputStream = MultipartFile.getInputStream();
Workbook wb = WorkbookFactory.create(inputStream);
2、獲取某個sheet
Sheet sheet = wb.getSheetAt(0);
3、 獲取sheet的行數
int rowlNum = sheet.getLastRowNum()
4、獲取sheet的第一行
Row row = sheet.getRow(e);
5、獲取某一行的的某一列(即是一個單元格)
Cell cell0 = row.getCell(0);
6、獲取某個單元格為字串
cell0.getRichStringCellValue()
7、 獲取某個單元格為數字型別
cell0.getNumericCellValue()
注:在匯入中要注意對檔案格式的判斷,對檔案大小的判斷,對單元格中文字型別的處理,當然要記得關流
二、批量匯出,既然是匯出我們用到輸出流,在控制層引數中加入HttpServletResponse,利用XLSTransformer物件將內容封裝為匯出檔案,
XLSTransformer transformer = new XLSTransformer();
//將讀取的內容放入map
Map<String, Object> beanParams = new HashMap<String, Object>();
beanParams.put("content", content);
//讀取模板檔案
Resource resource = new ClassPathResource("template/export_item_template.xlsx");
BufferedInputStream is = new BufferedInputStream(resource.getInputStream());
Workbook workbook = transformer.transformXLS(is, beanParams);
//當然要對sheet的單元格合併進行控制
Sheet sheetAt = workbook.getSheetAt(0);
CellRangeAddress cellRangeAddress = new CellRangeAddress(FirstRowNum, LastRowNum, 3, 3);
sheetAt.addMergedRegion(cellRangeAddress);(可以對匯出的內容遍歷[content]來計算你需要合併的所有單元格)
//當然最重要的一筆就是你的模板指令碼要正確(spu的集合中包含了sku集合,每一位sku中又包含了shopSupplyInfos集合,注意迴圈巢狀後一個屬性會列印多次,但是當你對單元格合併進行控制之後此問題可以解決[也正是你所需要的樣式])
:包版本級是比較落後的了
<!-- poi-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.11</version>
</dependency>
<dependency>
<groupId>net.sf.jxls</groupId>
<artifactId>jxls-core</artifactId>
<version>1.0.6</version>
</dependency>