如何使用JAVA,POI读写word文档
1. 库的配置
在默认情况下,新创建的excel vba中不支持定义word对象。
所以需要先引入word库,操作步骤如下:
1.1 打开excel vba 界面
1.2 选中其中的一个Module
1.3 选择菜单, Tools --> References
在打开的对话框中选择类似 "Microsoft Word 14.0 Object Library".
1.4 点击OK保存配置。
2. 打开文档
Set wordApplication = CreateObject("Word.Application")
wordApplication.Visible = False
Dim hasOpenDoc As Boolean
hasOpenDoc = IsOpen(filePath) ' is a self-defined function to check file is opend
If hasOpenDoc = True then
Set wordDoc = GetObject(filePath)
End if
If hasOpenDoc = False Then
Set wordDoc = wordApplication.Documents.Open(filePath)
End if
wordDoc.Active
With wordApplication
Dim aParagraph As Word.Paragraph
For Each aParagraph In wordDoc.Paragraphs
' do some thing to every paragraph.
Next aParagraph
End with
wordDoc.Close
Set wordDoc = nothing
' 如下这段代码引用某位牛人的,非常感谢他。由于路径丢失,不能给出链接, 抱歉
' 如下的找寻方式,能够正确的找出文件是否被打开
Function IsOpen(fileName As String) As Boolean
IsOpen = False
Dim findFile As Integer
findFile = FreeFile()
On Error GoTo ErrOpen
Open fileName For Binary Lock Read Write As findFile
Close findFile
Exit Function
ErrOpen:
If Err.Number 70 Then
Msg = "Error # " & Str(Err.Number) & "was generated by " & Err.Source & Chr(13) & Err.Description
MsgBox Msg, "Error", Err.HelpFile, Err.HelpContext
Else
IsOpen = True
End If
End Function
如何在word文档里面插入一个新的word文档呢?下面我将用2个word文件作为例子分析,在“新时代”文档里面插入一个叫“真伊”的文档,插入后的最终效果图见图1,打开新时代这个文档双击真伊这个word文档图标就可以打开名叫真伊的文档。
特别说明:因为office和wps在界面上和功能上出入不大,笔者就用wps作为示范,采用同样的步骤你在office上面也能操作。
1、打开需要插入的word文档,选择需要如何的位置,比如我就选择在新时代1后插入我需要谈价的文档,选择后会有黑色的光标(竖线)在不停闪烁。
2、选择菜单上面的“插入”, 选择“对象”,
3、图四出来后首先选择“由文件创建”,其次选择“浏览”(找到需要被插入的word文档,我的文档放在桌面,选择确定。) 然后勾选“显示为图标”,最后选择“确定”。
是不是很方便呢?可以在一个文档里面加入一个新的word文件。
延伸扩展:同样的方法在word文档里面插入excel,在excel表格里面插入word、excel等都是可行的哦
package com.sample;
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;
/**
*
* @author wangyanjun
* @email bd_wyj@sina.com
* @createDate Jun 12, 2008
*/
public class CreateWordDemo {
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(2);//衬距,看效果就知道什么意思了
aTable.setSpacing(3);//即单元格之间的间距
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("d:\\img01800.jpg");
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();
}
/**
* @param args
*/
public static void main(String[] args) {
CreateWordDemo word = new CreateWordDemo();
String file = "c:/demo1.doc";
try {
word.createDocContext(file);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用java语言,如何对一个类中的静态方法做切面编程?
package com.classloader.test;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.Modifier;public class AOPCallStaticMehtod {private CallBack callBack;public AOPCallStaticMehtod(CallBack callBack) {this.callBack = callBack;}public static ...
Java三目运算符
java String ptype = ptype12 == null ? "-定府控身料1" : ptype12;switch (Integer.valueOf(ptype)) { case -1:return ptype;\/\/ ... 其他case语句 ...} 如果必须使用三目运算符,可以将其写为:java return "9".equals(ptype12) ? ptype12 : (其他表达式);需要注意的是,三...
JAVA中“p.setLayout(new GridLayout(1, 2));”是什么意思?
p.setLayout(参数)此方法表示设置窗口布局,其中的“参数”是窗口布局的样式,new GridLayout(1, 2)为网格布局样式。其中的参数“1”“2”分别为网格的“行数”和“列数”。p.setLayout(new GridLayout(1, 2));此句话的整体意思是将窗口布局设置为网格式布局,网格的行数和列数分别是1和2....
在java中0X1.0p-3怎样列表达式?什么意思?
ox表示十六进制。p表示指数,其基数是2。所以 0x1.0p-3 = 1.0乘以2的-3次方 = 1.0 *(1\/8)=0.125。例如:if是条件判断,如果不满足条件的话,执行else;int i =5;if(i==4){\/\/判断是否为4 System.out.println(“这个数是:4”);\/\/如果是,输出结果。}else{ System.out.println...
Java使用循环,实现猜拳游戏统计多少局及胜率?
为了让游戏有参与感,并体现java面对对象的思想,我先创建一个Player选手类,包含选手的名字playerName还有出拳方法guess()。出拳时采用随机获取0、1和2的方式分别代表石头、剪刀和布,代码如下:public class Player {private String playerName;public Player(String playerName) {this.playerName = ...
“JMPP”代表什么?
它属于计算机科学中的编程工具类别,特别适用于对Java程序进行预编译处理和优化。以上信息源于网络,主要用于学习和交流,版权归属原始作者。请读者在使用时自行判断,以确保准确性和安全性。总的来说,"JMPP"是一个用于简化Java程序处理过程的实用工具,对于开发者来说具有实际价值。
java 8 新特性中p->p.setLastName("Doe"));
这是lambda表达式,也就是匿名函数,对于 persons.forEach(p->p.setLastName("Doe"));这句代码,persons是一个list,forEach是一个内部迭代的方法,p->p.setLastName("Doe")是一个匿名函数对象。这个语句等价于 for (Person p : persons) { p.setLastName("Doe");} 但是用for循环是外部...
Java中,父类P,有方法A 子类C继承自P并且重载了A, 请问,当
应该还是C的方法 ,P有方法A C无方法A时 执行P P有方法A C有方法A时 执行C
用Java编写程序
public class StringBufferDemo { public static void main(String[] args) { StringBuffer s=new StringBuffer("近来天气不太好,有时几天都见不到月亮。可今天却是明月当空,青天万里无云");StringBuffer s1=new StringBuffer("明月当空,青天万里无云");s=s.delete(s.lastIndexOf("明月当空...
java中如何替换<p>标签
你说的问题不够表达清楚,是在html替换,还是java中字符替换啊,反正因该都一样,要么用正则表达化,要么用String.replace(char oldChar, char newChar);\/\/这样解决,脚本里面好像没有这个方法,只能用正则表达式了
啜蚁宝龄: 如何使用JAVA、POI读写word文档?? 能不能将一个word的内容完全读过来,放到一个新生成的word文件中去,要求能将word中的表格、图片等保留,格式不变.最好能给个例子?网上多是很早以前的那个解决方法如下:,只能读文本内容,...
元坝区18418136192: 怎样用Java、POI技术来读取Word文档,并把Word文档的原来格式完整地显示在页面上? - ?
啜蚁宝龄: 可以读取元素,将word相应的元素转换为html相应的元素.不过很多word的特效都是html无法展示的,具体的做法可以参考poi的官方文档,官方文档很详细.
元坝区18418136192: java poi 操作word文档,怎么写入带上下标的文字? - ?
啜蚁宝龄: 1.1 添加poi支持:包下载地址http://www.apache.org/dyn/closer.cgi/poi/release/ 1.2 POI对Excel文件的读取操作比较方便,POI还提供对Word的DOC格式文件的读取.但在它的发行版本中没有发布对Word支持的模块,需要另外下载一个POI的扩...
元坝区18418136192: 要用Java POI读取Excel文件中的数据,并且实现对数据的格式校验,输入错误信息 - ?
啜蚁宝龄: 太笼统了,只能给出一个POI读取Excel的大致方法. 对数据的校验,与具体的文件有关. 你定义的那一列是时间类型的,那一列是数字列的. 盲目的读取,无法判断数据的类型.
元坝区18418136192: java操作word的组件有哪些 - ?
啜蚁宝龄: 可以考虑Apache POI ,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.1、import java.io.File; import java.io.FileInputStream; import java.io.InputStream; 2、import org.apache.poi.hwpf.extractor.WordExtractor;/**读取word文本信息*/ public class WordDemo { public static void main(String[] args) {
元坝区18418136192: java 操作 word 读取页数 - ?
啜蚁宝龄: 在word文档中给每页都加入换页符,统计换页符的个数,换页符ASCII值为12.暂时只能想到这个方法,不知道可不可行.
元坝区18418136192: 用java poi包读取Excel单元格 - ?
啜蚁宝龄: String excelDir ="c:/tep.xls"; //excel路径 FileInputStream finput = new FileInputStream("excelDir" ); POIFSFileSystem fs = new POIFSFileSystem( finput ); HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFSheet sheet = wb.getSheetAt(0);...
元坝区18418136192: Java怎么用POI读取Excel函数 - ?
啜蚁宝龄: 思路很简单: 1、在程序里取得公式 2、在公式执行之前校验格式,把多余的都好去掉(简单的replace) 3、然后再进行计算
元坝区18418136192: 如何从java输出到excel - ?
啜蚁宝龄: 用JAVA程序,读取或者写入excel文件,通过用jxl或者poi,下面是我给你写的例子.分别是用jxl读写excel文件,用poi读写excel文件.希望对你有帮助.(需要下载jxl和poi的jar包) package util.excel; import java.io.FileInputStream; import java.io....
元坝区18418136192: java操作word 的有哪几种方式 - ?
啜蚁宝龄: java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估 计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同...