本文目录一览:
- 1、java读取03格式word文档遇到异常.异常信息如下:
- 2、java解析word文档有哪些方法
- 3、java读取word内容时抛错
- 4、用JAVA写文件成Word时,打开Word出现“word无法启动转换器mswrd632.wpc” 是程序哪里出了问题?如何解决
- 5、Java poi读取doc文档出错
- 6、java读取word文件的问题
java读取03格式word文档遇到异常.异常信息如下:
楼主,缺少引用的包呀 org.apache.xerces.jaxp.DocumentBuilderFactoryImpl NOT FOUND
不妨试试 System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
"com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
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文档
主要程序如下:
public String bin2hex(String bin) {
char[] digital = "0123456789ABCDEF".toCharArray();
StringBuffer sb = new StringBuffer("");
byte[] bs = bin.getBytes();
int bit;
for (int i = 0; i bs.length;i++) {
bit = (bs[i] 0x0f0)
4;
sb.append("\\'");
sb.append(digital[bit]);
bit = bs[i] 0x0f;
sb.append(digital[bit]);
}
return sb.toString();
}
public String readByteRtf(InputStream ins, String path){
String sourcecontent =
"";
try{
ins = new
FileInputStream(path);
byte[] b
= new byte[1024];
if (ins == null) {
System.out.println("源模板文件不存在");
}
int bytesRead = 0;
while (true) {
bytesRead = ins.read(b, 0, 1024); // return final read bytes
counts
if(bytesRead == -1) {// end of InputStream
System.out.println("读取模板文件结束");
break;
}
sourcecontent += new String(b, 0, bytesRead); // convert to string
using bytes
}
}catch(Exception e){
e.printStackTrace();
}
return sourcecontent ;
}
以上为核心代码,剩余部分就是替换,从新组装java中的String.replace(oldstr,newstr);方法可以实现,在这就不贴了。源代码部分详见附件。
运行源代码前提:
c盘创建YQ目录,将附件中"模板.rtf"复制到YQ目录之下,运行OpreatorRTF.java文件即可,就会在YQ目录下生成文件名如:21时15分19秒_cheney_记录.rtf
的文件。
package com;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class OperatorRTF {
public String strToRtf(String content){
char[] digital = "0123456789ABCDEF".toCharArray();
StringBuffer sb = new StringBuffer("");
byte[] bs = content.getBytes();
int bit;
for (int i = 0; i bs.length; i++) {
bit = (bs[i] 0x0f0)
4;
sb.append("\\'");
sb.append(digital[bit]);
bit = bs[i] 0x0f;
sb.append(digital[bit]);
}
return sb.toString();
}
public String replaceRTF(String content,String replacecontent,int
flag){
String rc = strToRtf(replacecontent);
String target = "";
if(flag==0){
target = content.replace("$timetop$",rc);
}
if(flag==1){
target = content.replace("$info$",rc);
}
if(flag==2){
target = content.replace("$idea$",rc);
}
if(flag==3){
target = content.replace("$advice$",rc);
}
if(flag==4){
target = content.replace("$infosend$",rc);
}
return target;
}
public String getSavePath() {
String path = "C:\\YQ";
File fDirecotry = new File(path);
if (!fDirecotry.exists()) {
fDirecotry.mkdirs();
}
return path;
}
public String ToSBC(String input){
char[] c =
input.toCharArray();
for (int i =
0; i c.length; i++){
if (c[i] == 32){
c[i] = (char) 12288;
continue;
}
if (c[i] 127){
c[i] = (char) (c[i] + 65248);
}
}
return new
String(c);
}
public void rgModel(String username, String content) {
// TODO Auto-generated method stub
Date current=new Date();
SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd
HH:mm:ss");
String targetname = sdf.format(current).substring(11,13) + "时";
targetname += sdf.format(current).substring(14,16) + "分";
targetname += sdf.format(current).substring(17,19) + "秒";
targetname += "_" + username +"_记录.rtf";
String strpath = getSavePath();
String sourname = strpath+"\\"+"模板.rtf";
String sourcecontent = "";
InputStream ins = null;
try{
ins = new FileInputStream(sourname);
byte[] b = new byte[1024];
if (ins == null) {
System.out.println("源模板文件不存在");
}
int bytesRead = 0;
while (true) {
bytesRead = ins.read(b, 0, 1024); // return final read bytes
counts
if(bytesRead == -1) {// end of InputStream
System.out.println("读取模板文件结束");
break;
}
sourcecontent += new String(b, 0, bytesRead); // convert to string
using bytes
}
}catch(Exception e){
e.printStackTrace();
}
String targetcontent = "";
String array[] = content.split("~");
for(int i=0;iarray.length;i++){
if(i==0){
targetcontent = replaceRTF(sourcecontent, array[i], i);
}else{
targetcontent = replaceRTF(targetcontent, array[i], i);
}
}
try {
FileWriter fw = new FileWriter(getSavePath()+"\\" +
targetname,true);
PrintWriter out = new PrintWriter(fw);
if(targetcontent.equals("")||targetcontent==""){
out.println(sourcecontent);
}else{
out.println(targetcontent);
}
out.close();
fw.close();
System.out.println(getSavePath()+" 该目录下生成文件" +
targetname + " 成功");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
OperatorRTF oRTF = new OperatorRTF();
String content =
"2008年10月12日9时-2008年10月12日6时~我们参照检验药品的方法~我们参照检验药品的方法~我们参照检验药品的方法~我们参照检验药品的方法";
oRTF.rgModel("cheney",content);
}
}
java读取word内容时抛错
找到一个方案,如下:
缺少xmlbeans-2.3.0.jar,将XSSFWorkbook wb = new XSSFWorkbook(is);
// 获取第一个Sheet页
XSSFSheet sheet = wb.getSheetAt(0);
改成
Workbook wbs = WorkbookFactory.create(f.getInputStream());
Sheet childSheet = wbs.getSheetAt(0);
用JAVA写文件成Word时,打开Word出现“word无法启动转换器mswrd632.wpc” 是程序哪里出了问题?如何解决
一、“打开并修复”文件
Word XP提供了一个恢复受损文档的新方法,操作步骤如下:
1.在“文件”菜单上,单击“打开”命令;
2.在“查找范围”列表中,单击包含要打开的文件的驱动器、文件夹或Internet位置;
3.在文件夹列表中,定位并打开包含文件的文件夹;
4.选择要恢复的文件;
5.单击“打开”按钮旁边的箭头,然后单击“打开并修复”。
二、从任意文件中恢复文本
Word提供了一个“从任意文件中恢复文本”的文件转换器,可以用来从任意文件中提取文字。要使用该文件转换器恢复损坏文件中的文本,操作步骤如下:
1.在“工具”菜单上,单击“选项”命令,再单击“常规”选项卡;
2.确认选中“打开时确认转换”复选框,单击“确定”按钮;
3.在“文件”菜单上,单击“打开”命令;
4.在“文件类型”框中,单击“从任意文件中恢复文本”。如果在“文件类型”框中没有看到“从任意文件中恢复文本”,则需要安装相应的文件转换器。安装方法不做赘述;
5.像通常一样打开文档。
此时,系统会弹出“转换文件”对话框,请选择的需要的文件格式。当然,如果要从受损Word文档中恢复文字,请选择“纯文本”,单击“确定”按扭。不过,选择了“纯文本”,方式打开文档后,仅能恢复文档中的普通文字,原文档中的图片对象将丢失,页眉页脚等非文本信息变为普通文字。
Java poi读取doc文档出错
The supplied data appears to be a raw XML file. Formats such as Office 2003 XML are not supported
换对象来处理
~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
* 仅支持2003
*
* @param file
* @throws IOException
*/
private static void readExcel2003(File file) throws IOException {
InputStream is = new FileInputStream(file);
Workbook rwb = new HSSFWorkbook(is);
Sheet sheet = rwb.getSheetAt(0);
Row row = sheet.getRow(3);
Cell cell = row.getCell(0);
System.out.println(cell.getStringCellValue());
}
/**
* 仅支持2007
*
* @param file
* @throws IOException
*/
private static void readExcel2007(File file) throws IOException {
InputStream is = new FileInputStream(file);
Workbook rwb = new XSSFWorkbook(is);
Sheet sheet = rwb.getSheetAt(0);
Row row = sheet.getRow(3);
Cell cell = row.getCell(0);
System.out.println(cell.getStringCellValue());
}
/**
* 支持2003/2007
*
* @param file
* @throws Exception
*/
private static void readExcel(File file) throws Exception {
InputStream is = new FileInputStream(file);
Workbook rwb = WorkbookFactory.create(is);
Sheet sheet = rwb.getSheetAt(0);
Row row = sheet.getRow(3);
Cell cell = row.getCell(0);
System.out.println(cell.getStringCellValue());
}
java读取word文件的问题
请贴出代码,谢谢。
请关闭输入流,释放资源,谢谢。调用close()方法。
其他貌似没有发现什么问题。
public static String run(String filename){
WordExtractor extractor=null;
String text=null;
try{
FileInputStream in = new FileInputStream (filename);
extractor = new WordExtractor();
text=extractor.extractText(in);
}catch(Exception ex){
//log
return null;
}
return text;
}
public static void main(String[] args){
try{
FileOutputStream out=new FileOutputStream("result.txt");
out.write(WordProcess.run(args[0]).getBytes());
out.flush();
out.close();
}catch(Exception ex){
System.out.println(ex.toString());
}
}
看看这个。模范这样写,试试看。这个代码我试过,没问题,如果这样写还是有问题,那就不是代码的问题了。