Java导出excel表格


/**
 * 
 */
package cn.com.jsoft.creator.plugin.km.common.utils;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import jxl.Workbook;
import jxl.format.Alignment;
import jxl.write.Colour;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

/**
 * @author geoffrey
 * @date 2013-2-18
 */
public class JxlExcelUtils {

	/**
	 * @author 
	 * @param objData 导出内容数组
	 * @param sheetName 导出工作表的名称
	 * @param columns 导出Excel的表头数组
	 * @return
	 */
	public static int exportToExcel(HttpServletResponse response, List objData, String sheetName,String[] columns) {
		int flag = 0;
		//声明工作簿jxl.write.WritableWorkbook
		WritableWorkbook wwb;
		try {
			//根据传进来的file对象创建可写入的Excel工作薄
			wwb = Workbook.createWorkbook(response.getOutputStream());

			/*
			 * 创建一个工作表、sheetName为工作表的名称、"0"为第一个工作表
			 * 打开Excel的时候会看到左下角默认有3个sheet、"sheet1、sheet2、sheet3"这样
			 * 代码中的"0"就是sheet1、其它的一一对应。
			 * createSheet(sheetName, 0)一个是工作表的名称,另一个是工作表在工作薄中的位置
			 */
			WritableSheet ws = wwb.createSheet(sheetName, 0);

			//创建单元格样式
			WritableCellFormat wcf = new WritableCellFormat();

			//背景颜色
			wcf.setBackground(jxl.format.Colour.YELLOW);

			/*
			 * 这个是单元格内容居中显示
			 * 还有很多很多样式
			 */
			wcf.setAlignment(Alignment.CENTRE);

			//判断一下表头数组是否有数据
			if (columns != null && columns.length > 0) {

				//循环写入表头
				for (int i = 0; i < columns.length; i++) {
					
					/*
					 * 添加单元格(Cell)内容addCell()
					 * 添加Label对象Label()
					 * 数据的类型有很多种、在这里你需要什么类型就导入什么类型
					 * 如:jxl.write.DateTime 、jxl.write.Number、jxl.write.Label
					 * Label(i, 0, columns[i], wcf)
					 * 其中i为列、0为行、columns[i]为数据、wcf为样式
					 * 合起来就是说将columns[i]添加到第一行(行、列下标都是从0开始)第i列、样式为什么"色"内容居中
					 */
					ws.addCell(new Label(i, 0, columns[i], wcf));
				}

				//判断表中是否有数据
				if (objData != null && objData.size() > 0) {
					//循环写入表中数据
					for (int i = 0; i < objData.size(); i++) {
						
						//转换成map集合{activyName:测试功能,count:2}
						Map map = (Map)objData.get(i);
						
						//循环输出map中的子集:既列值
						int j=0;
						for(Object o:map.keySet()){
							//ps:因为要“”通用”“导出功能,所以这里循环的时候不是get("Name"),而是通过map.get(o)
							ws.addCell(new Label(j,i+1,String.valueOf(map.get(o))));
							j++;
						}
					}
				}

				//写入Exel工作表
				wwb.write();

				//关闭Excel工作薄对象 
				wwb.close();
			}
		} catch (Exception ex) {
			ex.printStackTrace();
			System.out.println(ex.getMessage());
			flag = 1;
		}

		return flag;
	}
	
	
	/**
	 * 下载excel
	 * @author 
	 * @param response
	 * @param filename 文件名 ,如:20110808.xls
	 * @param listData 数据源
	 * @param sheetName 表头名称
	 * @param columns 列名称集合,如:{物品名称,数量,单价}
	 */
	public static void exportexcle(HttpServletResponse response,String filename,List listData,String sheetName,String[] columns)
	{
		   //调用上面的方法、生成Excel文件
			response.setContentType("application/vnd.ms-excel");
			response.setHeader("Content-Disposition", "attachment;filename="+filename);
		    exportToExcel(response, listData, sheetName, columns);

	}
}


以下是使用Java导出Excel表格的示例代码: ```java import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExportExcelExample { public static void main(String[] args) { // 创建工作簿 Workbook workbook = new XSSFWorkbook(); // 创建工作表 Sheet sheet = workbook.createSheet("Sheet1"); // 创建表头 Row headerRow = sheet.createRow(0); Cell headerCell1 = headerRow.createCell(0); headerCell1.setCellValue("姓名"); Cell headerCell2 = headerRow.createCell(1); headerCell2.setCellValue("年龄"); Cell headerCell3 = headerRow.createCell(2); headerCell3.setCellValue("性别"); // 填充数据 List<Person> personList = new ArrayList<>(); personList.add(new Person("张三", 20, "男")); personList.add(new Person("李四", 25, "女")); personList.add(new Person("王五", 30, "男")); int rowIndex = 1; for (Person person : personList) { Row dataRow = sheet.createRow(rowIndex++); Cell dataCell1 = dataRow.createCell(0); dataCell1.setCellValue(person.getName()); Cell dataCell2 = dataRow.createCell(1); dataCell2.setCellValue(person.getAge()); Cell dataCell3 = dataRow.createCell(2); dataCell3.setCellValue(person.getGender()); } // 导出Excel文件 try (FileOutputStream outputStream = new FileOutputStream("person.xlsx")) { workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } } } class Person { private String name; private int age; private String gender; public Person(String name, int age, String gender) { this.name = name; this.age = age; this.gender = gender; } public String getName() { return name; } public int getAge() { return age; } public String getGender() { return gender; } } ``` 这个示例代码创建了一个包含表头和数据的Excel表格,并将其导出到名为“person.xlsx”的文件中。你可以根据需要修改表格的内容和文件名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值