java解析word文檔報錯,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());

}

}

看看這個。模範這樣寫,試試看。這個代碼我試過,沒問題,如果這樣寫還是有問題,那就不是代碼的問題了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/257324.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:44
下一篇 2024-12-15 12:44

相關推薦

發表回復

登錄後才能評論