关键代码如下:
FileInputStream fileInputStream = new FileInputStream( soureFile);。
POIFSFileSystem pfs = new POIFSFileSystem( fileInputStream );。
HWPFDocument hwpf = new HWPFDocument(pfs);// make a HWPFDocument object。
OutputStream output = new FileOutputStream( targetFile );。
hwpf.write(output);// write to the target file。
output.close();。
(2)再word中插入表格。HWPF的情况:
Table tcDataTable = range.insertTableBefore( (short)column , row);//column and row列数和行数。
tcDataTable.getRow(i).getCell(j).getParagraph(0).getCharacterRun(0).insertBefore("插入i行j列的内容" );。
XWPF的情况:
String outputFile = "D:\\test.doc";。
XWPFDocument document = new XWPFDocument();。
XWPFTable tableOne = document.createTable();。
XWPFTableRow tableOneRowOne = tableOne.getRow(0);。
tableOneRowOne.getCell(0).setText("11");。
XWPFTableCell cell12 = tableOneRowOne.createCell();。
cell12.setText("12");。
// tableOneRowOne.addNewTableCell().setText("第1行第2列");。
// tableOneRowOne.addNewTableCell().setText("第1行第3列");。
// tableOneRowOne.addNewTableCell().setText("第1行第4列");。
XWPFTableRow tableOneRowTwo = tableOne.createRow();。
tableOneRowTwo.getCell(0).setText("21");。
tableOneRowTwo.getCell(1).setText("22");。
// tableOneRowTwo.getCell(2).setText("第2行第3列");。
XWPFTableRow tableOneRow3 = tableOne.createRow();。
tableOneRow3.addNewTableCell().setText("31");。
tableOneRow3.addNewTableCell().setText("32");。
FileOutputStream fOut;。
try {
fOut = new FileOutputStream(outputFile);。
document.write(fOut); 。
fOut.flush();
// 操作结束,关闭文件
fOut.close();
} catch (Exception e) {。
e.printStackTrace();。
关键代码如下:
FileInputStream fileInputStream = new FileInputStream( soureFile);。
POIFSFileSystem pfs = new POIFSFileSystem( fileInputStream );。
HWPFDocument hwpf = new HWPFDocument(pfs);// make a HWPFDocument object。
OutputStream output = new FileOutputStream( targetFile );。
hwpf.write(output);// write to the target file。
output.close();。
(2)再word中插入表格。HWPF的情况:
Table tcDataTable = range.insertTableBefore( (short)column , row);//column and row列数和行数。
tcDataTable.getRow(i).getCell(j).getParagraph(0).getCharacterRun(0).insertBefore("插入i行j列的内容" );。
XWPF的情况:
String outputFile = "D:\\test.doc";。
XWPFDocument document = new XWPFDocument();。
XWPFTable tableOne = document.createTable();。
XWPFTableRow tableOneRowOne = tableOne.getRow(0);。
tableOneRowOne.getCell(0).setText("11");。
XWPFTableCell cell12 = tableOneRowOne.createCell();。
cell12.setText("12");。
// tableOneRowOne.addNewTableCell().setText("第1行第2列");。
// tableOneRowOne.addNewTableCell().setText("第1行第3列");。
// tableOneRowOne.addNewTableCell().setText("第1行第4列");。
XWPFTableRow tableOneRowTwo = tableOne.createRow();。
tableOneRowTwo.getCell(0).setText("21");。
tableOneRowTwo.getCell(1).setText("22");。
// tableOneRowTwo.getCell(2).setText("第2行第3列");。
XWPFTableRow tableOneRow3 = tableOne.createRow();。
tableOneRow3.addNewTableCell().setText("31");。
tableOneRow3.addNewTableCell().setText("32");。
FileOutputStream fOut;。
try {
fOut = new FileOutputStream(outputFile);。
document.write(fOut); 。
fOut.flush();
// 操作结束,关闭文件
fOut.close();
} catch (Exception e) {。
e.printStackTrace();。
用jacob吧。。
/**
*@author eyuan。
*/
package per.eyuan.word2txt.core;。
import com.jacob.*;。
import com.jacob.com.*;。
import com.jacob.activeX.*;。
import java.io.*;。
import java.util.Scanner;。
public class Core {。
/**
* 实现转换的函数
* @param sourceFilesPath。
* @param destinationFilesPath。
* @param destinationFilesType。
* @return void。
* @see import com.jacob.activeX.*;。
*/
public static void change(String sourceFilesPath,String destinationFilesPath,int destinationFilesType){。
//使用word文件所在的目录(源路径)建立目录文件。
File sourcePathFile=new File(sourceFilesPath);。
//取得word文件(源文件列表)
File sourceFilesList[]=sourcePathFile.listFiles();。
System.out.println("共有"+sourceFilesList.length+"个文件(文件夹)");。
//指定要转换的文件所在的目录下,如果有子目录,
//则进入子目录,继续查找word文档并将其转换,
//直到将指定目录下的所有word文档转换完。
//子目录名
String sourceChildPath=new String("");。
//保持原来的层次关系,将子目录下的文件存放在新建的子目录中。
String destiNationChildPath=new String("");。
//检索文件,过滤掉非word文件,通过扩展名过滤。
for(int i=0;i<sourceFilesList.length;i++){。
//排除掉子文件夹
if(sourceFilesList[i].isFile()){。
System.out.println("第"+(i+1)+"个文件:");。
//取得文件全名(包含扩展名)
String fileName=sourceFilesList[i].getName();。
String fileType=new String(""); 。
//取得文件扩展名
fileType=fileName.substring((fileName.length()-4), fileName.length());。
//word2007-2010扩展名为docx。
//判断是否为word2007-2010文档,及是否以docx为后缀名。
if(fileType.equals("docx")){。
System.out.println("正在转换。。。");。
//输出word文档所在路劲。
System.out.println("目录:"+sourceFilesPath);。
//输出word文档名。
System.out.println("文件名:"+fileName);。
//System.out.println(fileName.substring(0, (fileName.length()-5)));。
//核心函数
//启动word
ActiveXComponent app=new ActiveXComponent("Word.Application");。
//要转换的文档的全路径(所在文件夹+文件全名)
String docPath=sourceFilesPath+"\\"+fileName;。
//转换后的文档的全路径(所在文件夹+文件名)
String othersPath=destinationFilesPath+"\\"+fileName.substring(0,(fileName.length()-5));。
//
String inFile=docPath;。
String outFile=othersPath;。
//
boolean flag=false;。
//核心代码
try{
//设置word可见性。
app.setProperty("Visible", new Variant(false));。
//
Dispatch docs=app.getProperty("Documents").toDispatch();。
//打开word文档 。
Dispatch doc=Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[]{inFile,new Variant(false),new Variant(true)}, new int[1]).toDispatch();。
//0:Microsoft Word 97 - 2003 文档 (.doc)。
//1:Microsoft Word 97 - 2003 模板 (.dot)。
//2:文本文档 (.txt)。
//3:文本文档 (.txt)。
//4:文本文档 (.txt)。
//5:文本文档 (.txt)。
//6:RTF 格式 (.rtf)。
//7:文本文档 (.txt)。
//8:HTML 文档 (.htm)(带文件夹)。
//9:MHTML 文档 (.mht)(单文件)。
//10:MHTML 文档 (.mht)(单文件)。
//11:XML 文档 (.xml)。
//12:Microsoft Word 文档 (.docx)。
//13:Microsoft Word 启用宏的文档 (.docm)。
//14:Microsoft Word 模板 (.dotx)。
//15:Microsoft Word 启用宏的模板 (.dotm)。
//16:Microsoft Word 文档 (.docx)。
//17:PDF 文件 (.pdf)。
//18:XPS 文档 (.xps)。
//19:XML 文档 (.xml)。
//20:XML 文档 (.xml)。
//21:XML 文档 (.xml)。
//22:XML 文档 (.xml)。
//23:OpenDocument 文本 (.odt)。
//24:WTF 文件 (.wtf)。
//另存为指定格式的文档。
Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[]{outFile,new Variant(destinationFilesType)}, new int[1]);。
//
Variant file=new Variant(false);。
//关闭文档
Dispatch.call(doc, "Close",file);。
//
flag=true;。
}catch(Exception e){。
e.printStackTrace();。
System.out.println("文档转换失败");。
}finally{
app.invoke("Quit",new Variant[]{});。
}
System.out.println("转换完毕"); 。
}
//word97-2003扩展名为doc。
//判断是否为word2003-2007文档,及是否以doc为后缀名。
else if(fileType.equals(".doc")){。
System.out.println("正在转换。。。");。
//输出word文档所在路劲。
System.out.println("目录:"+sourceFilesPath);。
//输出word文档名。
System.out.println("文件名:"+fileName);。
//System.out.println(fileName.substring(0, (fileName.length()-4)));。
//核心函数
//启动word
ActiveXComponent app=new ActiveXComponent("Word.Application");。
//要转换的文档的全路径(所在文件夹+文件全名)
String docPath=sourceFilesPath+"\\"+fileName;。
//转换后的文档的全路径(所在文件夹+文件名)
String othersPath=destinationFilesPath+"\\"+fileName.substring(0,(fileName.length()-4));。
//
String inFile=docPath;。
String outFile=othersPath;。
//
boolean flag=false;。
//核心代码
try{
//设置word可见性。
app.setProperty("Visible", new Variant(false));。
//
Dispatch docs=app.getProperty("Documents").toDispatch();。
//打开word文档 。
Dispatch doc=Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[]{inFile,new Variant(false),new Variant(true)}, new int[1]).toDispatch();。
//另存为指定格式的文档。
Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[]{outFile,new Variant(destinationFilesType)}, new int[1]);。
//
Variant file=new Variant(false);。
//关闭文档
Dispatch.call(doc, "Close",file);。
//
flag=true;。
}catch(Exception e){。
e.printStackTrace();。
System.out.println("文档转换失败");。
}finally{
app.invoke("Quit",new Variant[]{});。
}
System.out.println("转换完毕"); 。
}
//文档的扩展名不是doc或docx。
else{
System.out.println("非word文档");。
}
}
//如果是子文件夹,则递归遍历,将所有的word文档转换。
else{
//
sourceChildPath=sourceFilesPath;。
//该文件是目录
sourceChildPath=sourceChildPath+"\\"+sourceFilesList[i].getName()+"\\";。
System.out.println("源文件所在路径:"+sourceChildPath);。
//修改目标文件夹,保持原来的层级关系。
destiNationChildPath=destinationFilesPath;。
destiNationChildPath=destinationFilesPath+"\\"+sourceFilesList[i].getName()+"\\";。
System.out.println("转换后文件所在路径"+destiNationChildPath);。
//
mkdir(destiNationChildPath);。
//递归遍历所有目录,查找word文档,并将其转换。
change(sourceChildPath, destiNationChildPath,destinationFilesType);。
}
}
System.out.println("所有文档转换完毕");。
}
/**
* 用于创建文件夹的方法 。
* @param mkdirName 。
*/
public static void mkdir(String mkdirName){。
try{
//使用指定的路径创建文件对象。
File dirFile = new File(mkdirName); 。
//
boolean bFile = dirFile.exists();。
//已经存在文件夹,操作???提醒是否要替换。
if( bFile == true ) { 。
System.out.println("已经存在文件夹"+mkdirName); 。
}
//不存在该文件夹,则新建该目录。
else{
System.out.println("新建文件夹"+mkdirName); 。
bFile = dirFile.mkdir(); 。
if( bFile == true ){。
System.out.println("文件夹创建成功"); 。
}else{
System.out.println(" 文件夹创建失败,清确认磁盘没有写保护并且空件足够"); 。
System.exit(1); 。
}
}
}catch(Exception err){。
System.err.println("ELS - Chart : 文件夹创建发生异常"); 。
err.printStackTrace(); 。
}finally{
}
}
/**
* 判断某个文件夹是否存在
* @param path
*/
public static boolean isPathExist(String path){。
boolean isPathExist=false;。
try{
File pathFile = new File(path);。
if(pathFile.exists())。
isPathExist= true;。
else
isPathExist= false;。
}catch(Exception err){。
err.printStackTrace(); 。
}
return isPathExist;。
}
/**
* 主函数
*/
public static void main(String[] args){。
Scanner sc=new Scanner(System.in);。
//源文档所在路径
String sourceFilesPath=""; 。
// String inputSourcePath="";。
// boolean sourcePathFlag=true;。
// System.out.println("请输入要转换文档所在的文件夹");。
// while(sourcePathFlag){。
// inputSourcePath=sc.next();。
// if(!isPathExist(inputSourcePath))。
// System.out.println("源路径不存在,请输入正确的路径");。
// else
// sourcePathFlag=false;。
// }
// sourceFilesPath=inputSourcePath;。
sourceFilesPath="D:\\word";。
//目标文档要存放的目录
String destinationFilesPath="";。
// String inputdestinationPath="";。
// boolean destinationPathFlag=true;。
// System.out.println("请输入转换后文档要存放的文件夹");。
// while(destinationPathFlag){。
// inputdestinationPath=sc.next();。
// //目标文件不存在时,是否要提示用户创建文件。
// if(!isPathExist(inputdestinationPath))。
// System.out.println("目标路径不存在,请输入正确的路径");。
// else
// destinationPathFlag=false;。
// }
// destinationFilesPath=inputdestinationPath; 。
destinationFilesPath="D:\\txt";。
//选择要转换的类型
int destinationFilesType=0;。
int inputNumber=0;。
boolean numFlag=true;。
System.out.println("您要将word文档转换为哪种文档格式?");。
System.out.println("0:doc \t 2:txt \t 8:html \t 9:htm \t 11:xml \t 12:docx \t 17:pdf \t 18:xps");。
while(numFlag){。
inputNumber=sc.nextInt();。
if(inputNumber!=2&&inputNumber!=8&&inputNumber!=9&&inputNumber!=11&&inputNumber!=12&&inputNumber!=17){。
System.out.println("您的输入有误,请输入要转换的文档类型前的数字");。
}else
numFlag=false;。
}
destinationFilesType=inputNumber;。
//实行转换
change(sourceFilesPath, destinationFilesPath,destinationFilesType);。
//测试各种类型转换
// for(int i=0;i<25;i++){。
// destinationFilesType=i;。
// System.out.println("文件类型"+destinationFilesType); 。
// System.out.println("存放目录:"+destinationFilesPath+"\\"+i);。
// mkdir(destinationFilesPath+"\\"+i);。
// change(sourceFilesPath, destinationFilesPath+"\\"+i,destinationFilesType);。
// }
}
这个我刚用的。。格式都能带过来的。 你自己再下载个 jacob的包和dll文件。
假如是.docx文件,用XWPFDocument 这个就可以,poi里面的类。
然后是XWPFTable,XWPFTableRow,XWPFTableCell类。
分别获得表格,表格的行,表格的格。
doc就多了,网上随便找
但是假如又有段落还有表格,我也卡在这了,假如找到方法,麻烦提醒我一下!!
1. 首先在需要强制换行的单元格里使用poi的样式,并且把样式设定为自动换行 。
# HSSFCellStyle cellStyle=workbook.createCellStyle(); 。
# cellStyle.setWrapText(true); 。
# cell.setCellStyle(cellStyle); 。
2. 其次是在需要强制换行的单元格,使用\就可以实再强制换行 。
1. HSSFCell cell = row.createCell((short)0); 。
2. cell.setCellStyle(cellStyle); cell.setCellValue(new HSSFRichTextString("hello\r\n world!")); 。
这样就能实现强制换行,
换行后的效里是单元格里强制换行。
hello
world!