⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 excelparser.java

📁 jboss规则引擎
💻 JAVA
字号:
package org.drools.decisiontable.parser.xls;

/*
 * Copyright 2005 JBoss Inc
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import jxl.Cell;
import jxl.Range;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import org.drools.decisiontable.parser.DecisionTableParseException;
import org.drools.decisiontable.parser.DecisionTableParser;
import org.drools.decisiontable.parser.SheetListener;

/**
 * @author <a href="mailto:michael.neale@gmail.com"> Michael Neale </a>
 * Parse an excel spreadsheet, pusing cell info into the SheetListener interface.
 */
public class ExcelParser
    implements
    DecisionTableParser
    {

    public static final String  DEFAULT_RULESHEET_NAME = "Decision Tables";
    private Map                 _listners              = new HashMap();
    private SheetListener       _currentSheetListener  = new NullSheetListener();
	private boolean _useFirstSheet;



    /**
     * Define a map of sheet name to listner handlers.
     * 
     * @param sheetListners
     *            map of String to SheetListener
     */
    public ExcelParser(final Map sheetListners) {
        this._listners = sheetListners;
    }

    public ExcelParser(final SheetListener listener) {
        this._listners.put( ExcelParser.DEFAULT_RULESHEET_NAME,
                       listener );
        this._useFirstSheet = true;
        this._currentSheetListener = listener;
    }

	public void parseFile(InputStream inStream) {
		try {
			Workbook workbook = Workbook.getWorkbook(inStream);
			
			if (_useFirstSheet) {
				Sheet sheet = workbook.getSheet(0);
				processSheet(sheet, _currentSheetListener);
			} else {
				Set sheetNames = _listners.keySet();
				for (Iterator iter = sheetNames.iterator(); iter.hasNext();) {
					String sheetName = (String) iter.next();
					Sheet sheet = workbook.getSheet(sheetName);
					processSheet(sheet, (SheetListener)_listners.get(sheetName));
					
				}
			}
		} catch (BiffException e) {
            throw new DecisionTableParseException( "An error occured opening the workbook. ",
                    e );
			
		} catch (IOException e) {
            throw new DecisionTableParseException( "Failed to open Excel stream, " + "please check that the content is xls97 format.",
                    e );
		}
		
		
	}

	private void processSheet(Sheet sheet, SheetListener listener) {
		int maxRows = sheet.getRows();
		
		Range[] mergedRanges = sheet.getMergedCells();

		
		for(int i = 0; i < maxRows; i++) {
			Cell[] row = sheet.getRow(i);
			listener.newRow(i, row.length);			
			for (int cellNum = 0; cellNum < row.length; cellNum++) {
				Cell cell = row[cellNum];
				
				Range merged = getRangeIfMerged(cell, mergedRanges);
											
				if (merged != null) {
                    Cell topLeft = merged.getTopLeft();
					listener.newCell(i, cellNum, topLeft.getContents(), topLeft.getColumn());
				} else {
					listener.newCell(i, cellNum, cell.getContents(), SheetListener.NON_MERGED);
				}
			}
		}
        listener.finishSheet();
	}
	
    Range getRangeIfMerged(Cell cell, Range[] mergedRanges) {
    	for (int i = 0; i < mergedRanges.length; i++) {
			Range r = mergedRanges[i];
			Cell topLeft = r.getTopLeft();
			Cell bottomRight = r.getBottomRight();
			if (cell.getRow() >= topLeft.getRow() 
					&& cell.getRow() <= bottomRight.getRow()
					&& cell.getColumn() >= topLeft.getColumn()
					&& cell.getColumn() <= bottomRight.getColumn()
					) {
				return r;
			}
		}
		return null;
	}

	static String removeTrailingZero(String stringVal) {
        if ( stringVal.endsWith( ".0" ) ) {
            stringVal = stringVal.substring( 0,
                                             stringVal.length() - 2 );
        }
        return stringVal;
    }	




}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -