博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
j2e中操作EXCEL
阅读量:5904 次
发布时间:2019-06-19

本文共 9792 字,大约阅读时间需要 32 分钟。

在j2e中操作excel,无非2种情况,在这里我贴部分代码做个例子就OK,不管是导入和导出都是操作的都是流
1,导入,浏览器输入EXCEL到java后台解析
package action;import java.io.OutputStream;import java.sql.ResultSet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionForward;import org.apache.struts.action.ActionMapping;import bean.ExcelBean;import bean.SQLBean;public class DownAction extends Action{	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception	{		SQLBean sq = new SQLBean();		String sql = "select * from detial";		try		{			String fname = "detial";// Excel文件名			OutputStream os = response.getOutputStream();// 取得输出流			response.reset();// 清空输出流			response.setHeader("Content-disposition", "attachment; filename=" + fname + ".xls");// 设定输出文件头,该方法有两个参数,分别表示应答头的名字和值。			response.setContentType("application/msexcel");// 定义输出类型			ResultSet res = sq.select(sql);			ExcelBean eb = new ExcelBean();			eb.createFixationSheet(res, os);// 调用生成excel文件bean			res.close();		}		catch (Exception e)		{			System.out.println(e);		}		return mapping.findForward("display");	}}
package bean;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.sql.ResultSet;import java.sql.SQLException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;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.Region;public class ExcelBean{	private HSSFWorkbook wb = null;	public ExcelBean()	{		wb = new HSSFWorkbook();	}	public void createFixationSheet(ResultSet res, OutputStream os) throws IOException	{		HSSFSheet sheet = wb.createSheet("new sheet");		wb.setSheetName(0, "话费详单", HSSFWorkbook.ENCODING_UTF_16);		HSSFRow row = sheet.createRow((short) 0);		sheet.createFreezePane(0, 1);		cteateCell(wb, row, (short) 0, "手机号码");		cteateCell(wb, row, (short) 1, "呼叫类型");		cteateCell(wb, row, (short) 2, "对方号码");		cteateCell(wb, row, (short) 3, "起始时间");		cteateCell(wb, row, (short) 4, "通话时间");		cteateCell(wb, row, (short) 5, "通话地点");		cteateCell(wb, row, (short) 6, "长途类型");		cteateCell(wb, row, (short) 7, "基本话费");		cteateCell(wb, row, (short) 8, "长话费");		cteateCell(wb, row, (short) 9, "总话费");		int ii = 0;		try		{			int i = 0;			ii = res.getMetaData().getColumnCount();			while (res.next())			{				i++;				HSSFRow row2 = sheet.createRow((short) i);				for (int j = 0; j < ii; j++)				{					String ss = "";					if (res.getString(j + 1) == null)						ss = "空  null";					else						ss = res.getString(j + 1);					cteateCell(wb, row2, (short) j, ss);				}			}		}		catch (SQLException e)		{			e.printStackTrace();		}		wb.write(os);		os.flush();		os.close();	}	private void cteateCell(HSSFWorkbook wb, HSSFRow row, short col, String val)	{		HSSFCell cell = row.createCell(col);		cell.setEncoding(HSSFCell.ENCODING_UTF_16);		cell.setCellValue(val);		HSSFCellStyle cellstyle = wb.createCellStyle();		cellstyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION);		cell.setCellStyle(cellstyle);	}}

2,导出,java后台生成excel输入到浏览器

public class UserAction extends ActionSupport{	//导出excel,这里就是说下载模板,里面的东西是空的	public String export() throws Exception	{		Connection con = null;		try		{			con = dbUtil.getCon();			Workbook wb = new HSSFWorkbook();			String headers[] = { "编号", "姓名", "电话", "Email", "QQ" };			ResultSet rs = userDao.userList(con, null);			ExcelUtil.fillExcelData(rs, wb, headers);			ResponseUtil.export(ServletActionContext.getResponse(), wb, "导出excel.xls");		}		catch (Exception e)		{			// TODO Auto-generated catch block			e.printStackTrace();		}		finally		{			try			{				dbUtil.closeCon(con);			}			catch (Exception e)			{				// TODO Auto-generated catch block				e.printStackTrace();			}		}		return null;	}	//模板不是说生成的,是放在服务器上的一个模板,直接读下就OK	public String export2() throws Exception	{		Connection con = null;		try		{			con = dbUtil.getCon();			ResultSet rs = userDao.userList(con, null);			Workbook wb = ExcelUtil.fillExcelDataWithTemplate(userDao.userList(con, null), "userExporTemplate.xls");			ResponseUtil.export(ServletActionContext.getResponse(), wb, "利用模版导出excel.xls");		}		catch (Exception e)		{			// TODO Auto-generated catch block			e.printStackTrace();		}		finally		{			try			{				dbUtil.closeCon(con);			}			catch (Exception e)			{				// TODO Auto-generated catch block				e.printStackTrace();			}		}		return null;	}	//上传excel模板,后台解析excel	public String upload() throws Exception	{		POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("上传的file"));		HSSFWorkbook wb = new HSSFWorkbook(fs);		HSSFSheet hssfSheet = wb.getSheetAt(0); // 获取第一个Sheet页		if (hssfSheet != null)		{			for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++)			{				HSSFRow hssfRow = hssfSheet.getRow(rowNum);				if (hssfRow == null)				{					continue;				}				User user = new User();				user.setName(ExcelUtil.formatCell(hssfRow.getCell(0)));				user.setPhone(ExcelUtil.formatCell(hssfRow.getCell(1)));				user.setEmail(ExcelUtil.formatCell(hssfRow.getCell(2)));				user.setQq(ExcelUtil.formatCell(hssfRow.getCell(3)));				Connection con = null;				try				{					con = dbUtil.getCon();					userDao.userAdd(con, user);				}				catch (Exception e)				{					e.printStackTrace();				}				finally				{					dbUtil.closeCon(con);				}			}		}		JSONObject result = new JSONObject();		result.put("success", "true");		ResponseUtil.write(ServletActionContext.getResponse(), result);		return null;	}}
public class ExcelUtil {	public static void fillExcelData(ResultSet rs,Workbook wb,String[] headers)throws Exception{		int rowIndex=0;		Sheet sheet=wb.createSheet();		Row row=sheet.createRow(rowIndex++);		for(int i=0;i
public class ResponseUtil {	public static void write(HttpServletResponse response,Object o)throws Exception{		response.setContentType("text/html;charset=utf-8");		PrintWriter out=response.getWriter();		out.print(o.toString());		out.flush();		out.close();	}		public static void export(HttpServletResponse response,Workbook wb,String fileName)throws Exception{		response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"),"iso8859-1"));		response.setContentType("application/ynd.ms-excel;charset=UTF-8");		OutputStream out=response.getOutputStream();		wb.write(out);		out.flush();		out.close();	}}

3,利用springMVC中自带的AbstractExcelView或者AbstractJExcelView视图,这2个视图就是专门操作Excel的,区别就是前面一个用的jxl的包,后面一个用的poi的包。

这里贴出我以前用jxl写的一段代码(其实POI一个意思,只不过继承的包不同而已),首先打开AbstractJExcelView源码看一下:

public class ExcelView extends AbstractJExcelView {	private String[] columnsNames = { "工单号","县市", "申请人", "申请人手机号码"};	private int[] columnWidths = { 10,30,20,20};	@Override	protected void buildExcelDocument(Map
model,WritableWorkbook workbook, HttpServletRequest request,HttpServletResponse response) throws Exception { response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode("号码明细.xls", "UTF-8")); OutputStream os = null; try { os = response.getOutputStream(); workbook = Workbook.createWorkbook(os); WritableSheet ws = workbook.createSheet("号码明细", 1); addColumnNamesToSheet(ws); List
terminalSendOtherBeans = (List
) model.get("beans"); addData(ws, terminalSendOtherBeans); workbook.write(); } catch (Exception e) { }finally{ workbook.close(); os.flush(); os.close(); } } /** * 将数据写入工作表中 * * @param ws * @param customers */ private void addData(WritableSheet ws, List
terminalSendOtherBeans) { Label label = null; for (int i = 0; i < terminalSendOtherBeans.size(); i++) { TerminalSendOtherBean bean = terminalSendOtherBeans.get(i); try { label = new Label(0, (i + 1), bean.getId()+""); ws.addCell(label); label = new Label(1, (i + 1), bean.getDeptName()); ws.addCell(label); label = new Label(2, (i + 1), bean.getPersonName()); ws.addCell(label); label = new Label(3, (i + 1), bean.getTelephone1()); ws.addCell(label); } catch (WriteException e) { e.printStackTrace(); } } } /** * 增加表头 * * @param ws */ private void addColumnNamesToSheet(WritableSheet ws) { Label label = null; for (int i = 0; i < columnsNames.length; i++) { label = new Label(i, 0, columnsNames[i],getFormat()); try { ws.addCell(label); ws.setColumnView(i, columnWidths[i]); } catch (WriteException e) { e.printStackTrace(); } } } private WritableCellFormat getFormat() { WritableFont font = new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE, WritableFont.BOLD); WritableCellFormat format=new WritableCellFormat(font); try { format.setWrap(true); format.setAlignment(Alignment.CENTRE); format.setVerticalAlignment(VerticalAlignment.CENTRE); } catch (WriteException e) { e.printStackTrace(); } return format; }}

控制器中返回ModelAndView就好了

public ModelAndView doQuery(HttpServletRequest request, HttpServletResponse response) throws Exception {        FirstInvestmentForm firstInvestmentForm = (FirstInvestmentForm) this.bindForm(request);        FirstInvestmentBean firstInvestmentBean = firstInvestmentForm.getFirstInvestmentBean();        List
list = firstInvestmentService.getBeans1(firstInvestmentBean); Map
> model = new HashMap(); model.put("beans", list); return new ModelAndView(new ExcelView(), model); }

转载于:https://www.cnblogs.com/LinkinPark/p/5233039.html

你可能感兴趣的文章
艾级计算机的发展与挑战
查看>>
RocketMQ事务消息实战
查看>>
手把手教你做出好看的文本输入框
查看>>
zabbix 3.2.7 (源码包)安装部署
查看>>
vsCode 快捷键、插件
查看>>
网络最大流问题算法小结 [转]
查看>>
iOS推送消息报错误“Domain=NSCocoaErrorDomain Code=3000”的可能问题
查看>>
kvm-1
查看>>
leetcode 64. Minimum Path Sum
查看>>
textkit
查看>>
CentOS7+CDH5.14.0安装CDH错误排查: HiveServer2 该角色的进程已退出。该角色的预期状态为已启动...
查看>>
The Oregon Trail 俄勒冈之旅
查看>>
Excel VBA连接MySql 数据库获取数据
查看>>
Developing a Service Provider using Java API(Service Provider Interface)(转)
查看>>
oschina程序开发
查看>>
nested exception is java.lang.NoClassDefFoundError: net/sf/cglib/proxy/CallbackFilter
查看>>
“正在注册字体”问题解决
查看>>
iOS开发-OpenGL ES入门教程1
查看>>
Java 设计模式专栏
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>