java利用poi 读写(导入导出)word、excel(数组越界求解决办法)

来源:互联网 发布:r语言数据按组距分组 编辑:程序博客网 时间:2024/06/05 14:09


java 读写 word excel 简单的实例

需要的jar包有

poi-3.8-20120326.jar

poi-examples-3.8-20120326.jar

poi-excelant-3.8-20120326.jar

poi-ooxml-3.8-20120326.jar

poi-ooxml-schemas-3.8-20120326.jar

poi-scratchpad-3.8-20120326.jar


具体实例代码如下 :

import java.io.ByteArrayInputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRichTextString;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.hwpf.extractor.WordExtractor;import org.apache.poi.poifs.filesystem.DirectoryEntry;import org.apache.poi.poifs.filesystem.DocumentEntry;import org.apache.poi.poifs.filesystem.POIFSFileSystem;/** *  * @author Administrator * */public class ExcelWord {static public void main(String[] args) throws Exception {// ------------在xls中写入数据-----即导出excelFileOutputStream fos = new FileOutputStream("e:\\text.xls");HSSFWorkbook wb = new HSSFWorkbook();//给sheet命名HSSFSheet s = wb.createSheet("第一个sheet");//wb.setSheetName(0, "first sheet");//第一行HSSFRow row = s.createRow((short)0);//第一行第一列HSSFCell cell = row.createCell((short) 0);HSSFRichTextString hts = new HSSFRichTextString("nihao你好啊啊");cell.setCellValue(hts);//第一行第二列cell = row.createCell((short) 1);HSSFRichTextString hts1 = new HSSFRichTextString("中国龙");cell.setCellValue(hts1);/////第二行HSSFRow row2 = s.createRow((short)1);//第二行第一列HSSFCell cell1 = row2.createCell((short) 0);HSSFRichTextString hts2 = new HSSFRichTextString("第二行数据1111");cell1.setCellValue(hts2);//第二行第二列cell1 = row2.createCell((short) 1);HSSFRichTextString hts3 = new HSSFRichTextString("第二列数据ddd");cell1.setCellValue(hts3);//写入excel 关闭流wb.write(fos);fos.flush();fos.close();// ------------从xls读出数据----即数据导入StringBuffer sb=new StringBuffer();wb = new HSSFWorkbook(new FileInputStream("e:\\text.xls"));//获得第一张sheets = wb.getSheetAt(0);System.out.println("行数:"+s.getLastRowNum());//末行+1for(int i=s.getFirstRowNum();i<s.getLastRowNum()+1;i++){HSSFRow r = s.getRow(i); // 处理空行              if(r == null){                  continue ;              }            System.out.println("列数:"+r.getLastCellNum());            //末列for(int j=r.getFirstCellNum();j<r.getLastCellNum();j++){cell = r.getCell((short) j);// 处理空列                  if(r.getCell(j) == null){                      continue ;                  }                  String content=r.getCell(j).toString(); //                System.out.println("第"+i+"行"+"第"+j+"列的值为:"+content);                sb.append(content+"||");//if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {//System.out.println(cell.getRichStringCellValue());//}}sb.append("\n");}System.out.println(sb.toString());//s = wb.getSheetAt(0);//HSSFRow r = s.getRow(0);//// ------------------在doc中写入----导出word////byte[] a = new String("用到的JAR包如下(可以直接到POI官网上下载也可以在文章的附件中下载):poi-3.9-20121203.jarpoi-ooxml-3.9-20121203.jarpoi-ooxml-schemas-3.9-20121203.jarxmlbeans-2.3.0.jar可能有冲突的JAR包,如果工程lib中存在,需要删除。").getBytes();//ByteArrayInputStream bs = new ByteArrayInputStream(a);//POIFSFileSystem fs = new POIFSFileSystem();//// ///////////////////////////////////DirectoryEntry directory = fs.getRoot();//DocumentEntry de = directory.createDocument("WordDocument", bs);//// 以上两句代码不能省略,否则输出的是乱码//fos = new FileOutputStream("e:\\text.doc");//fs.writeFilesystem(fos);//bs.close();//fos.flush();//fos.close();// ------------从doc读出数据--word数据导入FileInputStream in = new FileInputStream("e:\\text.doc");WordExtractor extractor = new WordExtractor(in);String text = extractor.getText().toString();// 对DOC文件进行提取System.out.println(text);in.close();}}


遇到的问题:

poi 导出数据到word后,再读取该word文档中的数据会抛出数组越界异常,直接读取正常编辑的word文件没有抛错。希望大神指点一二。




1 0
原创粉丝点击