07版的出错。

07版的出错。

如果是导入07版本的Word文件,导入过程中,会直接进入exception 而不是OfficeXmlFileException异常,怎么办啊。

下面是我的代码。

package com.huanyu.service;

import com.huanyu.dto.ImportWordParamDto;
import com.huanyu.dto.ImportWordResultDto;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.poifs.filesystem.OfficeXmlFileException;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;

import java.io.IOException;
import java.util.List;

/**
 * 实现导入Word文档的业务层
 *
 * @author Huanyu
 * @date 2018/4/10
 */
public class WordService {
    public ImportWordResultDto imp(ImportWordParamDto paramDto) {
        ImportWordResultDto result = new ImportWordResultDto();
        result.setTitle(paramDto.getTitle());
        HWPFDocument document = null;
        try {
            document = new HWPFDocument(paramDto.getWord().getInputStream());
            // System.out.println(document.getDocumentText());
            // 将Word文档中的换行,转换为HTML中的换行,
            result.setContent(document.getDocumentText().replace("\r", "<br/>"));
        } catch (OfficeXmlFileException oe) {
            System.out.println("这可能是一个07版的Word");
            // 07版本
        } catch (Exception e) {
            result.setMsg("这可能不是一个Word文档");
            // result = impForHigh(paramDto);
            // return result;
        } finally {
            if (document != null) {
                try {
                    document.close();
                    return result;
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }

        XWPFDocument documentx = null;
        try {
            documentx = new XWPFDocument(paramDto.getWord().getInputStream());
            List<XWPFParagraph> paragraphs = documentx.getParagraphs();
            StringBuilder content = new StringBuilder();
            for (int i = 0; i < paragraphs.size(); i++) {
                if (i != 0) {
                    // 添加段落换行符
                    content.append("<br/>");
                }
                content.append(paragraphs.get(i).getText());
            }
            result.setContent(content.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (documentx != null) {
                try {
                    documentx.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }



        return result;
    }

    private ImportWordResultDto impForHigh(ImportWordParamDto paramDto) {
        ImportWordResultDto result = new ImportWordResultDto();
        result.setTitle(paramDto.getTitle());
        XWPFDocument documentx = null;
        try {
            documentx = new XWPFDocument(paramDto.getWord().getInputStream());
            List<XWPFParagraph> paragraphs = documentx.getParagraphs();
            StringBuilder content = new StringBuilder();
            for (int i = 0; i < paragraphs.size(); i++) {
                if (i != 0) {
                    // 添加段落换行符
                    content.append("<br/>");
                }
                content.append(paragraphs.get(i).getText());
            }
            result.setContent(content.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (documentx != null) {
                try {
                    documentx.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }
}

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
Special994 2018-04-11 13:00:24

我替换了你提供的这段代码,测试功能都能正常实现,可以上传07版的文档。可以找一下错误提示,异常信息。或者是不是在写完代码后没有Redeploy服务器而导致更新的代码功能没有实现。

  • 提问者 浣玉 #1
    没有重新部署的问题,我试了很多次,导入07版都没有进入OfficeXmlFileException异常,打印提示信息。你导入07版的word文件后会进入这个异常吗?我的jdk是1.8的。
    2018-04-11 13:08:36
  • 提问者 浣玉 #2
    我导入07版的word是成功的,只是界面提示说,这可能不是一个word文件,控制台并没有打印07版提示信息,也就是他进入了exception异常,并没有进入officexmlfileexception异常。
    2018-04-11 13:12:58
  • Special994 回复 提问者 浣玉 #3
    我用你的代码测试都是正常的,页面没有提示错误信息,控制台也能打印出“这可能是一个07版的Word”我的jdk也是1.8的。还是打断点调试一下吧
    2018-04-11 13:47:45
喜欢做梦的鱼 2018-04-11 11:30:53

因为同学只提供了部分代码,所以无法进行完整调试。

建议先确认一下7版本的word文档是通过office的word进行创建并保存为.docx格式,而不是直接通过改后缀名的方式完成的。

  • 提问者 浣玉 #1
    是新创建的的16版Word文件。
    2018-04-11 11:39:13
  • 提问者 浣玉 #2
    其他代码,基本和老师讲的一样,就是这里,我把老师给的07版Word文件导入,时,这里不会进入officeXML这个异常而将“这可能是一个07版的Word文件”打印在控制台,而是直接进入了Exception异常。
    2018-04-11 11:48:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师