`

JAVA及jsp下导出Excel表格

阅读更多

本篇文章就举例示范如何利用Java 创建和读取Excel文档,并设置单元格的字体和格式。

  为了保证示例程序的运行,必须安装Java 2 sdk1.4.0 和Jakarta POI,Jakarta POI的Web站点是: http://jakarta.apache.org/poi/

第一:创建Excel 文档

  示例1将演示如何利用Jakarta POI API 创建Excel 文档。

  示例1程序如下:

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java.io.FileOutputStream;
public class CreateXL {

 /** Excel 文件要存放的位置,假定在D盘JTest目录下*/

 public static String outputFile="D:/JTest/ gongye.xls";

 public static void main(String argv[]){

 try{

  // 创建新的Excel 工作簿

  HSSFWorkbook workbook = new HSSFWorkbook();

  // 在Excel工作簿中建一工作表,其名为缺省值
      // 如要新建一名为"效益指标"的工作表,其语句为:
      // HSSFSheet sheet = workbook.createSheet("效益指标");

  HSSFSheet sheet = workbook.createSheet();

  // 在索引0的位置创建行(最顶端的行)

  HSSFRow row = sheet.createRow((short)0);

  //在索引0的位置创建单元格(左上端)
  HSSFCell cell = row.createCell((short) 0);
  // 定义单元格为字符串类型
  cell.setCellType(HSSFCell.CELL_TYPE_STRING);
  // 在单元格中输入一些内容
  cell.setCellValue("增加值");
  // 新建一输出文件流
  FileOutputStream fOut = new FileOutputStream(outputFile);
  // 把相应的Excel 工作簿存盘
  workbook.write(fOut);
  fOut.flush();
  // 操作结束,关闭文件
  fOut.close();
  System.out.println("文件生成...");

 }catch(Exception e) {
  System.out.println("已运行 xlCreate() : " + e );
 }
}
}
第二:读取Excel文档中的数据

  示例2将演示如何读取Excel文档中的数据。假定在D盘JTest目录下有一个文件名为gongye.xls的Excel文件。

  示例2程序如下:

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java.io.FileInputStream;
public class ReadXL {
 /** Excel文件的存放位置。注意是正斜线*/
 public static String fileToBeRead="D:/JTest/ gongye.xls";
 public static void main(String argv[]){
 try{
  // 创建对Excel工作簿文件的引用
  HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead));
  // 创建对工作表的引用。
  // 本例是按名引用(让我们假定那张表有着缺省名"Sheet1")
  HSSFSheet sheet = workbook.getSheet("Sheet1");
  // 也可用getSheetAt(int index)按索引引用,
  // 在Excel文档中,第一张工作表的缺省索引是0,
  // 其语句为:HSSFSheet sheet = workbook.getSheetAt(0);
  // 读取左上端单元
  HSSFRow row = sheet.getRow(0);
  HSSFCell cell = row.getCell((short)0);
  // 输出单元内容,cell.getStringCellValue()就是取所在单元的值
  System.out.println("左上端单元是: " + cell.getStringCellValue());
 }catch(Exception e) {
  System.out.println("已运行xlRead() : " + e );
 }
}
}
 第三: 设置单元格格式

  在这里,我们将只介绍一些和格式设置有关的语句,我们假定workbook就是对一个工作簿的引用。在Java中,第一步要做的就是创建和设置字体和单元格的格式,然后再应用这些格式:

  1、创建字体,设置其为红色、粗体:

HSSFFont font = workbook.createFont();
font.setColor(HSSFFont.COLOR_RED);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  2、创建格式

HSSFCellStyle cellStyle= workbook.createCellStyle();
cellStyle.setFont(font);
  3、应用格式

HSSFCell cell = row.createCell((short) 0);
cell.setCellStyle(cellStyle);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue("标题 ");   

 

 

第四: 小例子

 

1.最简单的实现,可以让你一下就看到效果

<%@ page contentType="application/msexcel" %>
<!-- 以上这行设定本网页为excel格式的网页 -->
<%
   response.setHeader("Content-disposition","inline; filename=test1.xls");
   //以上这行设定传送到前端浏览器时的档名为test1.xls
   //就是靠这一行,让前端浏览器以为接收到一个excel档
%>
<html>
<head>
<title>Excel档案呈现方式</title>
</head>
<body>
  <table border="1" width="100%">
    <tr>
      <td>姓名</td><td>身份证字号</td><td>生日</td>
    </tr>
    <tr>
      <td>李玟</td><td>N111111111</td><td>1900/11/12</td>
    </tr>
    <tr>
      <td>梁静如</td><td>N222222222</td><td>1923/10/1</td>
    </tr>
    <tr>
      <td>张惠妹</td><td>N333333333</td><td>1934/12/18</td>
    </tr>
  </table>
</body>
</html>

 

2.第二种,在页面可以写入数据

<%@ page import="org.apache.poi.hssf.usermodel.HSSFCell" %>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFRow" %>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFSheet" %>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFWorkbook" %>
<%@ page import="java.util.List" %>
<%
   //这是我获取我们系统种的数据,上面的代码我删掉了,只要得到一个List就可以了
    List userList = (List) ret.getObject("users");

    String filename = "";
    filename = "activeUserList.xls";
    
    String[] tableHeader = {"userName", "registTime", "lastLoginTime"};
    response.setContentType("APPLICATION/OCTET-STREAM ");
    response.setContentType("application/x-msdownload;charset=utf-8");
    response.setCharacterEncoding("utf-8");
    response.setHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes("GBK"), "ISO8859_1"));
    HSSFWorkbook wb = new HSSFWorkbook();
    HSSFSheet sheet = wb.createSheet();
    wb.setSheetName(0, "userList", HSSFWorkbook.ENCODING_UTF_16);
    // 表头为第一行
    HSSFRow headerRow = sheet.createRow(0);
    for (int i = 0; i < tableHeader.length; i++) {
        HSSFCell headerCell = headerRow.createCell((short) i);
        headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);
        headerCell.setCellValue(tableHeader[i]);
    }
    UserVo user;
    HSSFRow row;
    HSSFCell cell;

    if (userList != null) {
        for (int i = 0; i < userList.size(); i++) {
            user = (UserVo) userList.get(i);
            row = sheet.createRow(i + 1);
            cell = row.createCell((short) 0);
//            cell.setEncoding(HSSFCell.ENCODING_UTF_16);
            cell.setCellValue(user.getName());
            cell = row.createCell((short) 1);
            cell.setCellValue(user.getRegistTime().toString());
            cell = row.createCell((short) 2);
            cell.setCellValue(user.getLastLoginTime().toString());
        }
    }

    wb.write(response.getOutputStream());
    response.getOutputStream().flush();
    response.getOutputStream().close();
%>

 Java生成代码编写

1。

public ActionForward toExcelModif(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		try {

			String title = "员工号,员工姓名,金额,结束日期";

			String records = new String();
			records = "";
			String records2 = new String();
			records2 = "";
			
			int ai = 0;
						
			

			// 输出Excel
			HttpSession s = request.getSession(false);
			Employee emp = (Employee) s.getAttribute(Constants.USER_IN_SESSION);
			String str1=System.getProperty("user.dir");
			String str2=System.getProperty("file.separator");
			String strf = str1+str2+ emp.getEmpEname()
					+ "_output.xls";

			File file = new File(str1+str2);

			
			if (!file.exists()) {
				file.mkdirs();
			}
			File fileWrite = new File(strf);
			fileWrite.createNewFile();
			OutputStream os = new FileOutputStream(fileWrite);
			HashMap<String, Object> map2 = new HashMap<String, Object>();
			String reviewBatchNo =request.getParameter("reviewBatchNo2");
			map2.put("reviewBatchNo", reviewBatchNo.trim());
			
			List<PteExpenditures> list2 = expendituresService.findExpenditures(map2);
			
			if (list2!=null){
				Iterator<PteExpenditures> ite = list2.iterator();
				while (ite.hasNext()) {
					PteExpenditures pteExpenditures = ite.next();	
											records2 = records2								+ pteExpenditures.getEmpNo()
								+ ","
								+ pteExpenditures.getEmpName()
								+ ","																+ pteExpenditures.getTotalAmount()								+ pteExpenditures.getVerifyEmpName()
								+ ","
								+ pteExpenditures.getAcceptEmpName()
											+ ","
								;
						ai++;			
				
				}
			}

			if (!records2.equals("")) {
				records = records + records2;
			}
			

			ExcelHandle eh = new ExcelHandle();

			SimpleDateFormat formatter = new SimpleDateFormat(
					"yyyy-MM-dd HH:mm:ss");
			String strDate = formatter.format(new Date());
			
			String remark = "复核批号:," + reviewBatchNo.trim()
			+ ",总份数:," + ai;
			
			
			DecimalFormat s1 = new DecimalFormat( ".00"); 
			String rmbstr= s1.format(rmb) ;
			String usdstr= s1.format(usd) ;
			String gbstr= s1.format(gb) ;					
			
			
			remark = remark + ",人民币金额:," +rmbstr+ ",美元金额:," +usdstr + ",港币金额:," +gbstr  +",打印日期:," + strDate;
			
			
			writeExcel_add(os, title,records, remark);
		} catch (Exception e) {
			e.printStackTrace();
		}
		download(mapping, form, request, response);

		return null;
	}

 2。 

 

public void writeExcel_add(OutputStream os, String title, String records,
			String remark) {
		try {
			WritableWorkbook wwb = Workbook.createWorkbook(os);
			WritableSheet ws = wwb.createSheet("TestCreateExcel",0);
			

			WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 12,
					WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
					jxl.format.Colour.BLACK);
			WritableCellFormat titleFormat = new WritableCellFormat(titleFont);
			WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10,
					WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
					jxl.format.Colour.BLACK);
			WritableCellFormat detFormat = new WritableCellFormat(detFont);

			String Title[] = title.split(",");
			int n = Title.length;

			for (int i = 0; i < n; i++) {
				Label label = new Label(i, 0, Title[i], titleFormat);
				ws.setColumnView(i, 12);
				ws.addCell(label);
			}
			String Records[] = records.split(",");

			int r = 0, l = 0;
			for (int i = 0; i < Records.length; i++) {
				if (l % n == 0) {
					r++;
					l = 0;
				}// ����
				Label label = new Label(l, r, Records[i], detFormat);
				l++;
				ws.addCell(label);
			}
			
			r++;
			String Remarks[] = remark.split(",");
			for (int i = 0; i < Remarks.length; i++) {
				if (l % n == 0) {
					r++;
					l = 0;
				}// ����
				Label label = new Label(l, r, Remarks[i], detFormat);
				l++;
				ws.addCell(label);
			}			
			wwb.write();
			wwb.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

3。

public static void download(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {

		java.io.BufferedInputStream bis = null;
		java.io.BufferedOutputStream bos = null;
		try {

			response.setCharacterEncoding("UTF-8");
			response.setContentType("application/x-msdownload");
			response.setHeader("Content-disposition", "attachment; filename="
					+ "exceltest.xls");

			HttpSession s = request.getSession(false);
			Employee emp = (Employee) s.getAttribute(Constants.USER_IN_SESSION);
			
			String str1=System.getProperty("user.dir");
			String str2=System.getProperty("file.separator");
			String strf = str1+str2+ emp.getEmpEname()
					+ "_output.xls";

			bis = new java.io.BufferedInputStream(new java.io.FileInputStream(
					strf));
			bos = new java.io.BufferedOutputStream(response.getOutputStream());
			byte[] buff = new byte[2048];
			int bytesRead;
			while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
				bos.write(buff, 0, bytesRead);
			}
			bos.flush();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (bis != null) {
				try {
					bis.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				bis = null;
			}
			if (bos != null) {
				try {
					bos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				bos = null;
			}
		}

	}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics