zoukankan      html  css  js  c++  java
  • extractor

    package scrollable.excel.reader;

    import java.io.IOException; import java.io.InputStream; import java.util.Locale; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue;

    import javax.xml.parsers.ParserConfigurationException;

    import org.apache.poi.POIXMLProperties; import org.apache.poi.POIXMLTextExtractor; import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.ss.usermodel.DataFormatter; import org.apache.poi.util.SAXHelper; import org.apache.poi.xssf.eventusermodel.ReadOnlySharedStringsTable; import org.apache.poi.xssf.eventusermodel.XSSFReader; import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler; import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler.SheetContentsHandler; import org.apache.poi.xssf.model.StylesTable; import org.apache.xmlbeans.XmlException; import org.xml.sax.ContentHandler; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader;

    public class ScrollDownXSSFEventBasedExcelExtractor{

     private OPCPackage container;  //private POIXMLProperties properties;  private int sheetId;

     private transient BlockingQueue<SimpleRow> rowsQueue = new ArrayBlockingQueue<SimpleRow>(1);  private transient boolean hasNextRow = true;  private transient SimpleRow currentRow;

     public ScrollDownXSSFEventBasedExcelExtractor(String fileName, int sheetId) throws XmlException, OpenXML4JException, IOException {   this.container = OPCPackage.open(fileName);   //this.properties = new POIXMLProperties(container);   this.sheetId = sheetId;   }

     public void processSheet(){   new XMLParser().start();  }    public SimpleRow nextRow(){   SimpleRow row = null;   if(hasNextRow){    while(true)    {     try {      row = rowsQueue.take();      break;     } catch (InterruptedException e) {      // TODO Auto-generated catch block      e.printStackTrace();     }    }   }   return row;  }      public boolean hasNextRow(){   return hasNextRow;  }  

    protected class ScrollableSheetContentsHandler implements SheetContentsHandler  {   @Override   public void startRow(int rowNum) {    currentRow = new SimpleRow(rowNum);   }

      @Override   public void endRow() {    if(currentRow != null)    {     while(true){      //try until current row is in rowsQueue      try {       rowsQueue.put(currentRow);       break;      } catch (InterruptedException e) {             }     }    }   }

      @Override   public void cell(String cellRef, String formattedValue) {    SimpleCell cell = new SimpleCell(cellRef, formattedValue);    currentRow.addCell(cell);   }

      @Override   public void headerFooter(String text, boolean isHeader, String tagName) {    // We don't include headers in the output yet, so ignore   }  }    protected class ScrollableXSSFSheetXMLHandler extends XSSFSheetXMLHandler {

      public ScrollableXSSFSheetXMLHandler(StylesTable styles,     ReadOnlySharedStringsTable strings,     SheetContentsHandler sheetContentsHandler) {    super(styles, strings, sheetContentsHandler, false);   }

      @Override   public void endElement(String uri, String localName, String name) throws SAXException {    super.endElement(uri, localName, name);    //end sheet    if("sheetData".equals(name))    {     hasNextRow = false;    }   }

     }    protected class XMLParser extends Thread{

      @Override   public void run() {    try {    ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(container);          XSSFReader xssfReader = new XSSFReader(container);          StylesTable styles = xssfReader.getStylesTable();          InputStream  sheetInputStream = xssfReader.getSheet("rId"+sheetId);    InputSource sheetSource = new InputSource(sheetInputStream);             XMLReader sheetParser = SAXHelper.newXMLReader();     SheetContentsHandler sheetContentsExtractor = new ScrollableSheetContentsHandler();     ContentHandler handler = new ScrollableXSSFSheetXMLHandler(styles, strings, sheetContentsExtractor);     sheetParser.setContentHandler(handler);     sheetParser.parse(sheetSource);    } catch (ParserConfigurationException | IOException | SAXException | OpenXML4JException e) {     throw new RuntimeException("SAX parser appears to be broken - " + e.getMessage());    }finally{     if (container != null) {      try {       container.close();      } catch (IOException e) {       e.printStackTrace();      }     }    }   }     }

    }

    package scrollable.excel.reader;

    public class SimpleCell {  private String refId;  private String textValue;    public SimpleCell(){}  public SimpleCell(String refId, String textValue){   this.refId = refId;   this.textValue = textValue;  }  public String getRefId() {   return refId;  }  public void setRefId(String refId) {   this.refId = refId;  }  public String getTextValue() {   return textValue;  }  public void setTextValue(String textValue) {   this.textValue = textValue;  }     }

    package scrollable.excel.reader;

    import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map;

    public class SimpleRow {  private Map<String, SimpleCell> cells = new LinkedHashMap<String,SimpleCell>();  private int rowIndex;    public SimpleRow(){}  public SimpleRow(int rowNum){   this.rowIndex = rowNum;  }    public int getRowIndex() {   return rowIndex;  }  public void setRowIndex(int rowIndex) {   this.rowIndex = rowIndex;  }    public void addCell(SimpleCell cell){   this.cells.put(cell.getRefId(), cell);  }    public SimpleCell getCellByRefId(String cellRef)  {   return this.cells.get(cellRef);  }    public Collection<SimpleCell> getCellsInRow(){   return this.cells.values();  }    public String toString(){   StringBuilder sb = new StringBuilder();   sb.append("row ").append(rowIndex);   Collection<SimpleCell> cells = this.getCellsInRow();   for(SimpleCell cell : cells)   {    sb.append(" ").append(" ").append(cell.getRefId()).append(" ").append(cell.getTextValue());   }   return sb.toString();  } }

    package block.excel.writer;

    import java.io.FileOutputStream; import java.io.IOException; import java.util.Collection; import java.util.List;

    import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.streaming.SXSSFWorkbook;

    import scrollable.excel.reader.SimpleCell; import scrollable.excel.reader.SimpleRow;

    public class SXSSFExcelWritor {  public static final int DEFAULT_CACHED_ROWS = 100;  private int cachedRowSize = DEFAULT_CACHED_ROWS;

     private SXSSFWorkbook workbook;  private String fileName;  private Sheet sheet;  private FileOutputStream out;

     public SXSSFExcelWritor() {  }

     public SXSSFExcelWritor(String fileName) {   this.fileName = fileName;  }

     public SXSSFExcelWritor(String fileName, int cachedRowSize) {   this(fileName);   this.cachedRowSize = cachedRowSize;  }    public void init() throws IOException{   workbook= new SXSSFWorkbook(cachedRowSize);   sheet = workbook.createSheet();   out = new FileOutputStream(fileName);  }    public void close(){   if(out != null)   {    try {     workbook.dispose();     out.close();    } catch (IOException e) {     e.printStackTrace();    }   }  }

     public void write(List<SimpleRow> rows) throws IOException{   for(SimpleRow row : rows)   {    Row currentRow = sheet.createRow(row.getRowIndex());    Collection<SimpleCell> cells = row.getCellsInRow();    for(SimpleCell cell: cells)    {     CellReference cellRef = new CellReference(cell.getRefId());     int colIndex = cellRef.getCol();          Cell currentCell = currentRow.createCell(colIndex);     currentCell.setCellValue(cell.getTextValue());    }   }   workbook.write(out);   workbook.dispose();  }

     public static void main(String[] args) throws Throwable {   SXSSFWorkbook wb = new SXSSFWorkbook(100); // keep 100 rows in memory,              // exceeding rows will be              // flushed to disk   Sheet sh = wb.createSheet();   for (int rownum = 0; rownum < 100000; rownum++) {    Row row = sh.createRow(rownum);    for (int cellnum = 0; cellnum < 10; cellnum++) {     Cell cell = row.createCell(cellnum);     String address = new CellReference(cell).formatAsString();     cell.setCellValue(address);    }

      }

      // Rows with rownum < 900 are flushed and not accessible   for (int rownum = 0; rownum < 900; rownum++) {    // Assert.assertNull(sh.getRow(rownum));   }

      // ther last 100 rows are still in memory   for (int rownum = 900; rownum < 1000; rownum++) {    // Assert.assertNotNull(sh.getRow(rownum));   }

      FileOutputStream out = new FileOutputStream("C:\Users\YZM\Desktop\test2.xlsx");   wb.write(out);   out.close();

      // dispose of temporary files backing this workbook on disk   wb.dispose();  }

    }

    package ui;

    import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener;

    import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.WindowConstants; import javax.swing.border.EmptyBorder;

    public class MainWindow extends JFrame{

     private static final long serialVersionUID = 1L;  private static final int DEFAULT_WIDTH = 800;  private static final int DEFAULT_HEIGHT = 600;

     public MainWindow(String name) {   this.setTitle(name);   this.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);  }

     public JPanel createPIExtractorContentPanel() {   JPanel piExtractorPanel = new JPanel(new BorderLayout());      JPanel headerPanel = new JPanel();   headerPanel.setLayout(new BoxLayout(headerPanel, BoxLayout.Y_AXIS));   headerPanel.setBorder(new EmptyBorder(10, 10, 10, 10));      JPanel labelPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));   JLabel fileChoserLabel = new JLabel("Please chose a source excel file(support .xlsx file only):");   labelPanel.add(fileChoserLabel);   headerPanel.add(labelPanel);         JPanel fileChoserPanel = new JPanel();   fileChoserPanel.setLayout(new BoxLayout(fileChoserPanel, BoxLayout.X_AXIS));      JTextField fileNameInput = new JTextField();   fileNameInput.setEnabled(false);   fileChoserPanel.add(fileNameInput);      fileChoserPanel.add(Box.createHorizontalStrut(10));      JButton fileChoserButton = new JButton("Chose File");   fileChoserPanel.add(fileChoserButton);      headerPanel.add(fileChoserPanel);

      piExtractorPanel.add(headerPanel, BorderLayout.NORTH);      //center   JPanel logPanel = new JPanel();   //JScrollPane scrollPanel=new JScrollPane();   JTextArea textArea = new JTextArea(25,80);   textArea.setLineWrap(true);   textArea.setWrapStyleWord(true);      logPanel.add(new JScrollPane(textArea));      piExtractorPanel.add(logPanel, BorderLayout.CENTER);

      return piExtractorPanel;

     }

     public static void main(String[] args) {   MainWindow mw = new MainWindow("DA Tool");   mw.add(mw.createPIExtractorContentPanel());   mw.setVisible(true);   mw.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);  }     }

  • 相关阅读:
    DcotrineFixtureBundle学习
    php方法(1)
    学习笔记(2)
    微信access_token的获取
    学习笔记(1)
    与你相遇——博客园
    单例模式
    Java集合
    sql 优化
    缓存与数据库的数据一致性的解决方案(转)
  • 原文地址:https://www.cnblogs.com/leolztang/p/4163003.html
Copyright © 2011-2022 走看看