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中写入数据-----即导出excel
FileOutputStream 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"));
//获得第一张sheet
s = wb.getSheetAt(0);
System.out.println("行数:"+s.getLastRowNum());
//末行+1
for(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文件没有抛错。希望大神指点一二。