JAVA 匯出EXCEL表格 POI
阿新 • • 發佈:2018-12-15
今天給大家帶來javaweb專案使用poi匯出excel的入門示例,適用於初次接觸的新手。匯出excel分兩步:1、生成一個excel放在工作目錄下,2、把它匯出到本地。
請讀者自行下載所需jar包,如圖:
然後將jar包引入
接下來放程式碼。程式碼看起來複雜,其實稍微一分析,so easy!!!
jsp頁面
//第一步,生成excel放在一個目錄裡
//給頁面上一個按鈕新增點選事件
$('#exportBtn').bind('click', function() {
$.ajax({
async : true,
cache : false ,
type : 'post',
dataType : 'json',
data : {},
//url需要自己修改
url : '${ctx}/convert/createExcel',
//第二步,把目錄裡的檔案匯出到本地
success : function(result) {
if($('#download').length > 0) {
//這裡的url也需要自己修改
$('#download').attr('src' , '${ctx}/convert/down?fileNm=' + result.fileNm);
} else {
$('body').append($('<iframe id="download" style="display : none" />'));
$('#download').attr('src', '${ctx}/convert/down?fileNm=' + result.fileNm);
}
}
});
});
java程式碼(生成excel):
@RequestMapping("/createExcel")
@ResponseBody
public Map<String, Object> createExcel() throws IOException {
//先來造點資料
//假設有3列,分別為編號、姓名、年齡
Map<String, Object> titles = new LinkedHashMap<String, Object>();
titles.put("id", "編號");
titles.put("name", "姓名");
titles.put("age", "年齡");
//自己編3行資料
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
Map<String, Object> map2 = new HashMap<String, Object>();
Map<String, Object> map3 = new HashMap<String, Object>();
map1.put("id", "001");
map1.put("name", "張三");
map1.put("age", "29");
list.add(map1);
map2.put("id", "002");
map2.put("name", "李四");
map2.put("age", "26");
list.add(map2);
map3.put("id", "003");
map3.put("name", "王五");
map3.put("age", "25");
list.add(map3);
//生成excel正式開始
//匯出excel最基本物件
HSSFWorkbook book = new HSSFWorkbook();
//sheet頁物件
HSSFSheet sheet = (HSSFSheet)book.createSheet("sheet頁名稱");
//單元格格式物件
HSSFCellStyle style = book.createCellStyle();
//設定一下上下左右的格式
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
int rowNum = 0;//行序號,從第0行開始
int colNum = 0;//列序號,從第0行開始
//行物件,代指某一行
Row row = sheet.createRow(rowNum);
//單元格物件
Cell cell = null;
for(String key : titles.keySet()) {
//建立一個單元格
cell = row.createCell(colNum);
//給單元格寫資料
cell.setCellValue(titles.get(key).toString());
//設定一下風格
cell.setCellStyle(style);
//設定行高
row.setHeightInPoints(20);
//換到下一個單元格(同一行的下一列)
colNum++;
}
//換行
rowNum++;
//回到第0列
colNum = 0;
//寫資料,同寫標題,同上
for(int i = 0;i < list.size();i++) {
Map<String, Object> data = list.get(i);
row = sheet.createRow(rowNum);
for(String key : titles.keySet()) {
cell = row.createCell(colNum);
cell.setCellValue(data.get(key).toString());
cell.setCellStyle(style);
row.setHeightInPoints(20);
//設定一下列寬
sheet.setColumnWidth(colNum, data.get(key).toString().getBytes().length * 2 * 256);
colNum++;
}
rowNum++;
colNum=0;
}
//生成檔案
Map<String, Object> result = new HashMap<String, Object>();
//注意轉義,或者用File.separator
//必須找一個web下的某一個路徑,不然報錯
String fileNm = "C:\\study\\eclipse\\workspace\\spring_poi\\WebContent\\1.xlsx";
result.put("fileNm", fileNm);
OutputStream out = new FileOutputStream(fileNm);
book.write(out);
return result;
}
java程式碼(下載excel):
//單純的檔案下載,讀者也可以自己寫一個
@RequestMapping("/down")
public void down(HttpServletResponse response, String fileNm) throws IOException {
File file = new File(fileNm);
String finalNm = "final.xlsx";
response.setContentType("text/html;charset=UTF-8");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
long fileLength = file.length();
response.setContentType("application/octet-stream");
response.setHeader("Content-disposition", "attachment; filename="
+ new String(finalNm.getBytes("gbk"), "ISO8859-1") );
response.setHeader("Content-Length", String.valueOf(fileLength));
bis = new BufferedInputStream(new FileInputStream(file));
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
bis.close();
bos.close();
}
然後是測試效果
(好土。。。)
點選“匯出”。。。
就可以下載excel了。
還是很土。。。