jsp导出excel之格式控制

   在做excel导出的时候,有两个选择摆在面前,我先是做了一个js的,但不支持FF,而且要求浏览器降低安全性,才可以。前几天看了js导出pdf支持FF,估计js导出excel也能支持FF,类似的原理。不过用户体验不好,还是决定采用服务器生成的方式。

 

       这个时候有两个选择,一个是poi,另一个是jxl。我选择了poi,因为对它比较熟悉。据说jxl也是很好用的。

 

       这其中没什么好说的。有一点格式控制,花了一点功夫,比如合并单元格之类,字体,色彩等样式。

 

      代码如下:

 

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@page import="org.apache.poi.hssf.usermodel.*"%>
<%@ page import="org.apache.poi.hssf.util.Region" %>
<%
	//获取参数
	String searcWord = request.getParameter("searchword");
	
	if (null == searcWord || "".equals(searcWord.trim())) {
		return;

	} else {
	
	    searcWord=new String(searcWord.getBytes("iso-8859-1"),"UTF-8");
		

		Connection con = SQLServices.getConnection();
		ResultSet rs = con.executeSelect("qsssd",
		searcWord, false);

		if (null == rs) {
			return;
		} else {
			//开始构造excel;

			try {

		// 创建新的Excel 工作簿
		HSSFWorkbook workbook = new HSSFWorkbook();

		// 在Excel工作簿中建一工作表,其名为缺省值。
		// 也可以指定工作表的名字。
		HSSFSheet sheet = workbook.createSheet("Report");
		
	
			//==========================设置字体样式start==========================
			HSSFCellStyle cs = workbook.createCellStyle();
			HSSFFont font = workbook.createFont();
			font.setFontName("宋体");// 设置字体
			font.setFontHeightInPoints((short) 18);// 字体大小
			font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
			cs.setFont(font);
			cs.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平居中
			cs.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 下边框
			cs.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
			cs.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框
			cs.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框

			HSSFCellStyle cs2 = workbook.createCellStyle();
			HSSFFont font2 = workbook.createFont();
			font2.setFontName("宋体");// 设置字体
			font2.setFontHeightInPoints((short) 12);// 字体大小
			font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
			cs2.setFont(font2);
			cs2.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平居中
			cs2.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 下边框
			cs2.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
			cs2.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框
			cs2.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框

			HSSFCellStyle cs3 = workbook.createCellStyle();
			HSSFFont font3 = workbook.createFont();
			font3.setFontName("宋体");
			font3.setFontHeightInPoints((short) 10);
			cs3.setFont(font3);
			cs3.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平居中
			cs3.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 下边框
			cs3.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
			cs3.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框
			cs3.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框

			HSSFCellStyle cs4 = workbook.createCellStyle();
			HSSFFont font4 = workbook.createFont();
			font4.setFontName("宋体");
			font4.setFontHeightInPoints((short) 12);
			cs4.setFont(font4);
			cs4.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平居中
			cs4.setBorderBottom(HSSFCellStyle.BORDER_THIN);// 下边框
			cs4.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
			cs4.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框
			cs4.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框
			HSSFCellStyle dateCellStyle=workbook.createCellStyle(); 
			short defor=workbook.createDataFormat().getFormat("yyyy-mm-dd"); 
			cs4.setDataFormat(defor);
			//==========================设置字体样式end==========================


		//设置列宽
		sheet.setColumnWidth((short) 0, (short) (35.7*48));//n为列高的像素数
		sheet.setColumnWidth((short) 1, (short) (35.7*100));
		sheet.setColumnWidth((short) 2, (short) (35.7*120));
		sheet.setColumnWidth((short) 3, (short) (35.7*130));
		sheet.setColumnWidth((short) 4, (short) (35.7*310));
		sheet.setColumnWidth((short) 5, (short) (35.7*100));
		sheet.setColumnWidth((short) 6, (short) (35.7*80));
		sheet.setColumnWidth((short) 7, (short) (35.7*150));

		// 打印设置 
		
		HSSFPrintSetup hps = sheet.getPrintSetup(); 
		hps.setPaperSize((short) 9); // 设置A4纸 
		// hps.setLandscape(true); // 将页面设置为横向打印模式 
		sheet.setHorizontallyCenter(true); // 设置打印页面为水平居中 
		sheet.setVerticallyCenter(true); // 设置打印页面为垂直居中 
		 //wb.setPrintArea(0, "$A$2:$e$" + rowNum + 2);// 打印区域设置. 
		
		int rowNum = 0;// 行标
		//	int colNum = 0;// 列标
		// 建立表头信息
		// 在索引0的位置创建行(最顶端的行)

		//第一行,表格标题
		HSSFRow row0 = sheet.createRow((short) 0);
		HSSFCell cell_0 = row0.createCell((short) 0);
		cell_0.setCellType(HSSFCell.CELL_TYPE_STRING);
		cell_0.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell_0.setCellStyle(cs);
		cell_0.setCellValue("请示登记单");   
		sheet.addMergedRegion(new Region(0,(short)0,0,(short)7)); //合并单元格
		row0.setHeightInPoints((float)22);//设置行高
		

		//第二行 列标题
		HSSFRow row = sheet.createRow((short) 1);
		row.setHeightInPoints((float)22);//设置行高
		// 单元格
		// 在当前行的colNum列上创建单元格
		HSSFCell cell_1 = row.createCell((short) 0);

		// 定义单元格为字符类型,也可以指定为日期类型、数字类型
		cell_1.setCellType(HSSFCell.CELL_TYPE_STRING);
		// 定义编码方式,为了支持中文,这里使用了ENCODING_UTF_16
		cell_1.setEncoding(HSSFCell.ENCODING_UTF_16);
		// 为单元格设置格式
		cell_1.setCellStyle(cs2);
		// 添加内容至单元格
		cell_1.setCellValue("序号");

		HSSFCell cell1 = row.createCell((short) 1);
		cell1.setCellType(HSSFCell.CELL_TYPE_STRING);
		cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell1.setCellStyle(cs2);
		cell1.setCellValue("文件序号");

		HSSFCell cell2 = row.createCell((short) 2);
		cell2.setCellType(HSSFCell.CELL_TYPE_STRING);
		cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell2.setCellStyle(cs2);
		cell2.setCellValue("文件编号");

		HSSFCell cell3 = row.createCell((short) 3);
		cell3.setCellType(HSSFCell.CELL_TYPE_STRING);
		cell3.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell3.setCellStyle(cs2);
		cell3.setCellValue("日期");

		HSSFCell cell4 = row.createCell((short) 4);
		cell4.setCellType(HSSFCell.CELL_TYPE_STRING);
		cell4.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell4.setCellStyle(cs2);
		cell4.setCellValue("标题");

		HSSFCell cell5 = row.createCell((short) 5);
		cell5.setCellType(HSSFCell.CELL_TYPE_STRING);
		cell5.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell5.setCellStyle(cs2);
		cell5.setCellValue("拟稿部门");

		HSSFCell cell6 = row.createCell((short) 6);
		cell6.setCellType(HSSFCell.CELL_TYPE_STRING);
		cell6.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell6.setCellStyle(cs2);
		cell6.setCellValue("拟稿人");

		HSSFCell cell7 = row.createCell((short) 7);
		cell7.setCellType(HSSFCell.CELL_TYPE_STRING);
		cell7.setEncoding(HSSFCell.ENCODING_UTF_16);
		cell7.setCellStyle(cs2);
		cell7.setCellValue("备注");

		long size = rs.getRecordCount();
		System.out.println("==========>" + size);

		HSSFCell data_cell0 = null;
		HSSFCell data_cell1 = null;
		HSSFCell data_cell2 = null;
		HSSFCell data_cell3 = null;
		HSSFCell data_cell4 = null;
		HSSFCell data_cell5 = null;
		HSSFCell data_cell6 = null;
		HSSFCell data_cell7 = null;

	
		for (int i = 0; i < size; i++) {
			// 新建第rowNum行
			row = sheet.createRow((short) i + 2);//从第三行开始
			row.setHeightInPoints((float)22);//设置行高
			data_cell0 = row.createCell((short) 0);
			data_cell0.setEncoding(HSSFCell.ENCODING_UTF_16);
			data_cell0.setCellStyle(cs3);
			data_cell0.setCellValue(i+1);
			//文件序号
			data_cell1 = row.createCell((short) 1);
			data_cell1.setEncoding(HSSFCell.ENCODING_UTF_16);
			data_cell1.setCellStyle(cs3);
			data_cell1.setCellValue(rs.getString("WJNumber"));
			//文件编号
			data_cell2 = row.createCell((short) 2);
			data_cell2.setEncoding(HSSFCell.ENCODING_UTF_16);
			data_cell2.setCellStyle(cs3);
			data_cell2.setCellValue(rs.getString("Fd_No"));
			//日期
			data_cell3 = row.createCell((short) 3);
			data_cell3.setEncoding(HSSFCell.ENCODING_UTF_16);
			data_cell3.setCellStyle(cs3);
			String tempDate = rs.getString("QSDate");
			if(tempDate.length()>10){
				tempDate= tempDate.replaceAll(" 00:00:00","");
			}
			tempDate = tempDate.replaceAll("\\.","-");
			data_cell3.setCellValue(tempDate);
			//标题
			data_cell4 = row.createCell((short) 4);
			data_cell4.setEncoding(HSSFCell.ENCODING_UTF_16);
			data_cell4.setCellStyle(cs3);
			data_cell4.setCellValue(rs.getString("fldSubject"));
			//拟稿部门
			data_cell5 = row.createCell((short) 5);
			data_cell5.setEncoding(HSSFCell.ENCODING_UTF_16);
			data_cell5.setCellStyle(cs3);
			data_cell5.setCellValue(rs.getString("fd_planDept"));
			//拟稿人
			data_cell6 = row.createCell((short) 6);
			data_cell6.setEncoding(HSSFCell.ENCODING_UTF_16);
			data_cell6.setCellStyle(cs3);
			data_cell6.setCellValue(rs.getString("seJbMan"));

			//备注
			data_cell7 = row.createCell((short) 7);
			data_cell7.setEncoding(HSSFCell.ENCODING_UTF_16);
			data_cell7.setCellStyle(cs3);
			data_cell7.setCellValue(rs.getString("Fd_Remark"));
			

		}
		
		//response.setCharacterEncoding("gbk");
 		response.setContentType("application/octet-stream");
   		response.setHeader("Content-Disposition", "attachment;filename=_Report.xls");
	    workbook.write(response.getOutputStream());
   	 	response.getOutputStream().flush();
    	response.getOutputStream().close();

		
		}catch(Exception e){
			e.printStackTrace();
		}
		
		}
		
		
		}
	
%>
jsp实现HTML表格导出和导入Excel功能 在日常开发中,我们需要能够把页面上一个表格的内容导出到Excel中,然后用户修改后再导回到表格中的功能。 在这里,通过使用JQUERY+JQUERY UI+JSON-LIB+POI实现这个功能数据导出设计:通过使用JQUERY分析表格的结构,读取表格结构数据构建JSON字符串,发送到后台,后台分析表格结构,然后生成Excel数据. 本程序基于是基于JDK1.5的,在MyEclipse环境下调试通过。 立即下载

相关推荐

实战解析:从Innovus到Calibre的LVS错误排查全流程

本文详细解析了从Innovus到Calibre的LVS错误排查全流程,涵盖物理验证关键步骤与工具链协同。通过实战案例分享,重点解决器件不匹配、连接性错误等常见问题,并提供GDS导出规范、网表修正策略等实用技巧,帮助工程师高效完成芯片设计物理验证。

9o8p7i6u5y的博客 1036

JXLS实战指南:基于模板的Java Excel报表生成与性能优化

在Java企业级应用开发中,数据导出与报表生成是常见的核心需求,尤其涉及复杂格式的Excel文件时。传统基于Apache POI的硬编码方式,虽然功能强大,但存在开发效率低、样式维护难、代码耦合度高等痛点。其原理是通过在Java代码中直接操作单元格,手动设置值和样式,导致业务逻辑与展现层紧密绑定。为了解决这些问题,模板引擎技术应运而生,它实现了数据与样式的关注点分离,将复杂的表格布局、格式和公式设计交由专业的Excel工具处理,而Java代码仅负责准备数据和执行业务逻辑。这种模式显著提升了开发效率和可维护性

weixin_34176694的博客 347

Android Studio打包全攻略---从入门到精通

初出茅庐 手动打包怎么手动打包项目写完了,现在需要把应用上传到市场,问题出现—怎么把代码变成.apk(Android的可安装文件)。 1. 创建签名文件 2. 填写好签名参数 3. 生成APK 注意:签名的密码和密匙的密码注意保管,不要忘了,签名文件别泄漏了,也别搞丢了为什么要打包我最开始就有这个疑问,我们的代码不是点了下运行按钮就直接安装到手机上了吗,我们在在项目Project

我早就想,要这样载着你,翻山越岭 2万+

jsp导出excel文件并设定单元格格式

   response.setHeader("Content-disposition","inline; filename=test1.xls");   //以上这行设定传送到前端浏览器时的档名为test1.xls   //就是靠这一行,让前端浏览器以为接收到一个excel档%>Excel档案呈现方式.xlsText{mso-number-format:"/@";}              

bjnihao的专栏 2498

从BIN文件到可烧录程序:深入理解ADI DSP程序读取背后的原理与安全边界

本文深入探讨了ADI DSP程序从BIN文件到可烧录程序的转换原理与安全边界,详细解析了JTAG接口、仿真器工作流程及Flash存储结构。通过Visual DSP++工具,开发者可以理解程序读取的底层机制,同时强调了知识产权保护的重要性,为嵌入式开发提供了实用建议。

weixin_27956639的博客 263

【全开源】旅行吧旅游门票预订系统源码(FastAdmin+ThinkPHP+Uniapp)

此外,系统还会根据我的旅行计划和喜好,为我推荐合适的景点和门票,让我的旅行更加丰富多彩。旅游门票预订系统的出现,不仅简化了门票预订的流程,还提高了旅行的便捷性和效率。一款基于FastAdmin+ThinkPHP+Uniapp开发的旅游门票预订系统,支持景点门票、导游产品便捷预订、美食打卡、景点分享、旅游笔记分享等综合系统,提供前后台无加密源码,支持私有化部署。如今,有了旅游门票预订系统,这些问题都能迎刃而解。智能推荐:系统还会根据你的旅行计划和喜好,为你推荐合适的景点和门票,让你的旅行更加丰富多彩。

2401_84413757的博客 1301

JSP导出Excel设计及设置excel的样式为文本

首先在jsp的头部添加以下代码   response.setContentType("application/vnd.ms-excel;charset=GBK"); response.setHeader("Content-Disposition",    "attachment;filename="  + new String("test.xls".getBytes("gb2312"),

mikemoon的专栏 2267

傅里叶红外(FT-IR):Origin数据处理、光谱绘图、曲线优化、图形美化

双击 X 轴,选择“轴线和刻度线”,设置粗细为“2”(较常用的粗细度),主刻度和次刻度为“朝内”,然后在此对话框内选择左轴,设置粗细为“2”,主刻度和次刻度为“无”,上轴和右轴同左轴。(4)在第二个图层基础上新建第三个图层,针对第二组数据重复上述中(1)和(2)的操作,再添加第三组数据的折线图,并重复上述中(3)的操作。FTIR 光谱上的峰只有相对的强弱,因此只分析一个光谱上的一个峰的强度大小并无意义,一般分析两个光谱在同一位置的峰强相对大小,或者分析同一光谱不同位置的峰强相对大小并与另一光谱进行比较。

qiushireader的博客 3932

jsp中怎么设置背景图片_纸张大小16开怎么设置-在Excel2010中怎么设置字号大小呢?...

一 : 在Excel2010中怎么设置字号大小呢?Excel2010中,用户可以在“开始”功能区或“设置单元格格式”对话框中设置被选中单元格中的全部或部分字号,下面分别介绍操作方法。一起来看看吧!软件名称:Office 2007四合一精简版 58M (含Excel 、PowerPoint、Word、Access)软件大小:58MB 更新时间:2014-04-01步骤一、在电脑桌面的Excel201...

weixin_39639643的博客 297

多源异构数据融合(Kaggle+Google Trends联合分析)

本文详细介绍了如何利用Python实现多源异构数据融合,以Kaggle电商销售数据与Google Trends搜索指数为例,展示了数据清洗、预处理、时间对齐、数据合并、相关性分析、回归建模和可视化全过程。数据预处理与内存优化通过分块加载、数据类型转换和缺失值处理,有效降低了大规模数据在内存中的占用,并确保数据质量。时间对齐与数据融合策略采用重采样与内连接方法对齐不同数据源的时间维度,实现了高质量数据的融合,为后续联合分析奠定基础。模型构建与分析。

闲人编程的博客 1016

【从零开始学习 UVM】1.1、UVM 概述 —— Preface

【从零开始学习 UVM】1.1、UVM 概述 —— Preface

努力,加油每一天鸭~ 824

Qt5.9中函数setAlignment()用法

函数setAlignment()主要将是消除布局中的空隙,让两个控件紧紧挨在一起。当使用几个QWidget,并且在其中添加一个固定大小的QLabel时,用函数setAlignment(),可以将这几个QLabel无缝拼接起来。mainLayout-&gt;setAlignment(Qt::AlignCenter);参考内容:...

净无邪博客 3万+

Electron - Electron failed to install correctly, please delete node_modules/electron and try install

Electron安装失败:Electron failed to install correctly, please delete node_modules/electron and try installing again,electron安装报错:Electron failed to install correctly...解决方案,Electron 未能正确安装,请删除 node_modules/electron,然后再次尝试安装,如何解决这个问题,手把手教你解决,在yarn dev时报错,electr

🏆 前端领域优质创作者 4367

java操作excel合并单元格,出现框线显示不全

// 提前设好的单元格样式 CellStyle cs = wb.createCellStyle(); cs.setVerticalAlignment(VerticalAlignment.CENTER); cs.setAlignment(HorizontalAlignment.CENTER); Font font = wb.createFont(); font.setBold(true); cs.s...

u013725394的博客 4871

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

动态合并excel单元格

动态合并excel单元格

Java小白的博客 1491

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

在jsp页面中导出Excel

注:此页面不加任何样式,如想要边框在table中加入 border="1"

JAVAGirl 268

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

JSP——输出9x9表格

jsp输出9x9表格其实很简单,就和Java输出9x9表格一样。 第一种: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UT...

javanofa的博客 4647

POI HSSF 单元格和字体设置

添加区域,合并单元格 Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo,(short)columnTo); sheet.addMergedRegion(region); //得到所有区域 sheet.getNumMergedRegions() render_cod

zzycgfans的blog 1万+

干货|数据仓库工具hive面试题集锦

黑马程序员视频库播妞微信号:heiniu526传智播客旗下互联网资讯、学习资源免费分享平台进入DATE时代,大数据技术成为互联网发展的核心要素之一。与此同时大数据开发工程师的薪资也成为行...

传智播客的专栏 705
上一篇: 银行取钱一事
下一篇: js导出excel之格式控制
javaSCJ
博客等级 码龄19年 2粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值