java后台写导出Excel表格

1.创建maven项目
2.在pom文件加入poi依赖

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.7</version>
</dependency>

3.写工具类

package Test;

import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;



public class ExportExcel {
	// 显示的导出表的标题
	  private String title;
	  // 导出表的列名
	  private String[] rowName;
	  private List<Object[]> dataList = new ArrayList<Object[]>();

	  // 构造函数,传入要导出的数据
	  public ExportExcel(String title, String[] rowName, List<Object[]> dataList) {
	    this.dataList = dataList;
	    this.rowName = rowName;
	    this.title = title;
	  }

	  // 导出数据
	  public void export(OutputStream out) throws Exception {
		 
	    try {
	      HSSFWorkbook workbook = new HSSFWorkbook();
	      HSSFSheet sheet = workbook.createSheet(title);

	      // 产生表格标题行
	      HSSFRow rowm = sheet.createRow(0);
	      HSSFCell cellTitle = rowm.createCell(0);
	      
	      
	      //sheet样式定义【】
	      HSSFCellStyle columnTopStyle=this.getColumnTopStyle(workbook);
	      HSSFCellStyle style=this.getStyle(workbook);
	      sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length - 1)));
	      cellTitle.setCellStyle(columnTopStyle);
	      cellTitle.setCellValue(title);

	      // 定义所需列数
	      int columnNum = rowName.length;
	      HSSFRow rowRowName = sheet.createRow(2);

	      // 将列头设置到sheet的单元格中
	      for (int n = 0; n < columnNum; n++) {
	        HSSFCell cellRowName = rowRowName.createCell(n);
	        cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING);
	        HSSFRichTextString text = new HSSFRichTextString(rowName[n]);
	        cellRowName.setCellValue(text);
	        cellRowName.setCellStyle(columnTopStyle);

	      }
	      // 将查询到的数据设置到sheet对应的单元格中
	     
	      for (int i = 0; i < dataList.size(); i++) {
	        Object[] obj = dataList.get(i);// 遍历每个对象
	        HSSFRow row = sheet.createRow(i + 3);// 创建所需的行数
	        	
	        for (int j = 0; j < obj.length; j++) {
	        	
	          HSSFCell cell = null;
	          if (j == 0) {
	            cell = row.createCell(j, HSSFCell.CELL_TYPE_NUMERIC);
	            cell.setCellValue(i + 1);
	            cell.setCellValue(obj[j].toString());
	          } else {
	            cell = row.createCell(j, HSSFCell.CELL_TYPE_STRING);
	           
	            if (!"".equals(obj[j]) && obj[j] != null) {
	            	
	              cell.setCellValue(obj[j].toString());
	            }
	          }
	          cell.setCellStyle(style);

	        }

	      }

	      // 让列宽随着导出的列长自动适应
	      for (int colNum = 0; colNum < columnNum; colNum++) {
	        int columnWidth = sheet.getColumnWidth(colNum) / 256;
	        for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
	          HSSFRow currentRow;
	          if (sheet.getRow(rowNum) == null) {
	            currentRow = sheet.createRow(rowNum);
	          } else {
	            currentRow = sheet.getRow(rowNum);
	          }
	          if (currentRow.getCell(colNum) != null) {
	            HSSFCell currentCell = currentRow.getCell(colNum);
	            if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
	              int length = currentCell.getStringCellValue().getBytes().length;
	              if (columnWidth < length) {
	                columnWidth = length;
	              }
	            }
	          }
	        }
	        if (colNum == 0) {
	          sheet.setColumnWidth(colNum, (columnWidth - 2) * 256);
	        } else {
	          sheet.setColumnWidth(colNum, (columnWidth + 4) * 256);
	        }
	      }

	      if (workbook != null) {
	        try {

	          workbook.write(out);
	         out.flush();
	          out.close();
	        } catch (Exception e) {
	          e.printStackTrace();
	        }
	      }

	    } catch (Exception e) {

	    }
	  }
	  
	  /*
	   * 列头单元格样式
	   */
	  public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {
	    // 设置字体
	    HSSFFont font = workbook.createFont();

	    // 设置字体大小
	    font.setFontHeightInPoints((short) 11);
	    // 字体加粗
	    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
	    // 设置字体名字
	    font.setFontName("Courier New");
	    // 设置样式
	    HSSFCellStyle style = workbook.createCellStyle();
	    // 设置低边框
	    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
	    // 设置低边框颜色
	    style.setBottomBorderColor(HSSFColor.BLACK.index);
	    // 设置右边框
	    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
	    // 设置顶边框
	    style.setTopBorderColor(HSSFColor.BLACK.index);
	    // 设置顶边框颜色
	    style.setTopBorderColor(HSSFColor.BLACK.index);
	    // 在样式中应用设置的字体
	    style.setFont(font);
	    // 设置自动换行
	    style.setWrapText(false);
	    // 设置水平对齐的样式为居中对齐;
	    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
	    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
	    return style;

	  }

	  public HSSFCellStyle getStyle(HSSFWorkbook workbook) {
	    // 设置字体
	    HSSFFont font = workbook.createFont();
	    // 设置字体大小
	    font.setFontHeightInPoints((short) 10);
	    // 字体加粗
	    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
	    // 设置字体名字
	    font.setFontName("Courier New");
	    // 设置样式;
	    HSSFCellStyle style = workbook.createCellStyle();
	    // 设置底边框;
	    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
	    // 设置底边框颜色;
	    style.setBottomBorderColor(HSSFColor.BLACK.index);
	    // 设置左边框;
	    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
	    // 设置左边框颜色;
	    style.setLeftBorderColor(HSSFColor.BLACK.index);
	    // 设置右边框;
	    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
	    // 设置右边框颜色;
	    style.setRightBorderColor(HSSFColor.BLACK.index);
	    // 设置顶边框;
	    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
	    // 设置顶边框颜色;
	    style.setTopBorderColor(HSSFColor.BLACK.index);
	    // 在样式用应用设置的字体;
	    style.setFont(font);
	    // 设置自动换行;
	    style.setWrapText(false);
	    // 设置水平对齐的样式为居中对齐;
	    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
	    // 设置垂直对齐的样式为居中对齐;
	    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
	    return style;
	  }
	
}
	

4.写测试类

package Test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;



public class Test {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Object[] object1= {"tom",1};
		Object[] object2= {"lili",2};
		List<Object[]> list=new ArrayList<Object[]>();
		list.add(object1);
		list.add(object2);
		String[] rowName= new String[]{"名字","年龄"};
		ExportExcel exportExcel=new ExportExcel("Excel导出", rowName, list);
		File file=new File("D://b.xls");
		FileOutputStream out=new FileOutputStream(file);
		exportExcel.export(out);
		
	      System.out.println("成功");
	}

}

需要我们用的时候只需要
1.新建new ExportExcel(“Excel导出”, rowName, list);
第一个参数为表格标题,第二个参数为列名,第三个参数为数据,list放的是一个一个的数组,每一个数组为一行数据。
2. 指定文件位置
File file=new File(“D://b.xls”);
FileOutputStream out=new FileOutputStream(file);
3.调用ExportExcel的export(out)方法

后来发现如果不需要表格标题就不适用了,于是我在原有的基础上对ExportExcel的export(out)方法进行了改进,可以自动进行判断有没有标题

package Test;

import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;



public class ExportExcel {
	// 显示的导出表的标题
	  private String title;
	  // 导出表的列名
	  private String[] rowName;
	  private List<Object[]> dataList = new ArrayList<Object[]>();

	  // 构造函数,传入要导出的数据
	  public ExportExcel(String title, String[] rowName, List<Object[]> dataList) {
	    this.dataList = dataList;
	    this.rowName = rowName;
	    this.title = title;
	  }

	  // 导出数据
	  public void export(OutputStream out) throws Exception {
		 
	    try {
	    	int r=0;//列名
	    	
	      HSSFWorkbook workbook = new HSSFWorkbook();
	    //sheet样式定义【】
	      HSSFCellStyle columnTopStyle=this.getColumnTopStyle(workbook);
	      HSSFCellStyle style=this.getStyle(workbook);
	      HSSFSheet sheet=workbook.createSheet();
	      if(title==null) {
	    	   
	      }else {
	    	  

		      // 产生表格标题行
		      HSSFRow rowm = sheet.createRow(0);
		      HSSFCell cellTitle = rowm.createCell(0);
		    
		      sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length - 1)));
		      cellTitle.setCellStyle(columnTopStyle);
		      cellTitle.setCellValue(title);
		       r=2;//列在第几行
		      
	      }
	      
	      
	   // 定义所需列数
	      
	      int columnNum = rowName.length;
	      
	      HSSFRow rowRowName = sheet.createRow(r);

	      // 将列头设置到sheet的单元格中
	      for (int n = 0; n < columnNum; n++) {
	        HSSFCell cellRowName = rowRowName.createCell(n);
	        cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING);
	        HSSFRichTextString text = new HSSFRichTextString(rowName[n]);
	        cellRowName.setCellValue(text);
	        cellRowName.setCellStyle(columnTopStyle);

	      }
	      
	      // 将查询到的数据设置到sheet对应的单元格中
	     
	      for (int i = 0; i < dataList.size(); i++) {
	        Object[] obj = dataList.get(i);// 遍历每个对象
	        HSSFRow row=null;
	        if(title==null) {
	        	 row = sheet.createRow(i+1);// 创建行数
	        }else {
	        	 row = sheet.createRow(i + 3);// 创建行数
	        }
	        
	        	
	        for (int j = 0; j < obj.length; j++) {
	        	
	          HSSFCell cell =row.createCell(j, HSSFCell.CELL_TYPE_NUMERIC);
	         
	          if (!"".equals(obj[j]) && obj[j] != null) {
	        	  
	              cell.setCellValue(obj[j].toString());
	            }else {
	            	cell.setCellValue("null");
	            }
	            
	        /* if (j == 0) {
	            cell = row.createCell(j, HSSFCell.CELL_TYPE_NUMERIC);
	            cell.setCellValue(i + 1);
	            cell.setCellValue(obj[j].toString());
	          } else {
	            cell = row.createCell(j, HSSFCell.CELL_TYPE_STRING);
	           
	            if (!"".equals(obj[j]) && obj[j] != null) {
	            	
	              cell.setCellValue(obj[j].toString());
	            }
	          }*/
	         
	          cell.setCellStyle(style);

	        }

	      }
	       columnNum = rowName.length;
	      // 让列宽随着导出的列长自动适应
	      for (int colNum = 0; colNum < columnNum; colNum++) {
	        int columnWidth = sheet.getColumnWidth(colNum) / 256;
	        for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {
	          HSSFRow currentRow;
	          if (sheet.getRow(rowNum) == null) {
	            currentRow = sheet.createRow(rowNum);
	          } else {
	            currentRow = sheet.getRow(rowNum);
	          }
	          if (currentRow.getCell(colNum) != null) {
	            HSSFCell currentCell = currentRow.getCell(colNum);
	            if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
	              int length = currentCell.getStringCellValue().getBytes().length;
	              if (columnWidth < length) {
	                columnWidth = length;
	              }
	            }
	          }
	        }
	        if (colNum == 0) {
	          sheet.setColumnWidth(colNum, (columnWidth - 2) * 256);
	        } else {
	          sheet.setColumnWidth(colNum, (columnWidth + 4) * 256);
	        }
	      }

	      if (workbook != null) {
	        try {

	          workbook.write(out);
	         out.flush();
	          out.close();
	        } catch (Exception e) {
	          e.printStackTrace();
	        }
	      }

	    } catch (Exception e) {

	    }
	  }
	  
	  /*
	   * 列头单元格样式
	   */
	  public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {
	    // 设置字体
	    HSSFFont font = workbook.createFont();

	    // 设置字体大小
	    font.setFontHeightInPoints((short) 11);
	    // 字体加粗
	    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
	    // 设置字体名字
	    font.setFontName("Courier New");
	    // 设置样式
	    HSSFCellStyle style = workbook.createCellStyle();
	    // 设置低边框
	    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
	    // 设置低边框颜色
	    style.setBottomBorderColor(HSSFColor.BLACK.index);
	    // 设置右边框
	    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
	    // 设置顶边框
	    style.setTopBorderColor(HSSFColor.BLACK.index);
	    // 设置顶边框颜色
	    style.setTopBorderColor(HSSFColor.BLACK.index);
	    // 在样式中应用设置的字体
	    style.setFont(font);
	    // 设置自动换行
	    style.setWrapText(false);
	    // 设置水平对齐的样式为居中对齐;
	    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
	    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
	    return style;

	  }

	  public HSSFCellStyle getStyle(HSSFWorkbook workbook) {
	    // 设置字体
	    HSSFFont font = workbook.createFont();
	    // 设置字体大小
	    font.setFontHeightInPoints((short) 10);
	    // 字体加粗
	    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
	    // 设置字体名字
	    font.setFontName("Courier New");
	    // 设置样式;
	    HSSFCellStyle style = workbook.createCellStyle();
	    // 设置底边框;
	    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
	    // 设置底边框颜色;
	    style.setBottomBorderColor(HSSFColor.BLACK.index);
	    // 设置左边框;
	    style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
	    // 设置左边框颜色;
	    style.setLeftBorderColor(HSSFColor.BLACK.index);
	    // 设置右边框;
	    style.setBorderRight(HSSFCellStyle.BORDER_THIN);
	    // 设置右边框颜色;
	    style.setRightBorderColor(HSSFColor.BLACK.index);
	    // 设置顶边框;
	    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
	    // 设置顶边框颜色;
	    style.setTopBorderColor(HSSFColor.BLACK.index);
	    // 在样式用应用设置的字体;
	    style.setFont(font);
	    // 设置自动换行;
	    style.setWrapText(false);
	    // 设置水平对齐的样式为居中对齐;
	    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
	    // 设置垂直对齐的样式为居中对齐;
	    style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
	    return style;
	  }
	
}
	

测试代码:

package Test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;



public class Test {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		Object[] object1= {"tom",1};
		Object[] object2= {"lili",2};
		List<Object[]> list=new ArrayList<Object[]>();
		list.add(object1);
		list.add(object2);
		String[] rowName= new String[]{"名字","年龄"};
		//ExportExcel exportExcel=new ExportExcel("Excel导出", rowName, list);
		ExportExcel exportExcel=new ExportExcel(null, rowName, list);
		File file=new File("D://b.xls");
		FileOutputStream out=new FileOutputStream(file);
		exportExcel.export(out);
		
	      System.out.println("成功");
	}

}

这样就可以写标题也可以不写标题了;

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值