您好,登錄后才能下訂單哦!
如何用java創建Excel并導出?針對這個問題,今天小編總結這篇有關用java創建Excel并導出的文章,希望幫助更多想解決這個辦法同學找到更加簡單易行的辦法。
1、首先創建一個Excel也就是
//聲明工作薄
HSSFWorkbook wb = new HSSFWorkbook();
2、接下來未頁簽sheet重命名,也就是
//sheet頁簽部分
HSSFSheet sheet = wb.createSheet("頁簽的名字");
3、規劃一下有多少列,再起一個標題,也就是
//合并標題
sheet.addMergedRegion(new Region(0, (short)0, (short)0,(short)(規劃的列數)));
4、創建一個表頭,也就是
//創建表頭
row = sheet.createRow(1);
5、循環插入表格,也就是加一個for循環
//第一層為循環創建行
for (int i = 0; i < contentLst.size(); i++) {
row = sheet.createRow(i+2);
row.setHeight((short) 550);
//第二層創建每行的單元格,并填內容
for (int j = 0; j < contentLst.get(i).length; j++) {
cell = row.createCell(j);
cell.setCellValue(String.valueOf(contentLst.get(i)[j]));
cell.setCellStyle(shstyle);
}
}
6、內容填完了,你不覺得有的字多有的字少,也就是列寬、行高有問題。怎么辦呢?也就是
//創建標題
HSSFRow row = sheet.createRow(0);
//設置標題行高
row.setHeight((short) 行高數);
//自定義列寬部分,你將每個列寬作為參數傳過來具體每列多寬得自己測試了。
if(liekuanLst != null && liekuanLst.size() > 0){
for (int i = 0; i < liekuanLst.size(); i++) {
sheet.setColumnWidth((short)i, liekuanLst.get(i));
}
}
7、內容填完了是不是好看,加點樣式?也就是
//居中字體等樣式區域
sheet.setHorizontallyCenter(true);
//主題
HSSFCellStyle titlefontshstyle = wb.createCellStyle();
HSSFFont titlefont = wb.createFont();
setcontentStyleTable(titlefontshstyle, titlefont, "黑體", 20, true, false);
public static void setcontentStyleTable(HSSFCellStyle shstyle, HSSFFont titlefont, String string, int i, Boolean is_bold, Boolean is_border) {
titlefont.setFontHeightInPoints((short) i);
titlefont.setFontName(string);
shstyle.setWrapText(true);//自動換行
shstyle.setAlignment(HSSFCellStyle.VERTICAL_CENTER);
if(i != 11 && is_bold){
titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
}
if(is_border){
shstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下邊框
shstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左
shstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右
shstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上
}
shstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
shstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//定義字體樣式左右居中
shstyle.setFont(titlefont);
}
8、樣式也調了,是不是調一調打印,也就是
//添加打印樣式
addPrintClassData(sheet, false);
//打印的紙張樣式
public static void addPrintClassData(HSSFSheet sheet, Boolean is_landscape) {
sheet.setMargin(HSSFSheet.TopMargin, 0.4);//上≈2
sheet.setMargin(HSSFSheet.BottomMargin, 0.4);//下≈2
sheet.setMargin(HSSFSheet.LeftMargin, 0.2);//左≈0.5
sheet.setMargin(HSSFSheet.RightMargin, 0.2);//右≈0.5
sheet.setHorizontallyCenter(true);
sheet.setDefaultRowHeight((short) 400);//設置默認行高
HSSFPrintSetup ps = sheet.getPrintSetup();
ps.setLandscape(is_landscape);//true橫向,false縱向
ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);//設置紙張A4
}
9、Excel創建完了,你怎么給我呢?那得看你要什么了,也就是
ByteArrayOutputStream bos = null;
try{
/*1轉為輸入流*/
bos = new ByteArrayOutputStream();
wb.write(bos);
byte[] bytes = bos.toByteArray();
InputStream in = new ByteArrayInputStream(bytes);
/*2直接寫入Excel文檔*/
/*String fileName = new Date().getTime()+"frozen_excel.xls";
FileOutputStream output = new FileOutputStream("/temp/"+fileName);
wb.write(output);
output.close();*/
bos.close();
}catch (Exception e){
e.printStackTrace();
}
【總結】
看看上面9步需要哪些參數,將參數封裝做一個統一的公共方法,也就是
/**
* 導出Excel
* @param title Excel標題
* @param liekuanLst 設置的每個列寬
* @param biaotouLst 表頭內容
* @param contentLst 單元格內容
* @return 待定
*/
public String export_Excel(String title, List<Integer> liekuanLst, List<String> biaotouLst, List<Object[]> contentLst){
//聲明工作薄
HSSFWorkbook wb = new HSSFWorkbook();
//sheet頁簽部分
HSSFSheet sheet = wb.createSheet(title);
//自定義列寬部分
if(liekuanLst != null && liekuanLst.size() > 0){
for (int i = 0; i < liekuanLst.size(); i++) {
sheet.setColumnWidth((short)i, liekuanLst.get(i));
}
}
//居中字體等樣式區域
sheet.setHorizontallyCenter(true);
//主題
HSSFCellStyle titlefontshstyle = wb.createCellStyle();
HSSFFont titlefont = wb.createFont();
setcontentStyleTable(titlefontshstyle, titlefont, "黑體", 20, true, false);
//表頭樣式
HSSFCellStyle btfontshstyle = wb.createCellStyle();
HSSFFont btfont = wb.createFont();
setcontentStyleTable(btfontshstyle, btfont, "宋體", 10, true, true);
//內容樣式
HSSFCellStyle shstyle = wb.createCellStyle();
HSSFFont contentfont = wb.createFont();
setcontentStyle(shstyle, contentfont, "宋體", 11);
//創建標題
HSSFRow row = sheet.createRow(0);
//設置標題行高
row.setHeight((short) 920);
HSSFCell cell = row.createCell(0);
cell.setCellValue(title);
cell.setCellStyle(titlefontshstyle);
for (int i = 1; i < liekuanLst.size(); i++) {
cell = row.createCell(i);
cell.setCellStyle(titlefontshstyle);
}
//合并標題
sheet.addMergedRegion(new Region(0, (short)0, (short)0,(short)(liekuanLst.size()-1)));
//創建表頭
row = sheet.createRow(1);
//行高
row.setHeight((short) 550);
if(biaotouLst != null && biaotouLst.size() > 0){
for (int i = 0; i < biaotouLst.size(); i++) {
cell = row.createCell(i);
cell.setCellValue(biaotouLst.get(i));
cell.setCellStyle(btfontshstyle);
}
}
if(contentLst != null && contentLst.size() > 0){
//循環插入表格內容
for (int i = 0; i < contentLst.size(); i++) {
//當前行
row = sheet.createRow(i+2);
row.setHeight((short) 550);
//每個單元格
for (int j = 0; j < contentLst.get(i).length; j++) {
cell = row.createCell(j);
cell.setCellValue(String.valueOf(contentLst.get(i)[j]));
cell.setCellStyle(shstyle);
}
}
}
//添加打印樣式
addPrintClassData(sheet, false);
/**
* 寫入數據
*/
ByteArrayOutputStream bos = null;
try{
/*1轉為輸入流*/
bos = new ByteArrayOutputStream();
wb.write(bos);
byte[] bytes = bos.toByteArray();
InputStream in = new ByteArrayInputStream(bytes);
/*2直接寫入Excel文檔*/
/*String fileName = new Date().getTime()+"frozen_excel.xls";
FileOutputStream output = new FileOutputStream("/temp/"+fileName);
wb.write(output);
output.close();*/
bos.close();
}catch (Exception e){
e.printStackTrace();
}
return "";
}
//單元格樣式
public static void setcontentStyle(HSSFCellStyle shstyle, HSSFFont titlefont, String string, int i) {
titlefont.setFontHeightInPoints((short) i);
titlefont.setFontName(string);
shstyle.setWrapText(true);//自動換行
if(i != 11){
titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
}
shstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//定義字體樣式左右居中
shstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
shstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下邊框
shstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左
shstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右
shstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上
shstyle.setFont(titlefont);
}
public static void setcontentStyleTable(HSSFCellStyle shstyle, HSSFFont titlefont, String string, int i, Boolean is_bold, Boolean is_border) {
titlefont.setFontHeightInPoints((short) i);
titlefont.setFontName(string);
shstyle.setWrapText(true);//自動換行
shstyle.setAlignment(HSSFCellStyle.VERTICAL_CENTER);
if(i != 11 && is_bold){
titlefont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
}
if(is_border){
shstyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);//下邊框
shstyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左
shstyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右
shstyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上
}
shstyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中
shstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//定義字體樣式左右居中
shstyle.setFont(titlefont);
}
//打印的紙張樣式
public static void addPrintClassData(HSSFSheet sheet, Boolean is_landscape) {
sheet.setMargin(HSSFSheet.TopMargin, 0.4);//上≈2
sheet.setMargin(HSSFSheet.BottomMargin, 0.4);//下≈2
sheet.setMargin(HSSFSheet.LeftMargin, 0.2);//左≈0.5
sheet.setMargin(HSSFSheet.RightMargin, 0.2);//右≈0.5
sheet.setHorizontallyCenter(true);
sheet.setDefaultRowHeight((short) 400);//設置默認行高
HSSFPrintSetup ps = sheet.getPrintSetup();
ps.setLandscape(is_landscape);//true橫向,false縱向
ps.setPaperSize(HSSFPrintSetup.A4_PAPERSIZE);//設置紙張A4
}
關于用java創建Excel并導出的方法就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果喜歡這篇文章,不如把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。