All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ttzero.excel.entity.e3.BOFParser Maven / Gradle / Ivy

/*
 * Copyright (c) 2019-2020, [email protected] All Rights Reserved.
 *
 * 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.
 */

package org.ttzero.excel.entity.e3;

import org.ttzero.excel.entity.e3.enums.BIFFVerEnum;
import org.ttzero.excel.entity.e3.enums.StreamTypeEnum;
import org.ttzero.excel.reader.ExcelReadException;

/**
 * 5.8 BOF – Beginning of File
 * 

* The BOF record is the first record of any kind of stream or sub-stream: *

    *
  • The Worksheet Stream (➜4.1.1) and the Chart Stream (➜7.1.1)
  • *
  • All sub-streams in the Workbook Stream (the Sheet Sub-stream * and the Workbook Globals Sub-stream, ➜4.1.2, * and the Chart Sub-stream, ➜7.1.2)
  • *
  • The Workspace Stream
  • *
* A BOF record will never be encrypted, regardless of * its type and position in the stream. *

* If a BIFF8 version of Excel (Excel 8.0 and newer) writes * a BIFF5 workbook, it writes a wrong BIFF version in BOF * records of the Sheet Sub-streams. Only the leading BOF * record of the Workbook Globals Sub-stream contains the * correct value and should be used to determine the BIFF * version for the entire stream. * * @author guanquan.wang at 2019-01-31 15:19 */ public class BOFParser { public static BOF get(Block block) { // Mark the ready flag block.ready(); // BIFF version (always 0600H for BIFF8) short version = block.nextShort(); if (version != 0x0600) { // version error. throw new ExcelReadException("Only support BIFF8."); } // Type of the following data short type = block.nextShort(); StreamTypeEnum streamType = StreamTypeEnum.of(type); if (streamType == null) { throw new ExcelReadException("Unknown stream type." + type); } // Build identifier, must not be 0 short identifier = block.nextShort(); if (identifier == 0) { throw new ExcelReadException("Build identifier must not be zero."); } // Build year, must not be 0 short year = block.nextShort(); if (year == 0) { throw new ExcelReadException("Build year must not be zero."); } // File history flags int history = block.nextInt(); // Lowest Excel version that can read all records in this file int supportLowestVersion = block.nextInt(); BIFFVerEnum lowVer = null; for (BIFFVerEnum ver : BIFFVerEnum.values()) { if (ver.getValue() > supportLowestVersion) { lowVer = ver; break; } } // Block end of read block.commit(); BOF bof = new BOF(); bof.version = version; bof.type = streamType; bof.identifier = identifier; bof.year = year; bof.supportLowestVersion = lowVer; bof.history = history; return bof; } public static short getId() { return ParserIdentifier.BOF; } public static class BOF { short version; StreamTypeEnum type; short identifier; short year; int history; BIFFVerEnum supportLowestVersion; @Override public String toString() { return "Version: " + version + " Type: " + type + " Identifier: " + identifier + " Build year: " + year + " History: " + history + " SupportLowestVersion: " + supportLowestVersion; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy