在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<headers.length;i++){
row.createCell(i).setCellValue(headers[i]);
}
while(rs.next()){
row=sheet.createRow(rowIndex++);
for(int i=0;i<headers.length;i++){
row.createCell(i).setCellValue(rs.getObject(i+1).toString());
}
}
} public static Workbook fillExcelDataWithTemplate(ResultSet rs,String templateFileName)throws Exception{
InputStream inp=ExcelUtil.class.getResourceAsStream("/com/java1234/template/"+templateFileName);
POIFSFileSystem fs=new POIFSFileSystem(inp);
Workbook wb=new HSSFWorkbook(fs);
Sheet sheet=wb.getSheetAt(0);
// 获取列数
int cellNums=sheet.getRow(0).getLastCellNum();
int rowIndex=1;
while(rs.next()){
Row row=sheet.createRow(rowIndex++);
for(int i=0;i<cellNums;i++){
row.createCell(i).setCellValue(rs.getObject(i+1).toString());
}
}
return wb;
} public static String formatCell(HSSFCell hssfCell){
if(hssfCell==null){
return "";
}else{
if(hssfCell.getCellType()==HSSFCell.CELL_TYPE_BOOLEAN){
return String.valueOf(hssfCell.getBooleanCellValue());
}else if(hssfCell.getCellType()==HSSFCell.CELL_TYPE_NUMERIC){
return String.valueOf(hssfCell.getNumericCellValue());
}else{
return String.valueOf(hssfCell.getStringCellValue());
}
}
}
}
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<String, Object> 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<TerminalSendOtherBean> terminalSendOtherBeans = (List<TerminalSendOtherBean>) 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<TerminalSendOtherBean> 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<FirstInvestmentOtherBean1> list = firstInvestmentService.getBeans1(firstInvestmentBean);
Map<String, List<FirstInvestmentOtherBean1>> model = new HashMap();
model.put("beans", list);
return new ModelAndView(new ExcelView(), model);
}

j2e中操作EXCEL的更多相关文章

  1. C#项目中操作Excel文件——使用NPOI库

    转载自:http://blog.csdn.net/dcrmg/article/details/52356236# 感谢-牧野- 实际C#项目中经常会涉及到需要对本地Excel文件进行操作,特别是一些包 ...

  2. python中操作excel数据

    python操作excel,python有提供库 本文介绍openpyxl,他只支持新型的excell( xlsx)格式,读取速度还可以 1.安装 pip install openpyxl 2.使用 ...

  3. 使用开源免费类库在.net中操作Excel

    自从上次找到NPOI之后,根据园友提供的线索以及Google,又找到了一些开源免费的类库,所以都简单体验了一遍. 主要找到以下类库: MyXls(http://sourceforge.net/proj ...

  4. Asp.net中操作Excel的代码解析

    一 . 使用Excel对象模型创建Excel文档: 1.创建简单的文档 try { 3 //创建Excel程序对象 Microsoft.Office.Interop.Excel.Application ...

  5. MySQL 中操作excel表格总结

    最近在负责一个项目的落地工作,需要每天导出客户通讯录进行统计各地区注册用户数.使用用户数.未使用用户数.注册不符合规范的用户等等操作,刚开始用户数量比较少,直接在excel中筛选查询就行,但是随着用户 ...

  6. python中操作excel数据 封装成一个类

    本文用python中openpyxl库,封装成excel数据的读写方法 from openpyxl import load_workbook from openpyxl.worksheet.works ...

  7. python中操作excel

    1.首先要安装xlrd cmd后运行pit install xlrd,安装好xlrd后会有成功提示,xlrd是读取excel 2.导入xlrd包 import xlrd 3.打开excel文档 tab ...

  8. POI操作Excel

    POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...

  9. JAVA的POI操作Excel

    1.1Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组 ...

随机推荐

  1. c# 岛2 小辅助~~~ 钓鱼 连击

  2. php的二维数组排序

    //建立一个$arr的二维数组 $arr=array( array('name'=>'e','age'=>5), array('name'=>'b','age'=>2), ar ...

  3. Percona XtraBackup的部分备份与恢复/单库备份/单表备份/指定库备份/指定表备份

    本文是翻译的Percona XtraBackup 2.2版的官方文档,原文地址在此:https://www.percona.com/doc/percona-xtrabackup/2.2/innobac ...

  4. 在树莓派上编译安装golang环境

    请看我在掘金的文章

  5. WPF 依赖属性源码 洞察微软如何实现DependencyProperty

    依赖属性DependencyProperty是wpf最重要的一个类,理解该类如何实现对学习wpf帮助很大! 终于找到了该类的源码!仔细阅读源码,看看微软如何玩的花招! File: Base\Syste ...

  6. Zabbix实战-简易教程--低层次发现(LLD)

    一.概述 自动发现(LLD)提供了一种在为不同实体自动创建监控项,触发器和图形的方法.例如,Zabbix可以在你的机器上自动监控磁盘或网卡,而无需为每个磁盘或网卡手动创建监控项.(LLD) 此外,可以 ...

  7. web中的简单全选反选

    <html> <body> <table> <tr> <th><input type="checkbox" onc ...

  8. javascript初识

    1.什么是js 基于对象和事件驱动并且具有相对安全性的客户端脚本语言,由网景公司开发.     2.js数据类型   1.基本数据类型 undefined,null,number,boolean,st ...

  9. c语言基础学习05

    =============================================================================涉及到的知识点有:for循环有两种写法.数组. ...

  10. Linux系统常用命令权威指南

    <一>线上查询及帮助命令(2)1.man man [选项] [命令] 查看命令帮助,命令的词典,更复杂的还有info,但不常用. #man cd-a 显示所有的手册页,不只是显示第一个-f ...