poi3.9之读写2010 word/excel/ppt

来源:互联网 发布:is语音淘宝客服被骗 编辑:程序博客网 时间:2024/06/05 06:52

     poi是java的api用来操作微软的文档

poi的jar包和功能映射如下:

  

 

本文是以poi3.9读写2010word、2010excel、2010ppt,记录学习的脚步

相应的功能在代码都有注释,就不解释了 详情可以参看poi3.9的文档

 主测试函数 TestMain.java

 

/** *  */package com.undergrowth.poi.test;import com.undergrowth.poi.ExcelUtils;import com.undergrowth.poi.PptUtils;import com.undergrowth.poi.WordUtils;/** * @author u1 * */public class TestMain {/** * 1.对于word,使用XWPFDocument操作07以上的doc或者docx都没有问题,并且必须是07或者以上的电脑上生成的word * 如果是WordExtractor或者HWPFDocument只能操作03以下的word,并且只能是03以下电脑生成的word *  * @param args */public static void main(String[] args) {// TODO Auto-generated method stubString path="e:\\poi\\";String fileName="poi.docx";String filePath=path+fileName;//创建word//WordUtils.createWord(path,fileName);//写入数据String data="两国元首在亲切友好、相互信任的气氛中,就中乌关系现状和发展前景,以及共同关心的国际和地区问题深入交换了意见,达成广泛共识。两国元首高度评价中乌关系发展成果,指出建立和发展战略伙伴关系是正确的历史选择,拓展和深化双方各领域合作具有广阔前景和巨大潜力,符合两国和两国人民的根本利益。";WordUtils.writeDataDocx(filePath,data);//WordUtils.writeDataDoc(filePath,data);//读取数据//String contentWord=WordUtils.readDataDoc(filePath);String contentWord=WordUtils.readDataDocx(filePath);System.out.println("word的内容为:\n"+contentWord);//创建excelfileName="poi.xlsx";filePath=path+fileName;String[] unitTitle={"google","baidu","oracle","合计"};String[] itemTitle={"单位","总收入","盈利","亏损"};String[] dataExcel={"10","20","30"};String title="各大公司收入情况";ExcelUtils.writeDataExcelx(filePath,dataExcel,title,unitTitle,itemTitle);//读取数据String contentExcel=ExcelUtils.readDataExcelx(filePath);System.out.println("\nexcel的内容为:\n"+contentExcel);//创建pptfileName="poi.pptx";filePath=path+fileName;String titlePptx="华尔街纪录片";String imagePath="images/hej.jpg";PptUtils.writeDataPptx(filePath,titlePptx,imagePath);//读取pptx的数据String contentPptx=PptUtils.readDataPptx(filePath);System.out.println("\nppt的内容为:\n"+contentPptx);}}


 

word操作工具  WordUtils.java

package com.undergrowth.poi;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import org.apache.poi.hwpf.HWPFDocument;import org.apache.poi.hwpf.extractor.WordExtractor;import org.apache.poi.xwpf.usermodel.ParagraphAlignment;import org.apache.poi.xwpf.usermodel.XWPFDocument;import org.apache.poi.xwpf.usermodel.XWPFParagraph;import org.apache.poi.xwpf.usermodel.XWPFRun;/** * @author u1 * */public class WordUtils {//创建.doc后缀的wordpublic static void createWord(String path,String fileName) {// TODO Auto-generated method stub//判断目录是否存在File file=new File(path);if (!file.exists()) file.mkdirs();//因为HWPFDocument并没有提供公共的构造方法 所以没有办法构造word//这里使用word2007及以上的XWPFDocument来进行构造wordXWPFDocument document=new XWPFDocument();OutputStream stream=null;try {stream = new FileOutputStream(new File(file, fileName));document.write(stream);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(stream!=null)try {stream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//向word中写入数据public static void writeDataDocx(String path,String data) {// TODO Auto-generated method stubInputStream istream=null;OutputStream ostream=null;try {//istream = new FileInputStream(path);ostream = new FileOutputStream(path);XWPFDocument document=new XWPFDocument();//添加一个段落XWPFParagraph p1=document.createParagraph();p1.setAlignment(ParagraphAlignment.CENTER);XWPFRun r1=p1.createRun();r1.setText(data);r1.setStrike(true);document.write(ostream);System.out.println("创建word成功");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(istream!=null)try {istream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(ostream!=null)try {ostream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//向word中写入数据public static void writeDataDoc(String path,String data) {// TODO Auto-generated method stubOutputStream ostream=null;try {ostream = new FileOutputStream(path);ostream.write(data.getBytes());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(ostream!=null)try {ostream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//读取数据  97-03wordpublic static String readDataDoc(String filePath) {// TODO Auto-generated method stubString content="";InputStream istream=null;try {istream = new FileInputStream(filePath);WordExtractor wordExtractor=new WordExtractor(istream);String[] para=wordExtractor.getParagraphText();for (String string : para) {content+=string;}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(istream!=null)try {istream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return content;}//读取数据 docxpublic static String readDataDocx(String filePath) {// TODO Auto-generated method stubString content="";InputStream istream=null;try {istream = new FileInputStream(filePath);     XWPFDocument document=new XWPFDocument(istream);     content=document.getLastParagraph().getText();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(istream!=null)try {istream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}     return content;}}


 

excel工具 ExcelUtils.java

package com.undergrowth.poi;import java.awt.Color;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Iterator;import org.apache.poi.openxml4j.exceptions.InvalidFormatException;import org.apache.poi.openxml4j.opc.OPCPackage;import org.apache.poi.ss.util.CellRangeAddress;import org.apache.poi.xssf.usermodel.XSSFCell;import org.apache.poi.xssf.usermodel.XSSFCellStyle;import org.apache.poi.xssf.usermodel.XSSFColor;import org.apache.poi.xssf.usermodel.XSSFFont;import org.apache.poi.xssf.usermodel.XSSFRow;import org.apache.poi.xssf.usermodel.XSSFSheet;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.apache.poi.xwpf.usermodel.ParagraphAlignment;import org.apache.poi.xwpf.usermodel.XWPFDocument;import org.apache.poi.xwpf.usermodel.XWPFParagraph;import org.apache.poi.xwpf.usermodel.XWPFRun;/** * @author u1 * */public class ExcelUtils {//创建xlsxpublic static void writeDataExcelx(String filePath, String[] dataExcel,String title,String[] unitTitle, String[] itemTitle) {// TODO Auto-generated method stubOutputStream ostream=null;try {ostream = new FileOutputStream(filePath);XSSFWorkbook excel=new XSSFWorkbook();XSSFSheet sheet0=excel.createSheet(title);//excel中第一行  poi中行、列开始都是以0开始计数//合并第一行 显示总标题  占据第一行的第一列到第15列sheet0.addMergedRegion(new CellRangeAddress(0, 0, 0, 15));XSSFRow row=sheet0.createRow(0);XSSFCell cell=row.createCell(0);cell.setCellValue(title);//设置样式XSSFCellStyle cellStyle=excel.createCellStyle();//居中对齐cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);//字体XSSFFont font=excel.createFont();font.setFontHeightInPoints((short) 16);font.setColor(new XSSFColor(Color.RED));cellStyle.setFont(font);//设置第一行的样式cell.setCellStyle(cellStyle);//显示第二行 表头 各项标题row=sheet0.createRow(1);for (int i = 0; i < itemTitle.length; i++) {cell=row.createCell(i);cell.setCellValue(itemTitle[i]);cell.setCellStyle(cellStyle);}//从第三行开始显示 各大公司的数据int start=2;for (String unit : unitTitle) {row=sheet0.createRow(start);//第一列显示单位名称cell=row.createCell(0);cell.setCellValue(unit);//添加合计行if("合计".equals(unit)){for (int i = 0; i < dataExcel.length; i++) {cell=row.createCell(i+1);cell.setCellType(XSSFCell.CELL_TYPE_FORMULA);char charaColumn=(char)('b'+i);String formula="sum("+charaColumn+2+":"+charaColumn+start+")";cell.setCellFormula(formula);}}else { //添加数据行for (int i = 0; i < dataExcel.length; i++) {cell=row.createCell(i+1);cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);cell.setCellValue(Double.valueOf(dataExcel[i]));}}start++;}excel.write(ostream);System.out.println("创建excel成功");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(ostream!=null)try {ostream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//读取xlsx的数据public static String readDataExcelx(String filePath) {// TODO Auto-generated method stubString content="";try {OPCPackage pkg=OPCPackage.open(filePath);XSSFWorkbook excel=new XSSFWorkbook(pkg);//获取第一个sheetXSSFSheet sheet0=excel.getSheetAt(0);for (Iterator rowIterator=sheet0.iterator();rowIterator.hasNext();) {XSSFRow row=(XSSFRow) rowIterator.next();for (Iterator iterator=row.cellIterator();iterator.hasNext();) {XSSFCell cell=(XSSFCell) iterator.next();//根据单元的的类型 读取相应的结果if(cell.getCellType()==XSSFCell.CELL_TYPE_STRING) content+=cell.getStringCellValue()+"\t";else if(cell.getCellType()==XSSFCell.CELL_TYPE_NUMERIC) content+=cell.getNumericCellValue()+"\t";else if(cell.getCellType()==XSSFCell.CELL_TYPE_FORMULA) content+=cell.getCellFormula()+"\t";}content+="\n";}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}return content;}}


 

ppt的工具 PptUtils.java

/** *  */package com.undergrowth.poi;import java.awt.Color;import java.awt.Dimension;import java.awt.Rectangle;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Iterator;import org.apache.poi.util.IOUtils;import org.apache.poi.xslf.XSLFSlideShow;import org.apache.poi.xslf.usermodel.Placeholder;import org.apache.poi.xslf.usermodel.SlideLayout;import org.apache.poi.xslf.usermodel.TextAlign;import org.apache.poi.xslf.usermodel.TextDirection;import org.apache.poi.xslf.usermodel.XMLSlideShow;import org.apache.poi.xslf.usermodel.XSLFGroupShape;import org.apache.poi.xslf.usermodel.XSLFPictureData;import org.apache.poi.xslf.usermodel.XSLFShape;import org.apache.poi.xslf.usermodel.XSLFSlide;import org.apache.poi.xslf.usermodel.XSLFSlideLayout;import org.apache.poi.xslf.usermodel.XSLFSlideMaster;import org.apache.poi.xslf.usermodel.XSLFTextBox;import org.apache.poi.xslf.usermodel.XSLFTextParagraph;import org.apache.poi.xslf.usermodel.XSLFTextRun;import org.apache.poi.xslf.usermodel.XSLFTextShape;import org.apache.poi.xwpf.usermodel.XWPFDocument;/** * @author u1 * */public class PptUtils {//创建pptxpublic static void writeDataPptx(String filePath, String titlePptx,String imagePath) {// TODO Auto-generated method stubOutputStream ostream=null;try {ostream = new FileOutputStream(filePath);XMLSlideShow ppt=new XMLSlideShow();//ppt.setPageSize(new Dimension(500,400));//创建第一块ppt 放置图片XSLFSlide slide=ppt.createSlide();XSLFGroupShape shape=slide.createGroup();//添加图片byte[] picData=IOUtils.toByteArray(new FileInputStream(imagePath));int pictureIndex=ppt.addPicture(picData, XSLFPictureData.PICTURE_TYPE_JPEG);shape.createPicture(pictureIndex);//第二张ppt 放置文本//创建文本框slide=ppt.createSlide();XSLFTextShape textShapeOnly=slide.createTextBox();textShapeOnly.setAnchor(new Rectangle(100, 100, 302, 302));textShapeOnly.setPlaceholder(Placeholder.TITLE);textShapeOnly.setText(titlePptx);    //第三张ppt  放置标题和文本XSLFSlideMaster master=ppt.getSlideMasters()[0];XSLFSlideLayout layout=master.getLayout(SlideLayout.TITLE_AND_CONTENT);slide=ppt.createSlide(layout);XSLFTextShape[] textShape=slide.getPlaceholders();XSLFTextShape textShape2=textShape[0];textShape2.setText(titlePptx);textShape2=textShape[1];//清除掉母版文本textShape2.clearText();XSLFTextParagraph paragraph=textShape2.addNewTextParagraph();XSLFTextRun run=paragraph.addNewTextRun();run.setText("华尔街是纽约市曼哈顿区南部从百老汇路延伸到东河的一条大街道的名字");run.setFontColor(Color.RED);run.setFontSize(20);paragraph=textShape2.addNewTextParagraph();run=paragraph.addNewTextRun();run.setText("“华尔街”一词现已超越这条街道本身,成为附近区域的代称,亦可指对整个美国经济具有影响力的金融市场和金融机构。");run.setFontColor(Color.RED);run.setFontSize(20);ppt.write(ostream);System.out.println("创建pptx成功");} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(ostream!=null)try {ostream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}//读取pptx的内容public static String readDataPptx(String filePath) {// TODO Auto-generated method stubString content="";InputStream istream=null;try {istream = new FileInputStream(filePath);XMLSlideShow ppt=new XMLSlideShow(istream);    for(XSLFSlide slide:ppt.getSlides()){ //遍历每一页ppt    //content+=slide.getTitle()+"\t";    for(XSLFShape shape:slide.getShapes()){    if(shape instanceof XSLFTextShape){ //获取到ppt的文本信息    for(Iterator iterator=((XSLFTextShape) shape).iterator();iterator.hasNext();){    //获取到每一段的文本信息    XSLFTextParagraph paragraph=(XSLFTextParagraph) iterator.next();     for (XSLFTextRun xslfTextRun : paragraph) {content+=xslfTextRun.getText()+"\t";}    }    }    }    //获取一张ppt的内容后 换行    content+="\n";    }} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(istream!=null)try {istream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}     return content;}}


 

项目结构图:

 

 

效果图:

 

 

 

控制台输出:

创建word成功word的内容为:两国元首在亲切友好、相互信任的气氛中,就中乌关系现状和发展前景,以及共同关心的国际和地区问题深入交换了意见,达成广泛共识。两国元首高度评价中乌关系发展成果,指出建立和发展战略伙伴关系是正确的历史选择,拓展和深化双方各领域合作具有广阔前景和巨大潜力,符合两国和两国人民的根本利益。创建excel成功excel的内容为:各大公司收入情况单位总收入盈利亏损google10.020.030.0baidu10.020.030.0oracle10.020.030.0合计sum(b2:b5)sum(c2:c5)sum(d2:d5)创建pptx成功ppt的内容为:华尔街纪录片华尔街纪录片华尔街是纽约市曼哈顿区南部从百老汇路延伸到东河的一条大街道的名字“华尔街”一词现已超越这条街道本身,成为附近区域的代称,亦可指对整个美国经济具有影响力的金融市场和金融机构。


 

 

 

 

 

0 0