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

📄 biffviewer.java

📁 java 报表 to office文档: 本包由java语言开发
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* ====================================================================   Copyright 2002-2004   Apache Software Foundation   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.==================================================================== *//* *  BiffViewer.java * *  Created on November 13, 2001, 9:23 AM */package org.apache.poi.hssf.dev;import org.apache.poi.hssf.record.*;import org.apache.poi.poifs.filesystem.POIFSFileSystem;import org.apache.poi.util.HexDump;import org.apache.poi.util.LittleEndian;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;/** *  Utillity for reading in BIFF8 records and displaying data from them. * *@author     Andrew C. Oliver (acoliver at apache dot org) *@author     Glen Stampoultzis (glens at apache.org) *@see        #main */public class BiffViewer {    String filename;    private boolean dump;    /**     *  Creates new BiffViewer     *     *@param  args     */    public BiffViewer(String[] args) {        if (args.length > 0) {            filename = args[0];        } else {            System.out.println("BIFFVIEWER REQUIRES A FILENAME***");        }    }    /**     *  Method run starts up BiffViewer...     */    public void run() {        try {            POIFSFileSystem fs =                    new POIFSFileSystem(new FileInputStream(filename));            InputStream stream =                    fs.createDocumentInputStream("Workbook");            createRecords(stream, dump);        } catch (Exception e) {            e.printStackTrace();        }    }    /**     *  Create an array of records from an input stream     *     *@param  in                         the InputStream from which the records     *      will be obtained     *@param  dump     *@return                            an array of Records created from the     *      InputStream     *@exception  RecordFormatException  on error processing the InputStream     */    public static Record[] createRecords(InputStream in, boolean dump)             throws RecordFormatException {        ArrayList records = new ArrayList();//        Record last_record = null;        int loc = 0;        RecordDetails activeRecord = null;        try {//            long  offset  = 0;            short rectype = 0;            do {                rectype = LittleEndian.readShort(in);                int startloc = loc;                loc += 2;                if (rectype != 0) {                    short recsize = LittleEndian.readShort(in);                    loc += 2;                    byte[] data = new byte[(int) recsize];                    in.read(data);                    loc += recsize;                    Record record = createRecord(rectype, recsize, data );//                    if (record.getSid() == DrawingGroupRecord.sid)//                    {//                        if (activeRecord.getRecord().getSid() == DrawingGroupRecord.sid)//                        {//                            DrawingGroupRecord dg = (DrawingGroupRecord) activeRecord.getRecord();//                            System.out.println( "Joined" );//                            dg.join( (AbstractEscherHolderRecord) record );//                        }//                        else//                        {//                            records.add(record);//                            if (activeRecord != null)//                                activeRecord.dump();//                            activeRecord = new RecordDetails(rectype, recsize, startloc, data, record);//                        }//                    }//                    else                    if (record.getSid() != ContinueRecord.sid)                    {                        records.add(record);                        if (activeRecord != null)                            activeRecord.dump();                        activeRecord = new RecordDetails(rectype, recsize, startloc, data, record);                    }                    else                    {                        activeRecord.getRecord().processContinueRecord(data);                    }                    if (dump) {                        dumpRaw(rectype, recsize, data);                    }                }            } while (rectype != 0);            activeRecord.dump();        } catch (IOException e) {            throw new RecordFormatException("Error reading bytes");        }        Record[] retval = new Record[records.size()];        retval = (Record[]) records.toArray(retval);        return retval;    }    private static void dumpNormal(Record record, int startloc, short rectype, short recsize)    {        System.out.println("Offset 0x" + Integer.toHexString(startloc) + " (" + startloc + ")");        System.out.println( "recordid = 0x" + Integer.toHexString( rectype ) + ", size = " + recsize );        System.out.println( record.toString() );    }    private static void dumpContinueRecord(Record last_record, boolean dump, byte[] data) throws IOException {        if (last_record == null) {            throw new RecordFormatException(                    "First record is a ContinueRecord??");        }        if (dump) {            System.out.println(                    "-----PRECONTINUED LAST RECORD WOULD SERIALIZE LIKE:");            byte[] lr = last_record.serialize();            if (lr != null) {                HexDump.dump(last_record.serialize(),                        0, System.out, 0);            }            System.out.println();            System.out.println(                    "-----PRECONTINUED----------------------------------");        }        last_record.processContinueRecord(data);        if (dump) {            System.out.println(                    "-----CONTINUED LAST RECORD WOULD SERIALIZE LIKE:");            HexDump.dump(last_record.serialize(), 0,                    System.out, 0);            System.out.println();            System.out.println(                    "-----CONTINUED----------------------------------");        }    }    private static void dumpUnknownRecord(byte[] data) throws IOException {        // record hex dump it!        System.out.println(                "-----UNKNOWN----------------------------------");        if (data.length > 0) {            HexDump.dump(data, 0, System.out, 0);        } else {            System.out.print("**NO RECORD DATA**");        }        System.out.println();        System.out.println(                "-----UNKNOWN----------------------------------");    }    private static void dumpRaw( short rectype, short recsize, byte[] data ) throws IOException    {        //                        System.out        //                            .println("fixing to recordize the following");        System.out.println("============================================");        System.out.print( "rectype = 0x"                + Integer.toHexString( rectype ) );        System.out.println( ", recsize = 0x"                + Integer.toHexString( recsize ) );        System.out.println(                "-BEGIN DUMP---------------------------------" );        if ( data.length > 0 )        {            HexDump.dump( data, 0, System.out, 0 );        }        else        {            System.out.println( "**NO RECORD DATA**" );        }        //        System.out.println();        System.out.println(                "-END DUMP-----------------------------------" );    }    /**     *  Essentially a duplicate of RecordFactory. Kept seperate as not to screw     *  up non-debug operations.     *     */    private static Record createRecord( short rectype, short size,                                          byte[] data )    {        Record retval = null;        switch ( rectype )        {            case ChartRecord.sid:                retval = new ChartRecord( rectype, size, data );                break;            case ChartFormatRecord.sid:                retval = new ChartFormatRecord( rectype, size, data );                break;            case SeriesRecord.sid:                retval = new SeriesRecord( rectype, size, data );                break;            case BeginRecord.sid:                retval = new BeginRecord( rectype, size, data );                break;            case EndRecord.sid:                retval = new EndRecord( rectype, size, data );                break;            case BOFRecord.sid:                retval = new BOFRecord( rectype, size, data );                break;            case InterfaceHdrRecord.sid:                retval = new InterfaceHdrRecord( rectype, size, data );                break;            case MMSRecord.sid:                retval = new MMSRecord( rectype, size, data );                break;            case InterfaceEndRecord.sid:                retval = new InterfaceEndRecord( rectype, size, data );                break;            case WriteAccessRecord.sid:                retval = new WriteAccessRecord( rectype, size, data );                break;            case CodepageRecord.sid:                retval = new CodepageRecord( rectype, size, data );                break;            case DSFRecord.sid:                retval = new DSFRecord( rectype, size, data );                break;            case TabIdRecord.sid:                retval = new TabIdRecord( rectype, size, data );                break;            case FnGroupCountRecord.sid:                retval = new FnGroupCountRecord( rectype, size, data );                break;            case WindowProtectRecord.sid:                retval = new WindowProtectRecord( rectype, size, data );                break;            case ProtectRecord.sid:                retval = new ProtectRecord( rectype, size, data );                break;            case PasswordRecord.sid:                retval = new PasswordRecord( rectype, size, data );                break;            case ProtectionRev4Record.sid:                retval = new ProtectionRev4Record( rectype, size, data );                break;            case PasswordRev4Record.sid:                retval = new PasswordRev4Record( rectype, size, data );                break;            case WindowOneRecord.sid:                retval = new WindowOneRecord( rectype, size, data );                break;            case BackupRecord.sid:                retval = new BackupRecord( rectype, size, data );                break;            case HideObjRecord.sid:                retval = new HideObjRecord( rectype, size, data );                break;            case DateWindow1904Record.sid:                retval = new DateWindow1904Record( rectype, size, data );                break;            case PrecisionRecord.sid:                retval = new PrecisionRecord( rectype, size, data );                break;            case RefreshAllRecord.sid:                retval = new RefreshAllRecord( rectype, size, data );                break;            case BookBoolRecord.sid:                retval = new BookBoolRecord( rectype, size, data );                break;            case FontRecord.sid:                retval = new FontRecord( rectype, size, data );                break;            case FormatRecord.sid:                retval = new FormatRecord( rectype, size, data );                break;            case ExtendedFormatRecord.sid:                retval = new ExtendedFormatRecord( rectype, size, data );                break;            case StyleRecord.sid:                retval = new StyleRecord( rectype, size, data );                break;            case UseSelFSRecord.sid:                retval = new UseSelFSRecord( rectype, size, data );                break;            case BoundSheetRecord.sid:                retval = new BoundSheetRecord( rectype, size, data );                break;            case CountryRecord.sid:                retval = new CountryRecord( rectype, size, data );                break;            case SSTRecord.sid:                retval = new SSTRecord( rectype, size, data );                break;            case ExtSSTRecord.sid:                retval = new ExtSSTRecord( rectype, size, data );                break;            case EOFRecord.sid:                retval = new EOFRecord( rectype, size, data );                break;            case IndexRecord.sid:                retval = new IndexRecord( rectype, size, data );                break;            case CalcModeRecord.sid:                retval = new CalcModeRecord( rectype, size, data );                break;            case CalcCountRecord.sid:

⌨️ 快捷键说明

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