Java读取数据库打印到word文档问题求教各位大侠,java写
为什么非要写道word文档中? 你可以写进txt文件中,然后使用word进行编辑 如果确实需要,请看下面的例子: import java。
io。File; import java。
io。FileInputStream; import java。
io。FileOutputStream; import org。
apache。poi。
hwpf。extractor。
WordExtractor; import org。apache。
poi。hwpf。
model。io。
HWPFOutputStream; public class Word { /** * 读取纯文本的word文件 */ public String readWord(String doc) throws Exception { String context = null; WordExtractor extractor = null; //纯文本的遍历器 try { FileInputStream in = new FileInputStream(new File(doc)); extractor = new WordExtractor(in); context = extractor。 getText(); } catch (Exception e) { e。
printStackTrace(); } return context; } /** * 对word文档做写操作 * */ public boolean writeWord(String path, String content) throws Exception { boolean w = false; try { byte b[] = content。 getBytes(); FileOutputStream fs = new FileOutputStream(path); HWPFOutputStream hos = new HWPFOutputStream(); hos。
write(b, 0, b。length); hos。
writeTo(fs); hos。close(); w=true; } catch (Exception e) { e。
printStackTrace(); } return w; } public static void main(String[] args) { ReadWord rw = new ReadWord(); try{ String text = rw。 readDoc("D:\\workspace\\MyUntil\\t。
doc"); rw。writeDoc("D:\\workspace\\MyUntil\\d。
doc", text); }catch(Exception e){ e。 printStackTrace(); } } } 所需的包请各位自己上apache的官网上poi工程目录下下吧 poi-3。
5-final poi-contrib-3。5-final poi-ooxml-3。
5-final poi-scratchpad-3。5-final 。
用java实现将数据库获得的数据转成word文档
导出xls格式文件,有一个包xls。
jar专门做这件事的 jxl.jar 包下载 Installation JExcelApi comes packaged as a zipped tar file, called something like jexcelapi_2_0.tar.gz. To unpack on UNIX systems, at the command line type gunzip jexcelapi_2_0.tar.gz followed by tar xf jexcelapi_2_0.tar On Linux systems this can be accomplished within the single command tar zxf jexcelapi_2_0.tar.gz On Windows/NT systems, the archive may be unpacked visually using a utility such as Winzip. 作者的网站上对它的特征有如下描述: ● 支持Excel 95-2000的所有版本 ● 生成Excel 2000标准格式 ● 支持字体、数字、日期操作 ● 能够修饰单元格属性 ● 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。
另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。 搭建环境 将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。
基本操作 一、创建文件 拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下: 代码(CreateXLS.java): //生成Excel的类 import java.io.*; import jxl.*; import jxl.write.*; public class CreateXLS { public static void main(String[] args){ try{ //创建文件 WritableWorkbook book = Workbook.createWorkbook(new File("测试.xls")); //生成名为“第一页”的工作表,参数0表示这是第一页 WritableSheet sheet = book.createSheet("第一页" ,0); //在Label对象的构造子中指名单元格位置是第一列第一行(0,0) 以及单元格内容为test Label label = new Label(0,0,"test"); //将定义好的单元格添加到工作表中 sheet.addCell(label); /*生成一个保存数字的单元格 必须使用Number的完整包路径, 否则有语法歧义 ,单元格位置是第二列,第一行,值为789.123 */ //写入数据并关闭文件 jxl.write.Number number = new jxl.write.Number(1,0,789.123); sheet.addCell(number); book.write(); book.close(); }catch(Exception e){ System.out.println(e); } } } 编译执行后,会在当前位置产生一个Excel文件。 三、读取文件 以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下: //读取Excel的类 import java.io.*; import jxl.*; public class ReadXLS { public static void main(String args[]) { try { Workbook book= Workbook.getWorkbook(new File(“测试.xls”)); //获得第一个工作表对象 Sheet sheet=book.getSheet(0); //得到第一列第一行的单元格 Cell cell1=sheet.getCell(0,0); String result=cell1.getContents(); System.out.println(result); book.close(); }catch(Exception e) { System.out.println(e); } } } 程序执行结果:test 四、修改文件 利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,其他操作和创建Excel是一样的。
下面的例子是在我们已经生成的Excel文件中添加一个工作表: //修改Excel的类,添加一个工作表 import java.io.*; import jxl.*; import jxl.write.*; public class UpdateXLS { public static void main(String args[]) { try { //Excel获得文件 Workbook wb=Workbook.getWorkbook(new File(“测试.xls”)); //打开一个文件的副本,并且指定数据写回到原文件 WritableWorkbook book= Workbook.createWorkbook(new File(“测试.xls”),wb); //添加一个工作表 WritableSheet sheet=book.createSheet(“第二页”,1); sheet.addCell(new Label(0,0,”第二页的测试数据”)); book.write(); book.close(); }catch(Exception e) { System.out.println(e); } } } 执行结果如图: 高级操作 一、 数据格式化 在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。 1、 字串格式化 字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。
假设我们在生成一个含有字串的单元格时,使用如下语句,为方便叙述,我们为每一行命令加了编号: WritableFont font1= new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); 或//设置字体格式为excel支持的格式 WritableFont font3=new WritableFont(WritableFont.createFont("楷体_GB2312"),12,WritableFont.NO_BOLD );① WritableCellFormat format1=new WritableCellFormat(font1); ② Label label=new Label(0,0,”data 4 test”,format1) ③ 其中①指定了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。
②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。 ③处使用了Label类的构造子,指定了字串被赋予那种格式。
在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定: //把水平对齐方式指定。
怎么用java导出word
java导出word代码如下:package com.bank.util;import java.awt.Color;import java.io.FileOutputStream;import java.io.IOException;import com.lowagie.text.Cell;import com.lowagie.text.Document;import com.lowagie.text.DocumentException;import com.lowagie.text.Element;import com.lowagie.text.Font;import com.lowagie.text.FontFactory;import com.lowagie.text.Image;import com.lowagie.text.PageSize;import com.lowagie.text.Paragraph;import com.lowagie.text.Phrase;import com.lowagie.text.Table;import com.lowagie.text.pdf.BaseFont;import com.lowagie.text.rtf.RtfWriter2;public class WordTools { public void createDocContext(String file) throws DocumentException, IOException { // 设置纸张大小 Document document = new Document(PageSize.A4); // 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中 RtfWriter2.getInstance(document, new FileOutputStream(file)); document.open(); // 设置中文字体 BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); // 标题字体风格 Font titleFont = new Font(bfChinese, 12, Font.BOLD); // 正文字体风格 Font contextFont = new Font(bfChinese, 10, Font.NORMAL); Paragraph title = new Paragraph("标题"); // 设置标题格式对齐方式 title.setAlignment(Element.ALIGN_CENTER); title.setFont(titleFont); document.add(title); String contextString = "iText是一个能够快速产生PDF文件的java类库。
" + " \n"// 换行 + "iText的java类对于那些要产生包含文本," + "表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。
" + "使用iText与PDF能够使你正确的控制Servlet的输出。"; Paragraph context = new Paragraph(contextString); // 正文格式左对齐 context.setAlignment(Element.ALIGN_LEFT); context.setFont(contextFont); // 离上一段落(标题)空的行数 context.setSpacingBefore(5); // 设置第一行空的列数 context.setFirstLineIndent(20); document.add(context); //利用类FontFactory结合Font和Color可以设置各种各样字体样式 /** * Font.UNDERLINE 下划线,Font.BOLD 粗体 */ Paragraph underline = new Paragraph("下划线的实现", FontFactory.getFont( FontFactory.HELVETICA_BOLDOBLIQUE, 18, Font.UNDERLINE, new Color(0, 0, 255))); document.add(underline); // 设置 Table 表格 Table aTable = new Table(3); int width[] = {25,25,50}; aTable.setWidths(width);//设置每列所占比例 aTable.setWidth(90); // 占页面宽度 90% aTable.setAlignment(Element.ALIGN_CENTER);//居中显示 aTable.setAlignment(Element.ALIGN_MIDDLE);//纵向居中显示 aTable.setAutoFillEmptyCells(true); //自动填满 aTable.setBorderWidth(1); //边框宽度 aTable.setBorderColor(new Color(0, 125, 255)); //边框颜色 aTable.setPadding(0);//衬距,看效果就知道什么意思了 aTable.setSpacing(0);//即单元格之间的间距 aTable.setBorder(2);//边框 //设置表头 /** * cell.setHeader(true);是将该单元格作为表头信息显示; * cell.setColspan(3);指定了该单元格占3列; * 为表格添加表头信息时,要注意的是一旦表头信息添加完了之后, \ * 必须调用 endHeaders()方法,否则当表格跨页后,表头信息不会再显示 */ Cell haderCell = new Cell("表格表头"); haderCell.setHeader(true); haderCell.setColspan(3); aTable.addCell(haderCell); aTable.endHeaders(); Font fontChinese = new Font(bfChinese, 12, Font.NORMAL, Color.GREEN); Cell cell = new Cell(new Phrase("这是一个测试的 3*3 Table 数据", fontChinese )); cell.setVerticalAlignment(Element.ALIGN_TOP); cell.setBorderColor(new Color(255, 0, 0)); cell.setRowspan(2); aTable.addCell(cell); aTable.addCell(new Cell("#1")); aTable.addCell(new Cell("#2")); aTable.addCell(new Cell("#3")); aTable.addCell(new Cell("#4")); Cell cell3 = new Cell(new Phrase("一行三列数据", fontChinese )); cell3.setColspan(3); cell3.setVerticalAlignment(Element.ALIGN_CENTER); aTable.addCell(cell3); document.add(aTable); document.add(new Paragraph("\n")); //添加图片// Image img=Image.getInstance("http://127.0.0.1:8080/testSystem/images/1_r1_c1.png");// img.setAbsolutePosition(0, 0);// img.setAlignment(Image.RIGHT);//设置图片显示位置// img.scaleAbsolute(12,35);//直接设定显示尺寸// img.scalePercent(50);//表示显示的大小为原尺寸的50%// img.scalePercent(25, 12);//图像高宽的显示比例// img.setRotation(30);//图像旋转一定角度// document.add(img); document.close(); } public static void main(String[] args){ WordTools b=new WordTools(); try { b.createDocContext("d:/demo.doc"); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOExceptio。
哪位顶尖高手会使用java实现数据导入word文档中
1-apache的POI,此方法对Excel的导出做的很好,目前对Word的导出方面的功能尚未完全。
2-纯JavaScript脚本实现。主要通过客户端调用本机Office组件来实现。
3-在JSP页面引入头文件实现。
纯JavaScript脚本实现细节方面大体是创建一个word组件ActiveXObject('Word.Application'),用js通过表ID取得表内容然后保存到word,要注意的是js实现有很多不好的地方,例如Internet选项需要把ActiveX空间全部启用,安全级别设置为中。这样的话岂不是每台机器都要配置一下。其次每次生成word文档以后弹出对话框(无法保存此文件,因为它已在别处打开(C:\。\STARTUP\Powerword.dot)),出现此问题就需要把C:\Documents and Settings\当前用户名\Application Data\Microsoft\Word\STARTUP下的Powerword.dot文件删除,每次遇到此问题就需要删除文件来解决,十分不方便。
JSP页面引入来实现Word保存就方便多了,但是也有不足的地方,首先如果需要引入
如果需要下载的话就引入
其实如果大家用框架做就方便多了,比如Struts2。在Action里直接写如下代码:
if(out!=null){
String fileName="";
fileName+="评价报告.doc";
try {
HttpServletResponse response = ServletActionContext.getResponse();
response.setHeader("Content-disposition","attachment; filename="+new String(fileName.getBytes("GB2312"), "8859_1"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
out是jsp页面表单元素,一个button,用于提交表单到相应Action进行Word下载。Action设置jsp页面头文件。这样每次点击button就可以把相应jsp页面的内容保存到Word中并且支持下载,Word中内容并且是可编辑状态。
不足的地方在于由于表内容是动态生成,有的需要先查看在下载Word,就需要另外建立一个新JSP页面进行Word下载,当然首先要在struts.xml里配置好页面转向。
新建立的页面传值同查看页面要保持一样。
转载请注明出处51数据库 » java数据导出word