与Excel不同,Word实现导入导出,03版和07版差异较大。实现思路是:如果03版报异常,那就是用07版的解决办法。
03版的解析相对简单。07版更复杂一下。
1:创建03版doc对象:HWPFDocument doc = new HWPFDocument(xxx) 其中,xxx可以为文件流或者File对象,根据是不是需要保存为文件来自行选择。
2:获取文件内容:String content = doc.getDocumentText()。 如此就完成了03版doc的解析。
需要注意的一点时,doc中为换行会解析为\r,使用时需要注意。
如果文件为07版,那么03版解析不正常,会报OfficeXmlFileException异常(大概是这个,具体可以试一下)。如果是其他类型的文件,那么就无能为力了。只能捕获一个异常然后提示文件类型错误。
07版的解析,可以在捕获OfficeXmlFileException后,执行07版的解析工作。
07版的解析是以段落为依据的。
1:创建07版doc对象:XWPFDocument docx = new XWPFDocument(xxx) 这里xxx同03版一样。
2:获取段落组合:List<XWPFParagraph> paragraphList = docx.getParagraphs();
3:创建一个StringBuilder来连接段落内容:StringBuilder content = new StringBuilder();
4:使用循环来获取整个内容:其中,使用XWPFPrargraph的实例方法:getText()来获取段落的字符串内容。
for( int i=0 ;i< paragraphList.size(); i++){
if(i!=0){
content.append("<br/>"); //这里是为除了第一段的段落前增加换行符
content.append(paragraphList.get(i).getText());
这就完成了word导入的解析。
导出Word。这里实现的思路是:本地有word模板,我们使用程序来完成对模板指定内容的替换,然后再导出。
这里先导出03版:
1:创建doc对象:HWPFDocument doc = new HWPFDocument(xxx) 这里xxx指定doc模板的路径
2:获取Rang对象:Rang range = doc.getRange() 此处不传参数代表整个doc范围。
3:替代文本中的内容:range.replaceText("${name}","赵四"); 这里假设需要把doc中的${name}替换为 赵四。
下面还要输出内容。
4:设置response的头信息:response.setHeader("Content-Disposition","attachment;filename=xxx.doc");
5:获取输出流:ServletOutputStream outputStream = response.getOutputStream();
6:写doc:doc.write(outputStream);
这里直接写出了doc,没有先保存。
07版的导出更复杂一些:
1:创建doc对象:XWPFDocument docx = new XWPFDocument("xxx"); xxx为模板路径
2:获取段落组合:List<XWPFParagraph> paragraphList = docx.getParagraphs();
3:使用双层循环。外层循环段落,内层循环runs(runs为Run的集合,Run为一段中,没当文字格式变化了,那么就是一个新的Run),其中使用:Run的实例方法:getText(run.getTextPosition())来获取run的内容。然后替换run中的内容。如下代码:
for(XWPFParagraph paragraph : paragraphList){
List<XWPFRun> runs = paragraph.getRuns();
for(XWPFRun run : runs){
String str = run.getText(run.getTextPosition());
str = str.replace("${name}","赵四"); //由于String的不可变性,这里重新为str赋值。
}
后面输出内容就和03版相同了。
与Excel不同,Word实现导入导出,03版和07版差异较大。实现思路是:如果03版报异常,那就是用07版的解决办法。03版的解析相对简单。07版更复杂一下。1:创建03版doc对象:HWPFDocument doc = new HWPFDocument(xxx) 其中,xxx可以为文件流或者File对象,根据是不是需要保存为文件来自行选择。2:获取文件内容:String content ...
public void importStaffInfo(MultipartFile file, HttpServletRequest request, HttpServletResponse response) throws IOException {
try {
String name = file.getOriginalFilename();
HashMap<String,Object> map = null;
MyBaTis报SSL错误Establishing SSL connection without server以及时区异常SQLxception: The server time zone value