当前位置:文档之家› JAVA导出WORD与EXCEL

JAVA导出WORD与EXCEL

JAVA导出WORD与EXCEL
JAVA导出WORD与EXCEL

package ais.mytest.web;

/**

* 功能:主要实现数据导出Excel和Word功能* 日期:2008-2-28

*/

import ais.basic.service.BasicUtil;

import https://www.doczj.com/doc/3f10765632.html,mons.file.service.FileService; import ais.framework.web.BaseAction;

import ais.mytest.model.Employeer;

import ais.mytest.service.IemployeerService;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.text.DecimalFormat;

import jxl.write.NumberFormat;

import java.util.List;

import javax.servlet.ServletOutputStream; import jxl.Cell;

import jxl.Workbook;

import jxl.format.Alignment;

import jxl.format.UnderlineStyle;

import jxl.format.VerticalAlignment;

import jxl.format.Border;

import jxl.format.BorderLineStyle;

import jxl.format.BoldStyle;

import jxl.format.Colour;

import jxl.write.Blank;

import jxl.write.DateFormat;

import jxl.write.DateTime;

import https://www.doczj.com/doc/3f10765632.html,bel;

import jxl.write.WritableCellFormat;

import jxl.write.WritableFont;

import jxl.write.WritableImage;

import jxl.write.WritableSheet;

import jxl.write.WritableWorkbook;

//import com.ibm.icu.text.SimpleDateFormat;

//import com.lowagie.text.Cell;

import com.lowagie.text.Document;

import com.lowagie.text.Font;

import com.lowagie.text.Image;

import com.lowagie.text.PageSize;

import com.lowagie.text.Paragraph;

import com.lowagie.text.Table;

import com.lowagie.text.pdf.BaseFont;

import com.lowagie.text.rtf.RtfWriter2;

import java.awt.Color;

import java.io.InputStream;

import java.io.OutputStream;

import org.apache.struts2.ServletActionContext;

public class ExportAction extends BaseAction{

/**

*

*/

private static final long serialVersionUID = -3951404867065653031L;

FileService fileService;

BasicUtil basicUtil;

IemployeerService iemployeerService;

Employeer employeer;

String filename=System.currentTimeMillis()+".doc";

public ExportAction() {}

/**

* 功能:将数据库中的数据导出word

* 日期:2008-2-29

* @return

*/

// 复制一份新的RTF文件

public String getNewFilePath() throws Exception {

InputStream ins = ServletActionContext.getServletContext().getResourceAsStream("/empty.doc");

byte[] b = new byte[ins.available()];

ins.read(b);

ins.close();

String newFileName = ServletActionContext.getServletContext().getRealPath("")+ "/"+filename;

OutputStream ous = new FileOutputStream(newFileName);

ous.write(b);

ous.close();

return newFileName;

}

// 将二进制流写到客户端

public void writeNewFile(String newFilePath, String downloadFileName)

throws Exception {

File f = new File(newFilePath);

InputStream ins = new FileInputStream(f);

byte[] b = new byte[ins.available()];

ins.read(b);

ins.close();

/*

*/

/**

* 出现保存与打开对话框application/octet-stream,加上下面第二句是保存时能正确出现文件类型

*/

//getResponse().setContentType("application/octet-stream");

//getResponse().setHeader("Content-Disposition","attachment;filename=\""+ new String((downloadFileName).getBytes(),"ISO-8859-1") + "\";");

/**

* 直接打开word文档

*/

getResponse().setContentType("application/msword");

ServletActionContext.getResponse().getOutputStream().write(b);

//文件删除

if (f != null) {

f.delete();

}

}

/**

* @param em_name 姓名

* @param em_sex 性别

* @param em_age 年龄

* @param em_duty 职务

* @param em_pay 工资

* @param em_polity 政治面貌

* @param em_address 住址

*/

public void createWord(String eMname,String eMsex,int eMage,String eMduty, Double eMpay, String eMpolity,String eMaddress) throws Exception {

// 创建word文档

Document document = new Document(PageSize.A4);

// 输入word文档

String newFilePath = getNewFilePath();

RtfWriter2.getInstance(document, new FileOutputStream(newFilePath));

document.open();

// 中文字体

BaseFont bfChinese = BaseFont.createFont("STSongStd-Light","UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

Font fontChinese = new Font(bfChinese, 12, Font.BOLD);

Table table = new Table(4, 4);

Paragraph paragraph = new Paragraph("XX单位员工信息表", fontChinese);

paragraph.setAlignment(Paragraph.ALIGN_CENTER);

document.add(paragraph);

table.setBorderWidth(2);

table.setBorderColor(new Color(0, 0, 0));

table.setPadding(5);

table.setSpacing(0);

table.setAutoFillEmptyCells(true);

com.lowagie.text.Cell cell = new com.lowagie.text.Cell(new Paragraph("姓名", fontChinese));

table.addCell(cell);

cell = new com.lowagie.text.Cell(eMname);

table.addCell(cell);

cell = new com.lowagie.text.Cell(new Paragraph("性别", fontChinese));

table.addCell(cell);

cell = new com.lowagie.text.Cell(eMsex);

table.addCell(cell);

cell = new com.lowagie.text.Cell(new Paragraph("年龄", fontChinese));

table.addCell(cell);

cell = new com.lowagie.text.Cell(Integer.valueOf(eMage).toString());

table.addCell(cell);

cell = new com.lowagie.text.Cell(new Paragraph("政治面貌", fontChinese));

table.addCell(cell);

cell = new com.lowagie.text.Cell(eMpolity);

table.addCell(cell);

cell = new com.lowagie.text.Cell(new Paragraph("职务", fontChinese));

table.addCell(cell);

cell = new com.lowagie.text.Cell(eMduty);

table.addCell(cell);

cell = new com.lowagie.text.Cell(new Paragraph("工资", fontChinese));

table.addCell(cell);

cell = new com.lowagie.text.Cell(Double.valueOf(eMpay).toString());

//cell.setColspan(5);

table.addCell(cell);

cell = new com.lowagie.text.Cell(new Paragraph("住址", fontChinese));

table.addCell(cell);

cell = new com.lowagie.text.Cell(eMaddress);

cell.setColspan(3);

table.addCell(cell);

cell = new com.lowagie.text.Cell(new Paragraph("\n\n\n教育背景:\n\n\n", fontChinese));

cell.setVerticalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);

cell.setHorizontalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);

table.addCell(cell);

cell = new com.lowagie.text.Cell("");

cell.setVerticalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);

cell.setHorizontalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);

cell.setColspan(3);

table.addCell(cell);

cell = new com.lowagie.text.Cell(new Paragraph("\n\n\n工作经历\n\n\n",fontChinese));

cell.setVerticalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);

cell.setHorizontalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);

table.addCell(cell);

cell = new com.lowagie.text.Cell( "");

cell.setVerticalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);

cell.setHorizontalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);

cell.setColspan(3);

table.addCell(cell);

cell = new com.lowagie.text.Cell(new Paragraph("\n\n\n\n\t\t\t\t\t(盖章)年月日\n\n\n",fontChinese));

cell.setVerticalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);

cell.setHorizontalAlignment(com.lowagie.text.Cell.ALIGN_CENTER);

cell.setColspan(4);

table.addCell(cell);

document.add(table);

// 在表格末尾添加图片

Image

png=Image.getInstance(ServletActionContext.getServletContext().getRealPath("")+

"/png-0662.png");

document.add(png);

// 分页

document.newPage();

document.close();

}

public String exportword(){

String eMname="李小明";

String eMsex="男";

int eMage=25;

String eMduty="经理";

Double eMpay=2580.78;

String eMpolity="党员";

String eMaddress="天津市清河县大柳营镇";

try {

String newFilePath1 = getNewFilePath();

createWord(eMname,eMsex,eMage,eMduty,eMpay,eMpolity,eMaddress);

writeNewFile(newFilePath1, filename);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

/**

* 功能:将数据库中的数据导出excel

* 日期:2008-3-28

*/

public String exportexcel(){

getResponse().setContentType("application/vnd.ms-excel");

File f1 = null;

//得到服务器路径

String path = getRequest().getSession().getServletContext().getRealPath("")+File.separator;

//文件名生成

String filename="temp";

filename=System.currentTimeMillis()+".xls";

File f = new File(path+"Book2.xlt");// 定义一个模板,放在服务器相应路径下.

Workbook workbook = null;

WritableWorkbook writableWorkbook = null;

String workwheet="工作表名";

try {

/**

* 使用文件输入输出流读取Excel模板,重新写入新文件,就是为了读到其EXCEL格式.

* 所以在服务器相应文件,必须有一个空Excel文件,如:Book1.xls

*/

FileInputStream fis = new FileInputStream(f);

byte[] b = new byte[fis.available()];

fis.read(b);

fis.close();

f1 = new File(path+filename);

FileOutputStream fos = new FileOutputStream(f1);

fos.write(b);

fos.close();

workbook = Workbook.getWorkbook(f1);

ServletOutputStream os = getResponse().getOutputStream();

//.createWorkbook(os, workbook);

writableWorkbook = Workbook.createWorkbook(f1);

WritableSheet ws = writableWorkbook.getSheet(0);

//添加第四个工作表

WritableSheet sheet = writableWorkbook.createSheet(workwheet,4);

//定义样式:包括字体样式

WritableFont wf1 = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Co lour.RED);

WritableCellFormat wcf1 = new WritableCellFormat(wf1);

//背景样式

wcf1.setBackground(Colour.YELLOW2);

//对齐方式

wcf1.setAlignment(Alignment.CENTRE);

wcf1.setVerticalAlignment(VerticalAlignment.CENTRE);

WritableFont wf2 = new WritableFont(WritableFont.TIMES,11,WritableFont.NO_BOLD);;

WritableCellFormat wcf2 = new WritableCellFormat(wf2);

wcf2.setAlignment(Alignment.CENTRE);

//边框线设置

wcf2.setBorder(Border.ALL,BorderLineStyle.THIN);

WritableFont wf3 = new WritableFont(WritableFont.TIMES,12,WritableFont.BOLD);

WritableCellFormat wcf3 = new WritableCellFormat(wf3);

wcf3.setAlignment(Alignment.CENTRE);

wcf3.setBorder(Border.ALL,BorderLineStyle.THIN);

//显示数字形式

NumberFormat wf5=new NumberFormat("#0.00");

WritableCellFormat wcf5 = new WritableCellFormat(wf5);

wcf5.setAlignment(Alignment.CENTRE);

wcf5.setBorder(Border.ALL,BorderLineStyle.THIN);

//添加带有formatting的DateFormat对象

DateFormat df = new DateFormat("yyyy-MM-dd hh:mm:ss");

WritableCellFormat wcfdf = new WritableCellFormat(df);

wcfdf.setAlignment(Alignment.CENTRE);

wcfdf.setBorder(Border.ALL,BorderLineStyle.THIN);

//数字格式显示两位小数

DecimalFormat dfformat = new DecimalFormat("###,##0.00");

//输出表头

Label l = null;

int k = 0;

//ws.mergeCells(0,k,7,k); //合并单元格,表示合并第0行第0列到第0行第7列

/**

* 功能:下面5句实现在模板中任何单元格定义名称EM_name,通过findCellByName查找

* 如果找到,则将获取标记单元格的位置,并将内容填入,找不到,不管.

* 实现了程序充许可以任何定义有限范围的模板定义.

* 日期:2008-2-28

*

*/

Cell cl=writableWorkbook.findCellByName("EM_name");

if(cl!=null){

//System.out.println(cl.getContents()+"找到了"+cl.getColumn()+"---"+cl.getRow());

l = new Label(cl.getColumn(),cl.getRow(), "网通审计人员统计报表", wcf1); //将内容填入

ws.addCell(l);

ws.setRowView(k,700); //设置单元格宽度,k表示行,500表示高度

}

k++;

ws.mergeCells(0,k,1,k);

l = new Label(0,k, "填报单位:", wcf3);

ws.addCell(l);

ws.mergeCells(2,k,5,k);

l = new Label(2,k, "审计部一处", wcf3);

ws.addCell(l);

l = new Label(6,k, "日期:", wcf3);

ws.addCell(l);

//l = new Label(7,k, "2008-03-15", wcfdf);

DateTime lt = new DateTime(7,k,new java.util.Date(),wcfdf);

ws.addCell(lt);

k++;

l = new Label(0,k, "序号", wcf3);

ws.addCell(l);

l = new Label(1,k, "姓名", wcf3);

ws.addCell(l);

l = new Label(2,k, "性别", wcf3);

ws.addCell(l);

l = new Label(3,k, "年龄", wcf3);

ws.addCell(l);

l = new Label(4,k, "职务", wcf3);

ws.addCell(l);

l = new Label(5,k, "工资", wcf3);

ws.addCell(l);

l = new Label(6,k, "政治面貌", wcf3);

ws.addCell(l);

l = new Label(7,k, "地址", wcf3);

ws.addCell(l);

ws.setColumnView(7,30); //设置单元格宽度,7表示列,30表示宽度

//输出内容

List emlist=iemployeerService.getEmployeerAll("from Employeer");

for(int i=0;i

{

k++;

l = new Label(0,k, Integer.valueOf(emlist.get(i).getId()).toString(), wcf2);

ws.addCell(l);

l = new Label(1,k, emlist.get(i).getEm_name(), wcf2);

ws.addCell(l);

l = new Label(2,k, emlist.get(i).getEm_sex(), wcf2);

ws.addCell(l);

l = new Label(3,k, Integer.valueOf(emlist.get(i).getEm_age()).toString(), wcf2);

ws.addCell(l);

l = new Label(4,k, emlist.get(i).getEm_duty(), wcf2);

ws.addCell(l);

l = new Label(5,k, dfformat.format(emlist.get(i).getEm_pay()).toString(), wcf5);

ws.addCell(l);

l = new Label(6,k, emlist.get(i).getEm_polity(), wcf2);

ws.addCell(l);

l = new Label(7,k, emlist.get(i).getEm_address(), wcf2);

ws.addCell(l);

}

//添加图片,只支持png格式,注意在服务器启动时,第一次将png图片放进去,读取时是不显示的.需得启服务器.

ws.mergeCells(5, 5, 6, 10);

WritableImage wbi=new WritableImage(5, 5, 6, 10, new File(path+"png-0662.png"));

ws.addImage(wbi);

writableWorkbook.write();

//得到工作表行数

int cnt = ws.getRows();

System.out.println("表行数有:"+cnt);

//工作表某一单元格内容

Cell cell = ws.getCell(0,0);

System.out.println("0行0列内容是:" + cell.getContents());

} catch (Exception e) {

e.printStackTrace();

} finally {

if (writableWorkbook != null)

try {

writableWorkbook.close();

} catch (Exception e) {

// Exception

}

if (f1.exists()) {

f1.delete();

System.out.println("文件已经删除!");

} else {

/*try {

f1.createNewFile();

} catch (IOException e) {

e.printStackTrace();

}

System.out.println("文件已经创建!");*/

}

}

return null;

}

public BasicUtil getBasicUtil() {

return basicUtil;

}

public void setBasicUtil(BasicUtil basicUtil) {

this.basicUtil = basicUtil;

}

public FileService getFileService() {

return fileService;

}

public void setFileService(FileService fileService) {

this.fileService = fileService;

}

public IemployeerService getIemployeerService() {

return iemployeerService;

}

public void setIemployeerService(IemployeerService iemployeerService) { this.iemployeerService = iemployeerService;

}

public Employeer getEmployeer() {

return employeer;

}

public void setEmployeer(Employeer employeer) {

this.employeer = employeer;

} }

java导入导出excel操作

java导入导出excel操作(jxl) Java解释Excel数据(包的使用) 关键字: java excel 包 下载地址: 真实下载地址: 网站上对它的特征有如下描述: ● 支持Excel 95-2000的所有版本 ● 生成Excel 2000标准格式 ● 支持字体、数字、日期操作 ● 能够修饰单元格属性 ● 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java 的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel 文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 搭建环境 将下载后的文件解包,得到,放入classpath,安装就完成了。 基本操作 一、创建文件 拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下: Java代码 /* * Created on Dec 30, 2007 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ package ; import .*; import jxl.*; import .*;

/** * @author Ken * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class CreateXLS { public static void main(String[] args) { try { WritableWorkbook book = (new File("d:/")); 0 means this is 1st page. WritableSheet sheet = ("Sheet_1", 0); value is "test". Label label = new Label(0, 0, "test"); (label); WARN:necessarily use integrated package-path, otherwise will be throws path -error. value is . number = new0, ; (number); (); (); } catch (Exception e) { (); } } } 编译执行后,会在当前位置产生一个Excel文件。 二、读取文件 以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下:

如何能让Java生成复杂Word文档(1)

先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker 模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。 AD:客户要求用程序生成标准的word文档,要能打印,而且不能变形,以前用过很多解决方案,都在客户严格要求下牺牲的无比惨烈。 POI读word文档还行,写文档实在不敢恭维,复杂的样式很难控制不提,想象一下一个20多页,嵌套很多表格和图像的word文档靠POI来写代码输出,对程序员来说比去山西挖煤还惨,况且文档格式还经常变化。 iText操作Excel还行。对于复杂的大量的word也是噩梦。 直接通过JSP输出样式基本不达标,而且要打印出来就更是惨不忍睹。 Word从2003开始支持XML格式,用XML还做就很简单了。 大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml 翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。 看看实际效果 首先用office【版本要2003以上,以下的不支持xml格式】编辑文档的样式,图中红线的部分就是我要输出的部分:

将编辑好的文档另存为XML 再用Firstobject free XML editor将xml中我们需要填数据的地方打上FreeMarker标记

java解析FSN文件

package action; import java.util.ArrayList; import tools.FsnTools; import bean.FsnBody; import bean.FsnModel; public class FsnReaderAction { public final static int intstep=2; //Uint16字节长度 public final static int stringstep=4; //Uint32字节长度 public final static int fsnHeadLengh=32;//fsn文件头字节长度 public final static int fsnPerBodyNoImg=100; //fsn文件体每条记录,不包括图像信息的字节长度 public final static int fsnPerBodyImg=1644; //fsn文件体每条记录,包括图像信息的字节长度 public int filePos=0; //fsn文件字节流当前指针位置 public FsnModel fm; //本实例解析的FsnMedel对象 public String fsnFilePath ;//FSN文件的存储完整路径,包括文件名 public FsnReaderAction(String filePath){ this.fsnFilePath=filePath; } public FsnModel readFsnFile() throws Exception { // FsnModel ret=null; try{ this.fm=new FsnModel(this.fsnFilePath); //hzyimport 把文件转成字节流数组 byte[] fsnbytes =FsnTools.toByteArray(this.fsnFilePath); this.fm.setSize(fsnbytes.length); System.out.println("File Lengh: "+fsnbytes.length); // 读取头文件 setHead(fsnbytes); long counter = this.fm.getCounter(); // 冠字号信息条数// System.out.println("this.fm.getHeadString()[2]="+this.fm.getHeadStr ing()[2]); int size = this.fm.getHeadString()[2] != 0x2D ? fsnPerBodyImg: fsnPerBodyNoImg; // System.out.println("this.fm.getHeadString()[2] ="+this.fm.getHeadString()[2] ); // System.out.println("counter ="+counter); // System.out.println("size="+size); // System.out.println("counter =* size"+counter * size); // System.out.println("fsnHeadLengh="+fsnHeadLengh);

JSP中导入导出Excel文件

JSP中导入导出Excel文件 一.POI简介 Jakarta POI 是apache的子项目,目标是处理ole2对象。它提供了一组操纵Windows文档的Java API 目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel 对象,你可以控制一些属性如sheet,cell等等。 二.HSSF概况 HSSF 是sHorrible SpreadSheet Format的缩写,也即“讨厌的电子表格格式”。也许HSSF的名字有点滑稽,就本质而言它是一个非常严肃、正规的API。通过HSSF,你可以用纯Java代码来读取、写入、修改Excel文件。 HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“用户模型”和“事件-用户模型”。前者很好理解,后者比较抽象,但操作效率要高得多。 三.开始编码 1 .准备工作 要求:JDK 1.4+POI开发包 可以到 https://www.doczj.com/doc/3f10765632.html,/dyn/closer.cgi/jakarta/poi/ 最新的POI工具包 2 . EXCEL 结构 HSSFWorkbook excel 文档对象介绍 HSSFSheet excel的表单 HSSFRow excel的行 HSSFCell excel的格子单元 HSSFFont excel字体 HSSFName 名称 HSSFDataFormat 日期格式 HSSFHeader sheet头 HSSFFooter sheet尾 和这个样式 HSSFCellStyle cell样式

Java实现Excel数据导入和导出的研究与应用

Java实现Excel数据导入导出的研究与应用 王晶晶 北京邮电大学网络教育学院(100088) E-mail:bolalisi_double@https://www.doczj.com/doc/3f10765632.html, 摘要:Excel能够通过功能强大的工具将杂乱的数据组织成有用的信息,然后分析、交流和共享所得到的结果。很多系统由于存在着大量需要处理的数据,Excel本身强大的功能使得它成为处理分析这些数据首选的工具。随着Java语言成为越来越多系统的开发语言,利用Java进行Excel的数据导入导出在很多系统中都发挥着重要的作用,本文主要介绍了Jxl API的主要功能,并结合实例探讨了利用Jxl API操作Excel数据的导入和导出。 关键字:Java;Excel; Jxl API;数据导入导出 中图分类号:TP312文献标识码:A 1. 引言 MS的电子表格(Excel)是Office的重要成员,是保存统计数据的一种常用格式。在一个Java应用中,将一部分数据生成Excel格式,是与其他系统无缝连接的重要手段。在远程网络教学系统中,利用Excel表格统计学生的作业考试情况信息,便于老师了解学生的学习情况,分析教学效果,制定教学计划。所以,用Java操作Excel表格,导出相关的信息对于远程网络教育系统有着的很重要的意义。 在开源世界中,有两套比较有影响的API提供Excel数据导入导出的功能,一个是POI,一个是jExcelAPI。本文结合基于J2EE开发的多媒体教学系统中提供的将学生作业信息导出到Excel表格中的实例,详细阐述了利用JAVA开发的jExcelAPI操作excel的方法。 2. Jxl 简介 2.1 Java语言简介 Java语言具有面向对象、与平台无关、安全、稳定和多线程等优良特性,是目前软件设计中极为强大的编程语言[1]。它具有以下一些特点[2]:简单,面向对象,分布式,解释执行,鲁棒,安全,体系结构中立,可移植,高性能,多线程以及动态性。 2.2什么是Jxl Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该 API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、 Servlet来调用API实现对Excel数据表的访问。 Jxl发布的稳定版本是V2.0,提供以下功能: 从Excel 95、97、2000等格式的文件中读取数据[3]; 读取Excel公式(可以读取Excel 97以后的公式)[3];

Java生产WORD并下载到本地

1.为你的项目导入freeMarker包 我的项目是依靠maven来维护依赖的,所以引入很方便,只需要在pom文件中加入下面这个依赖就好 [html]view plain copy 1. 2.org.freemarker 3.freemarker 4.2.3.23 5. 如果还是比较传统的话,就像那个链接里的项目一样,把jar包导入项目吧 2.依据模板动态生成word文档,首先你得有个模板 模板是doc类型就好,注意不是docx,docx没有尝试,doc类型已经满足了我的需求,朋友们如果尝试成功了可以告诉我一下 test.doc,注意“产品品质证明书”是一张图片哦,图片会漂亮的留在生成的新文档中。将变量替换成${xxx}即可,这里只选了两 个变量 3.点击文件->另存为将test.doc保存为xml类型,即Word XML文档.xml类型,得到test.xml 4.用notepad或者sublime打开test.xml,你会发现${xxx}会被分割成 ${*********xxx********)的样子,将*******删除,保证它又成了完整的变量 标签,像这样

5.将文件已utf-8编码保存,另存为为.ftl,找不到该格式直接改文件后缀名就行,这样得到test.ftl 6.前台触发事件 我的项目是基于SpringMVC的,所以前台触发只需要在view层的文件里加个按钮事件即可,直接上代码 [javascript]view plain copy 1.function generateMillCertificate(id) {//点击下载按钮触发的事件 2. window.location.href = '../deliveryOrder/exportMillCertificate?id=' + id; 3. } 7.后台生成文件,并返回给客户的浏览器 这里又分为两步 a.controller层接收请求,根据参数拼凑数据,放在map中 [java]view plain copy 1./*** 2. * 导出Word材质单 3. * 4. * @return 5. * @throws Exception 6. */ 7.@RequestMapping(value = "exportMillCertificate", method = RequestMethod. GET) 8.@ResponseBody 9.public void exportMillCertificate(HttpServletRequest request, 10. HttpServletResponse response) throws Exception { 11.//获得数据,系统相关,就不展示了 12. Map map = new HashMap(); 13. map.put("customerShortName",deliveryOrder.getRepositoryName()); 14. map.put("productName",deliveryOrderDetail.getProductName()); 15. WordUtils.exportMillCertificateWord(request,response,map); 16. } b.工具类WordUtils利用传来的map和将要返回给用户的HTTPServletReponse,将map里的数据和模板中${xxx}标签对应的变量值填入, 生成新的文档,通过response返回给浏览器并提供用户下载 [java]view plain copy 1.public class WordUtils { 2.//配置信息,代码本身写的还是很可读的,就不过多注解了 3.private static Configuration configuration = null; 4.//这里注意的是利用WordUtils的类加载器动态获得模板文件的位置

JAVA导出EXCEL类(TSV格式)

package com.bear.util; import java.io.*; import javax.swing.*; import javax.swing.table.*; public class ExcelUtil { public void exportTable(JTable table,String title) throws IOException { TableModel model = table.getModel(); JFileChooser fileChooser = new JFileChooser(); fileChooser.setCurrentDirectory(new File("."));//设置当前目录 fileChooser.setAcceptAllFileFilterUsed(false); fileChooser.addChoosableFileFilter(new javax.swing.filechooser.FileFilter() { public boolean accept(File file) { if (file.isDirectory()) return true; return (file.getName().indexOf("xls") != -1); } public String getDescription() { return "Microsoft Excel文件(*.xls)"; } }); //fileChooser.showSaveDialog(null); int returnVal =fileChooser.showSaveDialog(fileChooser); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fileChooser.getSelectedFile(); if (file.exists()) { int copy = JOptionPane.showConfirmDialog(null,"是否要覆盖当前文件?", "保存", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE); if (copy == JOptionPane.YES_OPTION) fileChooser.approveSelection(); else return; } else fileChooser.approveSelection(); FileWriter out = new FileWriter(file); out.write(title + "\n\n"); for(int i=0; i < model.getColumnCount(); i++) out.write(model.getColumnName(i) + "\t"); out.write("\n"); for(int i=0; i< model.getRowCount(); i++) {

(完整word版)JAVA代码规范详细版

JAVA代码规范 本Java代码规范以SUN的标准Java代码规范为基础,为适应我们公司的实际需要,可能会做一些修改。本文档中没有说明的地方,请参看SUN Java标准代码规范。如果两边有冲突,以SUN Java标准为准。 1. 标识符命名规范 1.1 概述 标识符的命名力求做到统一、达意和简洁。 1.1.1 统一 统一是指,对于同一个概念,在程序中用同一种表示方法,比如对于供应商,既可以用supplier,也可以用provider,但是我们只能选定一个使用,至少在一个Java项目中保持统一。统一是作为重要的,如果对同一概念有不同的表示方法,会使代码混乱难以理解。即使不能取得好的名称,但是只要统一,阅读起来也不会太困难,因为阅读者只要理解一次。 1.1.2 达意 达意是指,标识符能准确的表达出它所代表的意义,比如:newSupplier, OrderPaymentGatewayService等;而supplier1, service2,idtts等则不是好的命名方式。准确有两成含义,一是正确,而是丰富。如果给一个代表供应商的变量起名是order,显然没有正确表达。同样的,supplier1, 远没有targetSupplier意义丰富。 1.1.3 简洁 简洁是指,在统一和达意的前提下,用尽量少的标识符。如果不能达意,宁愿不要简洁。比如:theOrderNameOfTheTargetSupplierWhichIsTransfered 太长,transferedTargetSupplierOrderName则较好,但是transTgtSplOrdNm就不好了。省略元音的缩写方式不要使用,我们的英语往往还没有好到看得懂奇怪的缩写。 1.1.4 骆驼法则 Java中,除了包名,静态常量等特殊情况,大部分情况下标识符使用骆驼法则,即单词之间不使用特殊符号分割,而是通过首字母大写来分割。比如: supplierName, addNewContract,而不是supplier_name, add_new_contract。

java操作word可操作书签

最近有个需求,在word模板文档上设置书签,然后从数据库中查询数据,填充到word 文档书签位置,刚拿到需求时,使劲在网上找资料。幻想第三方jar包,帮我实现。有Apatch 的POI,java2word,jcob等,一直让我无法实现。POI操作word只能获取word中的书签,并不能进行操作.java2word可以实现,但是除了包以外,还要一个dll文件放在system32文件夹下,环境部署在linux服务器上,谁允许你放这样的文件,结果死心了.下面新建一个word2007文件告诉大家不用第三方技术怎么一一实现。 现在新建一个word,在请输入用户名处添加书签userName,请输入年龄处添加书签age Word2007版本其实就是zip格式,将新建word后缀名改.zip,解压会发现,里面全是文件夹,打开word文件夹会有一个文件,在word所有内容,都在这xml文件中, 请输入用户名 这是新建书签处的内容,细心的会发现,书签处内容在 标签之间,标签中的w:id跟w:name 标识书签的唯一,中间是书签处的内容,会不会可以这样呢,找到用dom或者sax解析这个xml文档找到标签,然后找到标签,再找到标签里面的标签内容,替换就Ok了呢。一开始我就这样想的。但是你会发现,不是这样配套的,如果是这样配套的,那按照前面的说的直接解析找到标签就OK了。 分析xml文件你会发现,其实标签跟标签是同级的,只是结束方式不同而已,所以算是兄弟节点,可以不可以找到的兄弟节点,也就是标签,然后找到标签,替换其文本。其实w3c中Element对象中提供了获取兄弟节点的方法,getNextSibling()获取下一个兄弟节点。按照分析的思路是可以实现的。但是会不会有疑问,如果的下一个兄弟节点会不会不是标签呢,是的,如果书签处无内容,就会是这样的

java操作word(内部资料)

JAVA操作word Java操作Microsoft Word之jacob(1) 现在我们一起来看看,用J1ava如何操作Microsoft Word。 jacob,官网是https://www.doczj.com/doc/3f10765632.html,/jacob 这是一个开源的工具。最新版本1.7 官方的解释是:The JACOB Project: A JAva-COM Bridge 这是官方对下载文件的说明: jacob.jar: a JAR file for the java classes which you must add to your CLASSPATH. The package names replace com.ms with com.jacob (for example https://www.doczj.com/doc/3f10765632.html,.Variant maps to https://www.doczj.com/doc/3f10765632.html,.Variant. jacob.dll: a small Win32 DLL which you must add to your PATH. samples: provided in Java source and compiled form to demonstrate various features of the product. In particular, a set of wrapper classes for Microsoft? ADO are provided as samples. 开发环境: JDK 1.6 MyEclipse Enterprise Workbench Version: 7.0 Milestone-1 Tomcat 5.5.27 现在MyEclipse中新建一个项目jacob,将jacob的jar包放到该项目的类库中。 我的jacob版本是1.14.3 。

java根据模板生成pdf文件并导出

java根据模板生成pdf文件并导出 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf格式文件 3.通过Adobe Acrobat pro软件打开刚刚用word转换成的pdf 文件(注:如果没有这个软件可以通过我的百度云下载,链接:https://www.doczj.com/doc/3f10765632.html,/s/1pL2klzt)如果无法下载可以联系博主。4.点击右边的"准备表单"按钮,选择"测试.pdf"选择开始 进去到编辑页面,打开后它会自动侦测并命名表单域,右键表单域,点击属性,出现文本域属性对话框(其实无需任何操作,一般情况下不需要修改什么东西,至少我没有修改哦。如果你想修改fill1等信息,可以进行修改)5.做完上面的工作后,直接"另存为"将pdf存储就可以 ****************************************************************** *********** 以上部分是制作pdf模板操作,上述完成后,就开始通过程序来根据pdf模板生成pdf文件了,上java程序: 1.首先需要依赖包:itext的jar包,我是maven项目,所以附上maven依赖 [html] view plain copy print?<!--

https://https://www.doczj.com/doc/3f10765632.html,/artifact/com.itextpdf/itextpdf --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> [html] view plain copy print?<!-- https://https://www.doczj.com/doc/3f10765632.html,/artifact/com.itextpdf/itext-asian --> <span style="white-space:pre;"> </span><dependency> <span style="white-space:pre;"> </span> <groupId>com.itextpdf</groupId> <span style="white-space:pre;"> </span> <artifactId>itext-asian</artifactId> <span style="white-space:pre;"> </span> <version>5.2.0</version> <span style="white-space:pre;"> </span></dependency> 2.下面就是生成pdf代码了 [java] view plain copy print?import java.io.ByteArrayOutputStream; import

JAVA读取WORD文档解决方案

Java读取word文档解决方案 java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法。经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。rtf格式文件表面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。 -----实现的功能:读取rtf模板内容(格式和文本内容),替换变化部分,形成新的rtf文档。 -----实现思路:模板中固定部分手动输入,变化的部分用$info$表示,只需替换$info$即可。 1、采用字节的形式读取rtf模板内容 2、将可变的内容字符串转为rtf编码 3、替换原文中的可变部分,形成新的rtf文档 主要程序如下:

以上为核心代码,剩余部分就是替换,从新组装java中的String.replace(oldstr,newstr);方法可以实现,在这就不贴了。源代码部分详见附件。运行源代码前提: c盘创建YQ目录,将附件中"模板.rtf"复制到YQ目录之下,运行OpreatorRTF.java文件即可,就会在YQ 目录下生成文件名如:21时15分19秒_cheney_记录.rtf的文件。。。。。文件名是在程序中指定的呵呵。由于是由商业软件中拆分出的demo所以只是将自己原来的写的程序分离,合并在一个java文件中,所以有的方法在示例程序中看似多余,没有必要那么麻烦。 对于替换部分需要循环的特例程序,我不好拆分,里面很容易暴露商业软件的东西,所以就不贴了,有需要的话可以加我QQ或者MSN,一起讨论呵呵。附件传了半天也没有传上去,没有办法只有这样搞了呵呵。模板文件附件无法存放,需要的直接联系呵呵。其实直接看以下的java程序部分,就会明白

Java数据导入导出Excel

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import jxl.Workbook; import jxl.format.UnderlineStyle; import https://www.doczj.com/doc/3f10765632.html,bel; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import https://www.doczj.com/doc/3f10765632.html,ermodel.HSSFCell; import https://www.doczj.com/doc/3f10765632.html,ermodel.HSSFCellStyle; import https://www.doczj.com/doc/3f10765632.html,ermodel.HSSFRow; import https://www.doczj.com/doc/3f10765632.html,ermodel.HSSFSheet; import https://www.doczj.com/doc/3f10765632.html,ermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class ExcelOpt { /** * 生成一个Excel文件jxl * @param fileName 要生成的Excel文件名 * @jxl.jar 版本:2.6 */ public static void writeExcel(String fileName){ WritableWorkbook wwb = null; try { //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象 wwb = Workbook.createWorkbook(new File(fileName)); } catch (IOException e) { e.printStackTrace(); } if(wwb!=null){ //创建一个可写入的工作表 //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置

JAVA导出WORD与EXCEL

package ais.mytest.web; /** * 功能:主要实现数据导出Excel和Word功能* 日期:2008-2-28 */ import ais.basic.service.BasicUtil; import https://www.doczj.com/doc/3f10765632.html,mons.file.service.FileService; import ais.framework.web.BaseAction; import ais.mytest.model.Employeer; import ais.mytest.service.IemployeerService; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.text.DecimalFormat; import jxl.write.NumberFormat; import java.util.List; import javax.servlet.ServletOutputStream; import jxl.Cell; import jxl.Workbook; import jxl.format.Alignment; import jxl.format.UnderlineStyle; import jxl.format.VerticalAlignment; import jxl.format.Border; import jxl.format.BorderLineStyle; import jxl.format.BoldStyle; import jxl.format.Colour; import jxl.write.Blank; import jxl.write.DateFormat; import jxl.write.DateTime; import https://www.doczj.com/doc/3f10765632.html,bel; import jxl.write.WritableCellFormat; import jxl.write.WritableFont; import jxl.write.WritableImage; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; //import com.ibm.icu.text.SimpleDateFormat; //import com.lowagie.text.Cell; import com.lowagie.text.Document; import com.lowagie.text.Font; import com.lowagie.text.Image;

java导出word

java jacob 操作word 文档,进行写操作,如生成表格,添加图片jacob-1.15-M3.zip jacob-1.15-M3-x86.dll copy 到c:\\windows\system32 引入jacob.jar 示例代码 import java.io.File; import com.jacob.activeX.ActiveXComponent; import https://www.doczj.com/doc/3f10765632.html,.Dispatch; import https://www.doczj.com/doc/3f10765632.html,.V ariant; class WordBean { // 代表一个word 程序 private ActiveXComponent MsWordApp = null; // 代表进行处理的word 文档 private Dispatch document = null; public WordBean() { // Open Word if we\'ve not done it already if (MsWordApp == null) { MsWordApp = new ActiveXComponent("Word.Application"); } } // 设置是否在前台打开word 程序, public void setVisible(boolean visible) { MsWordApp.setProperty("Visible", new V ariant(vis ible)); // 这一句作用相同 // Dispatch.put(MsWordApp, "Visible", new V ariant(visible)); } // 创建一个新文档 public void createNewDocument() { // Find the Documents collection object maintained by Word // documents表示word的所有文档窗口,(word是多文档应用程序) Dispatch documents = Dispatch.get(MsWordApp, "Documents").toDispatch(); // Call the Add method of the Documents collection to create // a new document to edit document = Dispatch.call(documents, "Add").toDispatch(); } // 打开一个存在的word文档,并用document 引用引用它

java深度处理word

JAVA操作word jacob(1) 现在我们一起来看看,用Java如何操Word。 jacob,官网是https://www.doczj.com/doc/3f10765632.html,/jacob 这是一个开源的工具。最新版本1.7 官方的解释是:The JACOB Project: A JAva-COM Bridge 开发环境: JDK 1.6 MyEclipse Enterprise Workbench Version: 7.0 Milestone-1 Tomcat 5.5.27 现在MyEclipse中新建一个项目jacob,将jacob的jar包放到该项目的类库中。 我的jacob版本是1.14.3 。

下面这一步非常重要,就是拷贝jacob目录中jacob-1.14.3-x86.dll文件到系统环境变量目录中一般情况就放在当前jdk中bin目录下。

。 这里有一个MSWordManager 类,是jacob官方发布的工具类,里面有大多数Java操作MS Office的工具。 package com.test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.jacob.activeX.ActiveXComponent; import https://www.doczj.com/doc/3f10765632.html,.Dispatch; import https://www.doczj.com/doc/3f10765632.html,.Variant; public class MSWordManager { // word文档

java实现excel导入导出

Java数据导入Excel package com.bossy.base; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import jxl.Workbook; import jxl.format.UnderlineStyle; import https://www.doczj.com/doc/3f10765632.html,bel; import jxl.write.WritableFont; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import jxl.write.biff.RowsExceededException; import https://www.doczj.com/doc/3f10765632.html,ermodel.HSSFCell; import https://www.doczj.com/doc/3f10765632.html,ermodel.HSSFCellStyle; import https://www.doczj.com/doc/3f10765632.html,ermodel.HSSFRow; import https://www.doczj.com/doc/3f10765632.html,ermodel.HSSFSheet; import https://www.doczj.com/doc/3f10765632.html,ermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem;

相关主题
文本预览
相关文档 最新文档