j2e中操作EXCEL
在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的更多相关文章
- C#项目中操作Excel文件——使用NPOI库
转载自:http://blog.csdn.net/dcrmg/article/details/52356236# 感谢-牧野- 实际C#项目中经常会涉及到需要对本地Excel文件进行操作,特别是一些包 ...
- python中操作excel数据
python操作excel,python有提供库 本文介绍openpyxl,他只支持新型的excell( xlsx)格式,读取速度还可以 1.安装 pip install openpyxl 2.使用 ...
- 使用开源免费类库在.net中操作Excel
自从上次找到NPOI之后,根据园友提供的线索以及Google,又找到了一些开源免费的类库,所以都简单体验了一遍. 主要找到以下类库: MyXls(http://sourceforge.net/proj ...
- Asp.net中操作Excel的代码解析
一 . 使用Excel对象模型创建Excel文档: 1.创建简单的文档 try { 3 //创建Excel程序对象 Microsoft.Office.Interop.Excel.Application ...
- MySQL 中操作excel表格总结
最近在负责一个项目的落地工作,需要每天导出客户通讯录进行统计各地区注册用户数.使用用户数.未使用用户数.注册不符合规范的用户等等操作,刚开始用户数量比较少,直接在excel中筛选查询就行,但是随着用户 ...
- python中操作excel数据 封装成一个类
本文用python中openpyxl库,封装成excel数据的读写方法 from openpyxl import load_workbook from openpyxl.worksheet.works ...
- python中操作excel
1.首先要安装xlrd cmd后运行pit install xlrd,安装好xlrd后会有成功提示,xlrd是读取excel 2.导入xlrd包 import xlrd 3.打开excel文档 tab ...
- POI操作Excel
POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...
- JAVA的POI操作Excel
1.1Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组 ...
随机推荐
- 安卓电量优化之JobScheduler使用介绍
版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.JobScheduler概述 JobScheduler是安卓5.0版本推出的API,允许开发者在符合某些条件时创建执行在后台的任务.在Andro ...
- 常用数学符号的 LaTeX 表示方法
常用数学符号的 LaTeX 表示方法 (以下内容主要摘自"一份不太简短的 LATEX2e 介绍") 1.指数和下标可以用^和_后加相应字符来实现.比如: 2.平方根(square ...
- Core Animation 文档翻译 (第一篇)
Core Animation 文档翻译(第一篇) 2018-01-13 星期6 前言:作为iOS 开发,官方文档的阅读是很有必要的,值此周末便写下此文.作为iOS 实际经验3年的开发,之前的应用 ...
- 1、ABPZero系列教程之拼多多卖家工具 前言
此系列文章围绕着拼多多卖家工具来介绍ABPZero的使用,内容包括手机登录.手机注册.拼团提醒.微信公众号绑定帐号.有拼团发送消息到微信公众号(只要关注过微信公众号并已绑定系统帐号). 学习此系列必备 ...
- Effecvtive Java Note
代码应该被重用,而不是被拷贝 同大多数学科一样,学习编程的艺术首先要学会基本的规则,然后才能知道什么时候可以打破这些规则 创建和销毁对象 1.考虑用静态工厂方法代替构造器. 优势:有名称.不必再每 ...
- 2017 年“认证杯”数学中国数学建模网络挑战赛 C题思路讲解
之前有小伙伴私信我叫我说说这次比赛C题的思路,怎么写的,我就写篇博客说说吧,仅供参考! 针对C题,该题目比较综合,是一个成熟的数模赛题,与国赛的相似性较高.一般而言,第一问难度较低,题目要求进行数据挖 ...
- BZOJ:4873: [Shoi2017]寿司餐厅
4873: [Shoi2017]寿司餐厅 首先很开心在膜你赛的时候做了出来. 看到数据范围,看到不能dp,看到贡献去重后计算,咦,流? 那就容易了,转最大权闭合子图,每个区间建一个点,取了就一定要取他 ...
- Dora.Interception, 一个为.NET Core度身打造的AOP框架:不一样的Interceptor定义方式
相较于社区其他主流的AOP框架,Dora.Interception在Interceptor提供了完全不同的编程方式.我们并没有为Interceptor定义一个接口,正是因为不需要实现一个预定义的接口, ...
- MVC 统一异常处理
在出现异常时,我们不希望将错语的原因让客户看见,常常会做一个404错误页面,将所有发生的异常都跳至该页面,并把异常信息写在日志中.步骤如下: 1.让我们看看Global.asax页面Applicati ...
- js第一课总结
一. 当引用了一个src="demo.js"后,scrpit中间不能有js类的任何方法,都不会被执行. <!DOCTYPE html PUBLIC "-//W3C/ ...