Java操作office(包括WPS)
此文仅提供操作Word和Excel的示例,操作office可以使用POI和freemarker,两者原理大同小异。喜欢使用freemarker的小伙伴可以去搜相关的资料进行学习。
代码
- 以下提供两个操作Word的类,分别是PoiController.java 和ReadWord.java
package com.xxx.comm.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Logger;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.junit.Test;
public class PoiController {
String [] formEle = new String[9] ;
static final Logger log = Logger.getLogger(PoiController.class.getName());
String file_id = "83EDF07BEAE84FAFBF9E2E4A1843CA33";
public void writeToDoc() throws Exception {
formEle[0] = file_id;
formEle[1] = "XXX呈批单";
formEle[2] = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
formEle[3] = "张 三";
formEle[4] = "同意,通过";
formEle[5] = "12345";
String tempPath = "E:\\AdvanceProject\\WebProject05\\POITest001\\WebContent\\tempDoc.doc";
InputStream is = new FileInputStream(tempPath);
HWPFDocument doc = new HWPFDocument(is);
Range range = doc.getRange();
//System.out.println(formEle[1]);
for(int i=0; i<formEle.length;i++){
range.replaceText("${formEle["+i+"]}", formEle[i]);
}
String docPath = "E:\\AdvanceProject\\WebProject05\\POITest001\\WebContent\\"
+ file_id.substring(0, 1)
+ "\\" + file_id.substring(1, 2)
+ "\\" + file_id+ ".doc";
OutputStream os = new FileOutputStream(docPath);
doc.write(os);
log.info("doc输出成功");
this.closeStream(os);
this.closeStream(is);
}
private void closeStream(InputStream is){
if(is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void closeStream(OutputStream os){
if(os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void deleteFile(File file) {
if(file.delete()){
log.info("文件已刪除");
}else{
file.delete();
}
}
public static void main(String[] args) throws Exception {
PoiController obj = new PoiController();
obj.writeToDoc();
String file_id = "83EDF07BEAE84FAFBF9E2E4A1843CA33";
String docPath = "E:\\AdvanceProject\\WebProject05\\POITest001\\WebContent\\"
+ file_id.substring(0, 1)
+ "\\" + file_id.substring(1, 2)
+ "\\" + file_id+ ".doc";
obj.deleteFile(new File(docPath));
}
}
ReadWord .java
package com.XXX.comm.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.Logger;
import org.apache.poi.hwpf.extractor.WordExtractor;
public class ReadWord {
static final Logger logger = Logger.getLogger(ReadWord.class.getName());
public static void main(String[] args) {
File file;
FileInputStream is;
String rootPath = System.getProperty("user.dir")+"\\WebContent";
//System.out.println(rootPath);
try {
String path = rootPath+"\\8\\3\\";
file = new File(path);
/*if(file.exists()){
logger.info(path +" not exists!!");
System.out.println(path +" not exists!! "+file.exists());
return;
}*/
File [] listFiles = file.listFiles();
if(listFiles.length==0)
logger.info(path +" not exists!!");
else{
for(File fi : listFiles){
String fileName= fi.getName();
logger.info(fileName);
is = new FileInputStream(path+fileName);
WordExtractor extractor;
try{
extractor = new WordExtractor(is);
String st = extractor.getText();
System.out.println(st);
}catch(IOException e ){
e.printStackTrace();
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- tempDoc.doc的Word文档如图所示