转帖:http://hi.baidu.com/netspirit/blog/item/bf519d1360c1f02bdc54011a.html /** * */ package cn.sh.ideal.common;
import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; 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 java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random;
import org.apache.poi.POIDocument; import org.apache.poi.hdgf.HDGFDiagram; import org.apache.poi.hpbf.HPBFDocument; import org.apache.poi.hslf.HSLFSlideShow; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; 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.hssf.util.HSSFColor; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.extractor.WordExtractor; import org.apache.poi.hwpf.usermodel.Paragraph; import org.apache.poi.hwpf.usermodel.Range; import org.apache.poi.poifs.filesystem.DirectoryEntry; import org.apache.poi.poifs.filesystem.DocumentEntry; import org.apache.poi.poifs.filesystem.POIFSFileSystem;
/** * @author liheng * */ public class Poi extends AbstractSupport { // This holds the common functionality for all POI Document classes. // Currently, this relates to Document Information Properties private POIDocument doc; // Excel private HSSFWorkbook workbook; // Excel Sheet private HSSFSheet sheet; // Excel row private HSSFRow excelrow; // Word private HWPFDocument worddoc; // Word private WordExtractor wordext; // Powerpoint private HSLFSlideShow silideshow; // Publisher private HPBFDocument publidoc; // Visio and ... private HDGFDiagram diagram; /** Excel function begin **/ public HSSFWorkbook readExcel(String filename) throws FileNotFoundException,IOException { workbook = new HSSFWorkbook(new FileInputStream(filename)); return workbook; } public HSSFSheet readSheet(int index) { if(Assert.isNotNull(workbook)) { sheet = workbook.getSheetAt(index); } return sheet; } public HSSFSheet readSheet(String name) { if(Assert.isNotNull(workbook)) { sheet = workbook.getSheet(name); } return sheet; } public HSSFRow readRow(int index) { if(Assert.isNotNull(sheet)) { excelrow = sheet.getRow(index); } return excelrow; } public HSSFCell readCell(int row,int column) { HSSFCell cell = null; if(Assert.isNotNull(sheet)) { cell = sheet.getRow(row).getCell(column); } return cell; } public List getListMap(String filename,int stratrow)throws FileNotFoundException,IOException { List list = new ArrayList(); Map map = new HashMap(); workbook = null; sheet = null; workbook = new HSSFWorkbook(new FileInputStream(filename)); sheet = workbook.getSheetAt(0); for(int i=stratrow;i<=sheet.getLastRowNum();i++) { map.clear(); // Old pakage sheet.getRow(i).getCell((short)j) for(int j=0;j<sheet.getRow(i).getLastCellNum();j++) { if(null == sheet.getRow(i).getCell(j)) { map.put("A"+j, " "); continue; } // CELL_TYPE_NUMERIC 数值型 if(HSSFCell.CELL_TYPE_NUMERIC == sheet.getRow(i).getCell(j).getCellType()) { map.put("A"+j, (long)sheet.getRow(i).getCell(j).getNumericCellValue()); } // CELL_TYPE_STRING 字符串型 if(HSSFCell.CELL_TYPE_STRING == sheet.getRow(i).getCell(j).getCellType()) { map.put("A"+j, sheet.getRow(i).getCell(j).toString()); } // CELL_TYPE_FORMULA 公式型 if(HSSFCell.CELL_TYPE_FORMULA == sheet.getRow(i).getCell(j).getCellType()) { map.put("A"+j, sheet.getRow(i).getCell(j).getCellFormula().toString()); } // CELL_TYPE_BLANK 空值 if(HSSFCell.CELL_TYPE_BLANK == sheet.getRow(i).getCell(j).getCellType()) { map.put("A"+j, " "); } // CELL_TYPE_BOOLEAN 布尔型 if(HSSFCell.CELL_TYPE_BOOLEAN == sheet.getRow(i).getCell(j).getCellType()) { map.put("A"+j, sheet.getRow(i).getCell(j).getBooleanCellValue()); } // CELL_TYPE_ERROR 错误 if(HSSFCell.CELL_TYPE_ERROR == sheet.getRow(i).getCell(j).getCellType()) { map.put("A"+j, " "); } } System.out.println(map); } return list; } public void writeExce(String filename,String sheetname,String header[],String key[],List<Map<Object,Object>> list) throws FileNotFoundException,IOException { OutputStream out = new FileOutputStream(new File(filename)); HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = null; // 创建Sheet时设置Sheet名称 if(Assert.isNotEmpty(sheetname)) { sheet = workbook.createSheet(sheetname); } else { sheet = workbook.createSheet(); } writeExceHeader(workbook,sheet,header); writeExceData(sheet,header,key,list); workbook.write(out); out.close(); } private void writeExceHeader(HSSFWorkbook workbook,HSSFSheet sheet,String header[]) { if(Assert.isNotNull(sheet) && Assert.isNotEmpty(header)) { HSSFRow row = sheet.createRow(0); HSSFCell cell = null;
// 创建字体 HSSFFont font = workbook.createFont(); // 字体颜色 font.setColor(HSSFFont.COLOR_NORMAL); // 设置字体加粗 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); // 设置字体大小 font.setFontHeight((short)220); // 创建Cell格式 HSSFCellStyle cellStyle= workbook.createCellStyle(); // 设置背景样式 // cellStyle.setFillPattern(HSSFCellStyle.SPARSE_DOTS); // 设置背景颜色 //cellStyle.setFillBackgroundColor(HSSFColor.AQUA.index); //cellStyle.setFillPattern(HSSFCellStyle.BIG_SPOTS); // 设置背景颜色 cellStyle.setFillForegroundColor(HSSFColor.YELLOW.index); //cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); // 设置CELL字体 cellStyle.setFont(font); // 设置居中 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
//cellStyle.setBorderRight(HSSFCellStyle.BORDER_SLANTED_DASH_DOT); // 设置格式 //cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00")); for(int i=0;i<header.length;i++) { cell = row.createCell(i); cell.setCellStyle(cellStyle); //cell.setCellType(HSSFCell.CELL_TYPE_STRING); //cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue(header[i]); } } } private void writeExceData(HSSFSheet sheet,String header[],String key[],List<Map<Object,Object>> list) { HSSFRow row = null; HSSFCell cell = null; if(Assert.isNotNull(sheet)&& Assert.isNotEmpty(key) && Assert.isNotEmpty(list)) { int rownum = 0; if(Assert.isNotEmpty(header)) rownum = 1; for(Map<Object,Object> map : list) { row = sheet.createRow(rownum++); for(int i=0;i<key.length;i++) { cell = row.createCell(i); cell.setCellValue(Assert.toString(map.get(key[i]))); } } } } /** Excel function end **/ /** Word function begin **/ public HWPFDocument readWord(String filename) throws IOException { worddoc = new HWPFDocument(new FileInputStream(filename)); return worddoc; } public WordExtractor readWord(String filename,boolean t) throws IOException { wordext = new WordExtractor(new FileInputStream(filename)); return wordext; } /** * 读取Word文本内容 * <pre class="code">Poi.readWordText(filename);</pre> * @param 文件路径文件名 * @return 返回<code>String</code>文本内容 */ public String readWordText(String filename)throws IOException { wordext = new WordExtractor(new FileInputStream(filename)); //return wordext.getTextFromPieces(); return wordext.getText(); } public StringBuffer readWordText() { StringBuffer strbuff = new StringBuffer(); if(Assert.isNotNull(worddoc)) { // 取得word文档的范围 Range r = worddoc.getRange (); //StyleSheet styleSheet = worddoc.getStyleSheet (); // 取得段落数 int lenParagraph = r.numParagraphs ();
for (int i = 0; i < lenParagraph; i++) { Paragraph p = r.getParagraph (i); //StyleDescription paragraphStyle = styleSheet.getStyleDescription (p.getStyleIndex ()); //String styleName = paragraphStyle.getName(); strbuff.append(p.text ()); } } return strbuff; } public void writeWord(String filename,String wordtext)throws FileNotFoundException,UnsupportedEncodingException,IOException { // 创建写文件流 OutputStream out = new FileOutputStream(new File(filename)); //OutputStreamWriter outwrite = new OutputStreamWriter (new FileOutputStream(new File(filename)), ENCODING ); //以下两句代码不能省略,否则输出的是乱码 POIFSFileSystem fs = new POIFSFileSystem(); DirectoryEntry directory = fs.getRoot(); // 根据系统默认编码格式 获取字节数组数据 byte[] a = new String( wordtext ).getBytes( ENCODING ); InputStream input = new ByteArrayInputStream(a);
DocumentEntry de = directory.createDocument("WordDocument", input); // 将poi文件流向文件输出流 fs.writeFilesystem(out); input.close(); out.flush(); out.close(); //HWPFDocument worddoc = new HWPFDocument(); } /** Word function end **/ public static void main(String arg[]) { // Poi poi = new Poi(); // // String head[] = new String[]{"序列号","姓名","性别","地址","电话"}; // String key[] = new String[]{"id","name","sex","add","phone"}; // List<Map<Object,Object>> list = new ArrayList<Map<Object,Object>>(); // Random random = new Random(); // // for(int i=0;i<20;i++) // { // Map<Object,Object> map = new HashMap<Object,Object>(); // map.put("id", random.nextInt(10)); // map.put("name", random.nextInt(10)); // map.put("sex", random.nextInt(10)); // map.put("add", random.nextInt(10)); // map.put("phone", random.nextInt(10)); // list.add(map); // } // // try // { // poi.writeExce("c://test.xls","", head, key, list); // } // catch(Exception ex) // { // // } // try // { // poi.readWord("D://理想//业务支撑平台//业务支撑平台企业户名合法性判断_概要设计说明书.doc"); // System.out.println(poi.readWordText()); // poi.writeWord("c://test.doc"); // System.out.println(poi.readWordText("D://理想//业务支撑平台//业务支撑平台企业户名合法性判断_概要设计说明书.doc")); // } // catch(Exception ex) // { // System.out.println(ex.getMessage()); // } try { Poi obj = new Poi(); //String file = "D://合肥//电费表.xls"; String file = "D://合肥//合肥、巢湖水电气数据//巢湖//2009年1月份居民客户电量电费.xls"; //String file = "D://合肥//水,电,煤数据导入格式//0905电费.xls"; obj.readExcel(file); obj.readSheet(0); obj.getListMap(file,1); } catch(Exception ex) { System.out.println(ex.getMessage()); } } } |