package excel;
import java.io.File;
import java.io.IOException;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class TestExcel {
/**
* @param args
*/
public static void main(String[] args) {
writeExcel("e:/test/a.xls");
}
/**
* 生成一个Excel文件
*
* @param fileName
* 要生成的Excel文件名
*/
public static void writeExcel(String fileName) {
WritableWorkbook wwb = null;
WritableCellFormat wcf = new WritableCellFormat();
try {
// 首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = Workbook.createWorkbook(new File(fileName));
} catch (IOException e) {
e.printStackTrace();
}
if (wwb != null) {
// 创建一个可写入的工作表
// Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet("sheet1", 0);
try {
//设置边框
wcf.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);
// 把水平对齐方式指定为居中
wcf.setAlignment(jxl.format.Alignment.CENTRE);
// 把垂直对齐方式指定为居中
wcf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
// 下面开始添加单元格
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 5; j++) {
// 这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
Label labelC = new Label(j, i, "第" + (i + 1) + "行,第" + (j + 1) + "列", wcf);
/*
* WritableFont font1=new
* WritableFont(WritableFont.TIMES
* ,16,WritableFont.BOLD); ① WritableCellFormat
* format1=new WritableCellFormat(font1); ② Label
* label=new Label(0,0,”data 4 test”,format1) ③
* 其中①指定了字串格式
* :字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用
* ,jExcelAPI的java-doc中有详细列表,这里不再列出。
* ②处代码使用了WritableCellFormat类
* ,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。
* ③处使用了Label类的构造子,指定了字串被赋予那种格式。
*/
// 将生成的单元格添加到工作表中
ws.addCell(labelC);
}
}
// 合并单元格
ws.mergeCells(0, 0, 2, 3);// 最小列,最小行,最大列,最大行 从0开始
// 将第一行的高度设为400
ws.setRowView(0, 400);
// 设置第一行列宽为40
ws.setColumnView(0, 40);
} catch (RowsExceededException e1) {
e1.printStackTrace();
} catch (WriteException e1) {
e1.printStackTrace();
}
try {
// 从内存中写入文件中
wwb.write();
// 关闭资源,释放内存
wwb.close();
} catch (IOException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
}
}
}
上面的是一个纯的java类,输出本地文件,如果要放在服务器上来实时生成的话就要用到下面的:
这个是写在action里面的方法:
public String downExcel() {
boolean flag = true;
HttpServletResponse response = ServletActionContext.getResponse();
String fname = "中文的";
try {
fname=new String(fname.getBytes("GBK"),"ISO-8859-1");
} catch (UnsupportedEncodingException e2) {
e2.printStackTrace();
}//解决文件中文名称问题
response.setHeader("Content-disposition", "attachment; filename="
+ fname + ".xls");// 设定输出文件头
response.setContentType("text/html;charset=GBK");
response.setContentType("application/vnd.ms-excel;charset=GBK");
response.setContentType("application/octet-stream;charset=GBK");
OutputStream os = null;
WritableCellFormat wcf = null;
jxl.write.WritableWorkbook wwb = null;
try {
os = response.getOutputStream();
wcf = new WritableCellFormat();
wwb = Workbook.createWorkbook(os);
} catch (Exception e) {
flag = false;
}
if (wwb != null) {
WritableSheet ws = wwb.createSheet("sheet1", 0);
try {
wcf.setBorder(jxl.format.Border.ALL,
jxl.format.BorderLineStyle.THIN);
wcf.setAlignment(jxl.format.Alignment.CENTRE);
wcf.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 5; j++) {
Label labelC = new Label(j, i, "第" + (i + 1) + "行,第"
+ (j + 1) + "列", wcf);
ws.addCell(labelC);
}
}
ws.mergeCells(0, 0, 2, 3);
ws.setRowView(0, 400);
ws.setColumnView(0, 40);
} catch (RowsExceededException e1) {
flag = false;
e1.printStackTrace();
} catch (WriteException e1) {
flag = false;
e1.printStackTrace();
}
try {
wwb.write();
wwb.close();
os.flush();
os.close();
os=null;
response.flushBuffer();
} catch (IOException e) {
flag = false;
e.printStackTrace();
} catch (WriteException e) {
flag = false;
e.printStackTrace();
}
}
if (flag) {
return SUCCESS;
} else {
return ERROR;
}
}
要注意的是:还有一个步骤要注意,就是要在目标页面的最后面上写上下面的内容
不然会出现:
getOutputStream() has already been called for this response
具体原因如下:
http://qify.iteye.com/blog/747842
意思是:在释放jsp中使用的对象,会调用response.getWriter(),因为这个方法是和response.getOutputStream()相冲突的!所以会出现以上这个异常
<%
out.clear();
out=pageContext.pushBody();
%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="/common/contextPath.jsp"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>下载成功成功</title>
</head>
<body>
<h1>下载成功</h1>
<%
out.clear();
out=pageContext.pushBody();
%>
</body>
</html>
分享到:
相关推荐
标题中的“sql自动生成代码工具(Excel制作)”指的是一个基于Excel的应用,它允许用户设计数据库表结构,并能根据设计自动生成SQL代码。这个工具可能是为了简化数据库建模过程,尤其是对于那些不熟悉或者不喜欢使用...
例如,`df = pd.read_excel('工资数据.xlsx')`,这样就将Excel文件转换为了一个可操作的数据结构。 4. **数据处理**:在工资条制作中,可能需要对原始数据进行清洗、计算、排序等操作。Pandas提供了丰富的数据处理...
当我们需要临时离开电脑而又不想关闭Excel文档时(并不局限于Excel文档,也可以是其它,但前提是要运行Excel),可以启动这个功能,这样其他人就不可能看到您不希望他们看到的东西。 15、尝试打开忘记密码的文件。...
标题中的“Excel制作的抽奖器”指的是利用Microsoft Excel这一电子表格软件开发的一种简易抽奖程序。Excel作为一款功能强大的数据处理工具,不仅可以用于数据分析和报表制作,还能够通过其内置的宏(VBA)编程功能来...
在学习VBA制作Excel报表时,你需要掌握以下关键知识点: 1. **VBA基础知识**:了解VBA的基本语法,如变量声明、数据类型、控制结构(如If...Then语句、For...Next循环)、函数和过程。 2. **对象模型**:理解Excel...
当我们需要临时离开电脑而又不想关闭Excel文档时(并不局限于Excel文档,也可以是其它,但前提是要运行Excel),可以启动这个功能,这样其他人就不可能看到您不希望他们看到的东西。 15、尝试打开忘记密码的文件。...
首先,我们来看Excel在数独游戏中的应用。Excel表格的格子结构天然适合构建数独盘面,每个单元格可以用来表示盘面上的一个数字。在“数独游戏.xls”文件中,我们可以看到9x9的网格布局,每个小格子都预设了初始数字...
如果你是高手,我是菜鸟,你有不使用本源码的权利,请不要随意谩骂;欢迎给予意见和建议。 源码名称:网客库存管理系统(在线excel编辑) 版本号:V1.0 作者:CHN网客www.chnetter.com 下载地址:...
最新公司给了好多EXCEL的复习题库,让我们去复习考试,一个一个去看实在有点枯燥,记忆起来比较困难就想在网上找一下有没有通过导入EXCEL题库,自己复习的软件,然后找了半天不是运行不了就是要收费之类的,总是找不...
总的来说,这个项目对于需要处理大量Excel数据并将其导入到数据库的IT从业者非常有价值。不仅可以节省手动操作的时间,还能避免人为错误,提升工作效率。同时,通过研究该项目,你也能提升自己的.NET编程技能,特别...
在Excel 2007中,宏是一种强大的工具,它允许用户通过录制和编辑VBA(Visual Basic for Applications)代码来自动化重复性任务。在这个例子中,“excel2007宏制作甘特图”旨在教我们如何利用宏来创建甘特图,这是一...
首先需要在解决方案资源管理器中右键点击“引用”->“添加引用”,然后在COM类别中选择"Microsoft Excel 16.0 Object Library"(版本可能因安装的Office版本不同而不同),这样就可以在C#代码中使用Excel相关的类和...
从压缩包子文件的文件名称"GOOGLE导出excel数据-通用版V2.0.xlsm"来看,这是一个启用宏的Excel文件,很可能包含了实现KML转换的宏代码。.xlsm扩展名表示这是一个Excel Macro-Enabled工作簿,意味着用户可能需要运行...
在现代Web应用中,有时我们需要将用户数据导出为Excel文件以便于分析或存储。"纯JavaScript导出Excel"的功能正是解决这个问题的一种方法,它允许开发者在不依赖任何后端服务或第三方库的情况下,直接在浏览器端将...
如果你需要对已有的Excel文件进行操作,`openpyxl`是更好的选择。 使用`openpyxl`读取和修改Excel文件的基本步骤如下: ```python from openpyxl import load_workbook # 加载现有文件 workbook = load_workbook...
在Excel VBA(Visual Basic for Applications)中,日期控件是一种非常实用的工具,它允许用户在用户界面中选择特定的日期,增强了交互性和数据输入的准确性。本篇将详细介绍如何在Excel VBA中使用日期控件,并提供...
在Excel中,有很多实用技巧可以帮助我们提升数据处理和分析的效率。以下是一些关键知识点,它们不仅涵盖了基础操作,还包括了一些高级应用,旨在让你更好地掌握Excel的精髓。 1. **快捷键**:熟练掌握Excel快捷键是...
从压缩包子文件的文件名称“Excel汇总程序”来看,这可能是包含该程序的源代码文件,比如一个VBA模块或一个Excel工作簿。打开这个文件后,我们可以看到具体的代码逻辑和实现方法。在实际应用中,这样的程序可以大大...
首先,我们来看看`ExcelTemplateExportUtil.java`,这个类是导出工具的核心,它实现了将数据填充到Excel模板中的功能。EasyPOI通过读取Excel模板文件,然后根据模板中的占位符,用实际的数据进行替换,从而生成完整...
当我们需要临时离开电脑而又不想关闭Excel文档时(并不局限于Excel文档,也可以是其它,但前提是要运行Excel),可以启动这个功能,这样其他人就不可能看到您不希望他们看到的东西。 15、尝试打开忘记密码的文件。...