// no instance initialisation
}
- /**
- * Generates an escher record including the any children contained under that record.
- * An exception is thrown if the record could not be generated.
- *
- * @param data The byte array containing the records
- * @param offset The starting offset into the byte array
- * @return The generated escher record
- */
@Override
public EscherRecord createRecord(byte[] data, int offset) {
short options = LittleEndian.getShort( data, offset );
* @param in An input stream to read from.
* @param out An output stream to write to.
*
- * @throws IOException
- * @throws LittleEndian.BufferUnderrunException
+ * @throws IOException if the data can't be read or written
+ * @throws LittleEndian.BufferUnderrunException if an buffer underrun occurs
*/
public void dumpOld(long maxLength, InputStream in, PrintStream out)
throws IOException, LittleEndian.BufferUnderrunException {
package org.apache.poi.ddf;
-import org.apache.poi.util.LittleEndian;
-
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import org.apache.poi.util.LittleEndian;
+
/**
* Generates a property given a reference into the byte array storing that property.
- *
- * @author Glen Stampoultzis
*/
public final class EscherPropertyFactory {
/**
*
* @param data The byte array containing the property
* @param offset The starting offset into the byte array
+ * @param numProperties The number of properties to be read
* @return The new properties
*/
public List<EscherProperty> createProperties(byte[] data, int offset, short numProperties) {
int pos = offset;
-// while ( bytesRemaining >= 6 )
for (int i = 0; i < numProperties; i++) {
short propId;
int propData;
propData = LittleEndian.getInt( data, pos + 2 );
short propNumber = (short) ( propId & (short) 0x3FFF );
boolean isComplex = ( propId & (short) 0x8000 ) != 0;
- boolean isBlipId = ( propId & (short) 0x4000 ) != 0;
+ // boolean isBlipId = ( propId & (short) 0x4000 ) != 0;
byte propertyType = EscherProperties.getPropertyType(propNumber);
if ( propertyType == EscherPropertyMetaData.TYPE_BOOLEAN )
}
}
pos += 6;
-// bytesRemaining -= 6 + complexBytes;
}
// Get complex data
/**
* The base abstract record from which all escher records are defined. Subclasses will need
* to define methods for serialization/deserialization and for determining the record size.
- *
- * @author Glen Stampoultzis
*/
-public abstract class EscherRecord {
- private static BitField fInstance = BitFieldFactory.getInstance(0xfff0);
- private static BitField fVersion = BitFieldFactory.getInstance(0x000f);
+public abstract class EscherRecord implements Cloneable {
+ private static final BitField fInstance = BitFieldFactory.getInstance(0xfff0);
+ private static final BitField fVersion = BitFieldFactory.getInstance(0x000f);
private short _options;
private short _recordId;
/**
* Delegates to fillFields(byte[], int, EscherRecordFactory)
- *
+ *
+ * @param data they bytes to serialize from
+ * @param f the escher record factory
+ * @return The number of bytes written.
+ *
* @see #fillFields(byte[], int, org.apache.poi.ddf.EscherRecordFactory)
*/
protected int fillFields( byte[] data, EscherRecordFactory f )
* @return the number of bytes remaining in this record. This
* may include the children if this is a container.
*/
- protected int readHeader( byte[] data, int offset )
- {
+ protected int readHeader( byte[] data, int offset ) {
_options = LittleEndian.getShort( data, offset );
_recordId = LittleEndian.getShort( data, offset + 2 );
int remainingBytes = LittleEndian.getInt( data, offset + 4 );
* @param offset the offset to start reading from
* @return value of instance part of options field
*/
- protected static short readInstance( byte data[], int offset )
- {
+ protected static short readInstance( byte data[], int offset ) {
final short options = LittleEndian.getShort( data, offset );
return fInstance.getShortValue( options );
}
/**
- * Determine whether this is a container record by inspecting the option
- * field.
+ * Determine whether this is a container record by inspecting the option field.
+ *
* @return true is this is a container field.
*/
public boolean isContainerRecord() {
}
/**
- * <p
- * Note that <code>options</code> is an internal field. Use {@link #setInstance(short)} ()} and
- * {@link #setVersion(short)} ()} to set the actual fields.
- * </p>
+ * Note that <code>options</code> is an internal field.
+ * Use {@link #setInstance(short)} ()} and {@link #setVersion(short)} ()} to set the actual fields.
+ *
* @return The options field for this record. All records have one.
*/
@Internal
}
/**
- * Set the options this this record. Container records should have the
- * last nibble set to 0xF.
- *
- * <p
- * Note that <code>options</code> is an internal field. Use {@link #getInstance()} and
- * {@link #getVersion()} to access actual fields.
- * </p>
+ * Set the options this this record. Container records should have the
+ * last nibble set to 0xF.<p>
+ *
+ * Note that {@code options} is an internal field.
+ * Use {@link #getInstance()} and {@link #getVersion()} to access actual fields.
+ *
+ * @param options the record options
*/
@Internal
public void setOptions( short options ) {
/**
* Sets the record id for this record.
+ *
+ * @param recordId the record id
*/
public void setRecordId( short recordId ) {
_recordId = recordId;
/**
* Escher records may need to be clonable in the future.
+ *
+ * @return the cloned object
+ *
+ * @throws CloneNotSupportedException if the subclass hasn't implemented {@link Cloneable}
*/
@Override
public EscherRecord clone() throws CloneNotSupportedException {
- throw new CloneNotSupportedException( "The class " + getClass().getName() + " needs to define a clone method" );
+ return (EscherRecord)super.clone();
}
/**
* Returns the indexed child record.
+ *
+ * @param index the index of the child within the child records
+ * @return the indexed child record
*/
public EscherRecord getChild( int index ) {
return getChildRecords().get(index);
/**
* Subclasses should return the short name for this escher record.
+ *
+ * @return the short name for this escher record
*/
public abstract String getRecordName();
/**
* Sets the instance part of record
*
- * @param value
- * instance part value
+ * @param value instance part value
*/
public void setInstance( short value )
{
/**
* Sets the version part of record
*
- * @param value
- * version part value
+ * @param value version part value
*/
public void setVersion( short value )
{
/**
* The escher record factory interface allows for the creation of escher
* records from a pointer into a data array.
- *
- * @author Glen Stampoultzis (glens at apache.org)
*/
public interface EscherRecordFactory {
/**
- * Create a new escher record from the data provided. Does not attempt
- * to fill the contents of the record however.
+ * Generates an escher record including any children contained under that record.
+ * An exception is thrown if the record could not be generated.
+ *
+ * @param data The byte array containing the records
+ * @param offset The starting offset into the byte array
+ * @return The generated escher record
*/
EscherRecord createRecord( byte[] data, int offset );
}
/**
* Interface for listening to escher serialization events.
- *
- * @author Glen Stampoultzis (glens at apache.org)
*/
public interface EscherSerializationListener
{
*
* @param offset The position in the data array at which the record will be serialized.
* @param recordId The id of the record about to be serialized.
+ * @param record The record to be serialized
*/
void beforeRecordSerialize(int offset, short recordId, EscherRecord record);
* @param recordId The id of the record about to be serialized
* @param size The number of bytes written for this record. If it is a container
* record then this will include the size of any included records.
+ * @param record The record which was serialized
*/
void afterRecordSerialize(int offset, short recordId, int size, EscherRecord record);
}
/**
* The id is distinct from the actual property number. The id includes the property number the blip id
* flag and an indicator whether the property is complex or not.
+ *
+ * @param id the property id
+ * @param propertyValue the property value
*/
public EscherSimpleProperty( short id, int propertyValue )
{
}
/**
- * Constructs a new escher property. The three parameters are combined to form a property
- * id.
+ * Constructs a new escher property. The three parameters are combined to form a property id.
+ *
+ * @param propertyNumber the property number
+ * @param isComplex true, if its a complex property
+ * @param isBlipId true, if its a blip
+ * @param propertyValue the property value
*/
public EscherSimpleProperty( short propertyNumber, boolean isComplex, boolean isBlipId, int propertyValue )
{
public static final String DEFAULT_STREAM_NAME =
"\005DocumentSummaryInformation";
+ @Override
public PropertyIDMap getPropertySetIDMap() {
return PropertyIDMap.getDocumentSummaryInformationProperties();
}
/**
- * <p>Returns the category (or <code>null</code>).</p>
+ * <p>Returns the category (or {@code null}).</p>
*
* @return The category value
*/
/**
* <p>Returns the presentation format (or
- * <code>null</code>).</p>
+ * {@code null}).</p>
*
* @return The presentation format value
*/
/**
- * <p>Returns the heading pair (or <code>null</code>)
+ * <p>Returns the heading pair (or {@code null})
* <strong>when this method is implemented. Please note that the
* return type is likely to change!</strong>
*
/**
- * <p>Returns the doc parts (or <code>null</code>)
+ * <p>Returns the doc parts (or {@code null})
* <strong>when this method is implemented. Please note that the
* return type is likely to change!</strong>
*
/**
- * <p>Returns the manager (or <code>null</code>).</p>
+ * <p>Returns the manager (or {@code null}).</p>
*
* @return The manager value
*/
/**
- * <p>Returns the company (or <code>null</code>).</p>
+ * <p>Returns the company (or {@code null}).</p>
*
* @return The company value
*/
* {@link DocumentSummaryInformation} does not contain this char count.</p>
* <p>This is the whitespace-including version of {@link SummaryInformation#getCharCount()}
*
- * @return The character count or <code>null</code>
+ * @return The character count or {@code null}
*/
public int getCharCountWithSpaces()
{
/**
- * <p>Get if the User Defined Property Set has been updated outside of the
- * Application.</p>
- * <p>If it has (true), the hyperlinks should be updated on document load.</p>
+ * Get if the User Defined Property Set has been updated outside of the
+ * Application.<p>
+ * If it has (true), the hyperlinks should be updated on document load.
+ *
+ * @return true, if the hyperlinks should be updated on document load
*/
public boolean getHyperlinksChanged()
{
/**
* Set the flag for if the User Defined Property Set has been updated outside
* of the Application.
+ *
+ * @param changed true, if the User Defined Property Set has been updated
*/
public void setHyperlinksChanged(boolean changed)
{
/**
- * <p>Gets the version of the Application which wrote the
+ * Gets the version of the Application which wrote the
* Property set, stored with the two high order bytes having the major
- * version number, and the two low order bytes the minor version number.</p>
- * <p>This will be 0 if no version is set.</p>
+ * version number, and the two low order bytes the minor version number.<p>
+ * This will be 0 if no version is set.
+ *
+ * @return the Application version
*/
public int getApplicationVersion()
{
* Sets the Application version, which must be a 4 byte int with
* the two high order bytes having the major version number, and the
* two low order bytes the minor version number.
+ *
+ * @param version the Application version
*/
public void setApplicationVersion(int version)
{
/**
- * <p>Returns the VBA digital signature for the VBA project
- * embedded in the document (or <code>null</code>).</p>
+ * Returns the VBA digital signature for the VBA project
+ * embedded in the document (or {@code null}).
+ *
+ * @return the VBA digital signature
*/
public byte[] getVBADigitalSignature()
{
/**
- * <p>Gets the content type of the file (or <code>null</code>).</p>
+ * Gets the content type of the file (or {@code null}).
+ *
+ * @return the content type of the file
*/
public String getContentType()
{
/**
* Sets the content type of the file
+ *
+ * @param type the content type of the file
*/
public void setContentType(String type)
{
/**
- * <p>Gets the content status of the file (or <code>null</code>).</p>
+ * Gets the content status of the file (or {@code null}).
+ *
+ * @return the content status of the file
*/
public String getContentStatus()
{
}
/**
- * Sets the content type of the file
+ * Sets the content status of the file
+ *
+ * @param status the content status of the file
*/
public void setContentStatus(String status)
{
/**
- * <p>Gets the document language, which is normally unset and empty
- * (or <code>null</code>).</p>
+ * Gets the document language, which is normally unset and empty (or {@code null}).
+ *
+ * @return the document language
*/
public String getLanguage()
{
/**
* Set the document language
+ *
+ * @param language the document language
*/
public void setLanguage(String language)
{
/**
* <p>Gets the document version as a string, which is normally unset and empty
- * (or <code>null</code>).</p>
+ * (or {@code null}).</p>
+ *
+ * @return the document verion
*/
public String getDocumentVersion()
{
/**
* Sets the document version string
+ *
+ * @param version the document version string
*/
public void setDocumentVersion(String version)
{
import org.apache.poi.util.LittleEndianOutput;
/**
- * ENDOBJECT - Chart Future Record Type End Object (0x0855)<br/>
- *
- * @author Patrick Cheng
+ * ENDOBJECT - Chart Future Record Type End Object (0x0855)
*/
public final class ChartEndObjectRecord extends StandardRecord {
public static final short sid = 0x0855;
import org.apache.poi.util.LittleEndianOutput;
/**
- * CHARTFRTINFO - Chart Future Record Type Info (0x0850)<br/>
- *
- * @author Patrick Cheng
+ * CHARTFRTINFO - Chart Future Record Type Info (0x0850)
*/
public final class ChartFRTInfoRecord extends StandardRecord {
public static final short sid = 0x850;
import org.apache.poi.util.LittleEndianOutput;
/**
- * Class ChartFormatRecord (0x1014)<p/>
+ * Class ChartFormatRecord (0x1014)<p>
*
* (As with all chart related records, documentation is lacking.
* See {@link ChartRecord} for more details)
- *
- * @author Glen Stampoultzis (glens at apache.org)
*/
public final class ChartFormatRecord extends StandardRecord {
public static final short sid = 0x1014;
import org.apache.poi.util.LittleEndianOutput;
/**
- * CHART (0x1002) <p/>
+ * CHART (0x1002)<p>
*
- * The chart record is used to define the location and size of a chart.<p/>
+ * The chart record is used to define the location and size of a chart.<p>
*
* Chart related records don't seem to be covered in either the
* <A HREF="http://sc.openoffice.org/excelfileformat.pdf">OOO</A>
* <A HREF="http://ooxmlisdefectivebydesign.blogspot.com/2008/03/bad-surprise-in-microsoft-office-binary.html">blog</A>
* suggests that some documentation for these records is available in "MSDN Library, Feb 1998",
* but no later.
- *
- * @author Glen Stampoultzis (glens at apache.org)
*/
public final class ChartRecord extends StandardRecord implements Cloneable {
public final static short sid = 0x1002;
import org.apache.poi.util.LittleEndianOutput;
/**
- * STARTBLOCK - Chart Future Record Type Start Block (0x0852)<br/>
- *
- * @author Patrick Cheng
+ * STARTBLOCK - Chart Future Record Type Start Block (0x0852)
*/
public final class ChartStartBlockRecord extends StandardRecord implements Cloneable {
public static final short sid = 0x0852;
import org.apache.poi.util.LittleEndianOutput;
/**
- * STARTOBJECT - Chart Future Record Type Start Object (0x0854)<br/>
- *
- * @author Patrick Cheng
+ * STARTOBJECT - Chart Future Record Type Start Object (0x0854)
*/
public final class ChartStartObjectRecord extends StandardRecord {
public static final short sid = 0x0854;
import org.apache.poi.util.LittleEndianOutput;
/**
- * CHARTTITLEFORMAT (0x1050)<p/>
+ * CHARTTITLEFORMAT (0x1050)<p>
* Describes the formatting runs associated with a chart title.
*/
public class ChartTitleFormatRecord extends StandardRecord {
import org.apache.poi.util.LittleEndianOutput;
/**
- * The dat record is used to store options for the chart.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * The dat record is used to store options for the chart.
*/
public final class DatRecord extends StandardRecord implements Cloneable {
public final static short sid = 0x1063;
import org.apache.poi.util.LittleEndianOutput;
/**
- * The data format record is used to index into a series.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * The data format record is used to index into a series.
*/
public final class DataFormatRecord extends StandardRecord implements Cloneable {
public final static short sid = 0x1006;
import org.apache.poi.util.LittleEndianOutput;
/**
- * DATALABEXT - Chart Data Label Extension (0x086A) <br/>
- *
- * @author Patrick Cheng
+ * DATALABEXT - Chart Data Label Extension (0x086A)
*/
public final class DataLabelExtensionRecord extends StandardRecord {
public static final short sid = 0x086A;
import org.apache.poi.util.LittleEndianOutput;
/**
- * The default data label text properties record identifies the text characteristics of the preceding text record.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * The default data label text properties record identifies the text characteristics of the preceding text record.
*/
public final class DefaultDataLabelTextPropertiesRecord extends StandardRecord implements Cloneable {
public final static short sid = 0x1024;
import org.apache.poi.util.LittleEndianOutput;
/**
- * The font basis record stores various font metrics.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * The font basis record stores various font metrics.
*/
public final class FontBasisRecord extends StandardRecord implements Cloneable {
public final static short sid = 0x1060;
import org.apache.poi.util.LittleEndianOutput;
/**
- * The frame record indicates whether there is a border around the displayed text of a chart.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * The frame record indicates whether there is a border around the displayed text of a chart.
*/
public final class FrameRecord extends StandardRecord implements Cloneable {
public final static short sid = 0x1032;
import org.apache.poi.util.LittleEndianOutput;
/**
- * Defines a legend for a chart.<p/>
- *
- * @author Andrew C. Oliver (acoliver at apache.org)
+ * Defines a legend for a chart.
*/
public final class LegendRecord extends StandardRecord implements Cloneable {
public final static short sid = 0x1015;
import org.apache.poi.util.LittleEndianOutput;
/**
- * Describes a line format record. The line format record controls how a line on a chart appears.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * Describes a line format record. The line format record controls how a line on a chart appears.
*/
public final class LineFormatRecord extends StandardRecord implements Cloneable {
public final static short sid = 0x1007;
import org.apache.poi.util.LittleEndianOutput;
/**
- * Describes a linked data record. This record refers to the series data or text.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * Describes a linked data record. This record refers to the series data or text.
*/
public final class LinkedDataRecord extends StandardRecord implements Cloneable {
public final static short sid = 0x1051;
import org.apache.poi.util.LittleEndianOutput;
/**
- * The number format index record indexes format table. This applies to an axis.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * The number format index record indexes format table. This applies to an axis.
*/
public final class NumberFormatIndexRecord extends StandardRecord implements Cloneable {
public final static short sid = 0x104E;
import org.apache.poi.util.LittleEndianOutput;
/**
- * Links text to an object on the chart or identifies it as the title.<p/>
- *
- * @author Andrew C. Oliver (acoliver at apache.org)
+ * Links text to an object on the chart or identifies it as the title.
*/
public final class ObjectLinkRecord extends StandardRecord implements Cloneable {
public final static short sid = 0x1027;
import org.apache.poi.util.LittleEndianOutput;
/**
- * preceeds and identifies a frame as belonging to the plot area.<p/>
- *
- * @author Andrew C. Oliver (acoliver at apache.org)
+ * preceeds and identifies a frame as belonging to the plot area.
*/
public final class PlotAreaRecord extends StandardRecord {
public final static short sid = 0x1035;
import org.apache.poi.util.LittleEndianOutput;
/**
- * The plot growth record specifies the scaling factors used when a font is scaled.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * The plot growth record specifies the scaling factors used when a font is scaled.
*/
public final class PlotGrowthRecord extends StandardRecord {
public final static short sid = 0x1064;
import org.apache.poi.util.LittleEndianOutput;
/**
- * The series chart group index record stores the index to the CHARTFORMAT record (0 based).<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * The series chart group index record stores the index to the CHARTFORMAT record (0 based).
*/
public final class SeriesChartGroupIndexRecord extends StandardRecord {
public final static short sid = 0x1045;
import org.apache.poi.util.LittleEndianOutput;
/**
- * links a series to its position in the series list.<p/>
- *
- * @author Andrew C. Oliver (acoliver at apache.org)
+ * links a series to its position in the series list.
*/
public final class SeriesIndexRecord extends StandardRecord {
public final static short sid = 0x1065;
import org.apache.poi.util.LittleEndianOutput;
/**
- * SERIESLIST (0x1016)<p/>
+ * SERIESLIST (0x1016)<p>
*
- * The series list record defines the series displayed as an overlay to the main chart record.<br/>
+ * The series list record defines the series displayed as an overlay to the main chart record.<p>
*
* (As with all chart related records, documentation is lacking.
* See {@link ChartRecord} for more details)
- *
- * @author Glen Stampoultzis (glens at apache.org)
*/
public final class SeriesListRecord extends StandardRecord {
public final static short sid = 0x1016;
import org.apache.poi.util.LittleEndianOutput;
/**
- * The series record describes the overall data for a series.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * The series record describes the overall data for a series.
*/
public final class SeriesRecord extends StandardRecord {
public final static short sid = 0x1003;
import org.apache.poi.util.StringUtil;
/**
- * SERIESTEXT (0x100D)</p>
- * Defines a series name</p>
- *
- * @author Andrew C. Oliver (acoliver at apache.org)
+ * SERIESTEXT (0x100D)<p>
+ * Defines a series name
*/
public final class SeriesTextRecord extends StandardRecord {
public final static short sid = 0x100D;
import org.apache.poi.util.LittleEndianOutput;
/**
- * Indicates the chart-group index for a series. The order probably defines the mapping.
- * So the 0th record probably means the 0th series. The only field in this of course defines which chart
- * group the 0th series (for instance) would map to. Confusing? Well thats because it is. (p 522 BCG)<p/>
- *
- * @author Andrew C. Oliver (acoliver at apache.org)
+ * Indicates the chart-group index for a series. The order probably defines the mapping.
+ * So the 0th record probably means the 0th series. The only field in this of course defines which chart
+ * group the 0th series (for instance) would map to. Confusing? Well thats because it is. (p 522 BCG)
*/
public final class SeriesToChartGroupRecord extends StandardRecord {
public final static short sid = 0x1045;
import org.apache.poi.util.LittleEndianOutput;
/**
- * Describes a chart sheet properties record. SHTPROPS (0x1044) <p/>
+ * Describes a chart sheet properties record. SHTPROPS (0x1044)<p>
*
* (As with all chart related records, documentation is lacking.
* See {@link ChartRecord} for more details)
- *
- * @author Glen Stampoultzis (glens at apache.org)
*/
public final class SheetPropertiesRecord extends StandardRecord {
public final static short sid = 0x1044;
import org.apache.poi.util.LittleEndianOutput;
/**
- * The text record is used to define text stored on a chart.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * The text record is used to define text stored on a chart.
*/
public final class TextRecord extends StandardRecord {
public final static short sid = 0x1025;
import org.apache.poi.util.LittleEndianOutput;
/**
- * The units record describes units.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * The units record describes units.
*/
public final class UnitsRecord extends StandardRecord {
public final static short sid = 0x1001;
import org.apache.poi.util.LittleEndianOutput;
/**
- * The value range record defines the range of the value axis.<p/>
- *
- * @author Glen Stampoultzis (glens at apache.org)
+ * The value range record defines the range of the value axis.
*/
public final class ValueRangeRecord extends StandardRecord {
public final static short sid = 0x101f;
}
/**
- * Set the width (in units of 1/256th of a character width)
- * <p/>
- * <p>
+ * Set the width (in units of 1/256th of a character width)<p>
+ *
* The maximum column width for an individual cell is 255 characters.
* This value represents the number of characters that can be displayed
- * in a cell that is formatted with the standard font (first font in the workbook).
- * </p>
- * <p/>
- * <p>
+ * in a cell that is formatted with the standard font (first font in the workbook).<p>
+ *
* Character width is defined as the maximum digit width
* of the numbers <code>0, 1, 2, ... 9</code> as rendered
- * using the default font (first font in the workbook).
- * <br/>
+ * using the default font (first font in the workbook).<p>
+ *
* Unless you are using a very special font, the default character is '0' (zero),
- * this is true for Arial (default font font in HSSF) and Calibri (default font in XSSF)
- * </p>
- * <p/>
- * <p>
+ * this is true for Arial (default font font in HSSF) and Calibri (default font in XSSF)<p>
+ *
* Please note, that the width set by this method includes 4 pixels of margin padding (two on each side),
* plus 1 pixel padding for the gridlines (Section 3.3.1.12 of the OOXML spec).
- * This results is a slightly less value of visible characters than passed to this method (approx. 1/2 of a character).
- * </p>
- * <p>
+ * This results is a slightly less value of visible characters than passed to this method (approx. 1/2 of a character).<p>
+ *
* To compute the actual number of visible characters,
- * Excel uses the following formula (Section 3.3.1.12 of the OOXML spec):
- * </p>
+ * Excel uses the following formula (Section 3.3.1.12 of the OOXML spec):<p>
+ *
* <code>
* width = Truncate([{Number of Visible Characters} *
* {Maximum Digit Width} + {5 pixel padding}]/{Maximum Digit Width}*256)/256
*
* @param columnIndex - the column to set (0-based)
* @param width - the width in units of 1/256th of a character width
- * @throws IllegalArgumentException if width > 255*256 (the maximum column width in Excel is 255 characters)
+ * @throws IllegalArgumentException if width > 255*256 (the maximum column width in Excel is 255 characters)
*/
@Override
public void setColumnWidth(int columnIndex, int width) {
/**
* Control if Excel should be asked to recalculate all formulas on this sheet
- * when the workbook is opened.
- * <p/>
- * <p>
+ * when the workbook is opened.<p>
+ *
* Calculating the formula values with {@link org.apache.poi.ss.usermodel.FormulaEvaluator} is the
* recommended solution, but this may be used for certain cases where
- * evaluation in POI is not possible.
- * </p>
- * <p/>
- * <p>
+ * evaluation in POI is not possible.<p>
+ *
* It is recommended to force recalcuation of formulas on workbook level using
* {@link org.apache.poi.ss.usermodel.Workbook#setForceFormulaRecalculation(boolean)}
* to ensure that all cross-worksheet formuals and external dependencies are updated.
- * </p>
*
* @param value true if the application will perform a full recalculation of
* this worksheet values when the workbook is opened
/**
* Answer whether protection is enabled or disabled
*
- * @return true => protection enabled; false => protection disabled
+ * @return true => protection enabled; false => protection disabled
*/
@Override
public boolean getProtect() {
/**
* Answer whether object protection is enabled or disabled
*
- * @return true => protection enabled; false => protection disabled
+ * @return true => protection enabled; false => protection disabled
*/
public boolean getObjectProtect() {
return getProtectionBlock().isObjectProtected();
/**
* Answer whether scenario protection is enabled or disabled
*
- * @return true => protection enabled; false => protection disabled
+ * @return true => protection enabled; false => protection disabled
*/
@Override
public boolean getScenarioProtect() {
/**
* Window zoom magnification for current view representing percent values.
- * Valid values range from 10 to 400. Horizontal & Vertical scale together.
+ * Valid values range from 10 to 400. Horizontal & Vertical scale together.
*
* For example:
* <pre>
/**
* Shifts rows between startRow and endRow n number of rows.
* If you use a negative number, it will shift rows up.
- * Code ensures that rows don't wrap around.
- * <p/>
- * Calls shiftRows(startRow, endRow, n, false, false);
- * <p/>
- * <p/>
+ * Code ensures that rows don't wrap around.<p>
+ *
+ * Calls {@code shiftRows(startRow, endRow, n, false, false);}<p>
+ *
* Additionally shifts merged regions that are completely defined in these
* rows (ie. merged 2 cells on a row to be shifted).
*
/**
* Shifts rows between startRow and endRow n number of rows.
* If you use a negative number, it will shift rows up.
- * Code ensures that rows don't wrap around
- * <p/>
- * <p/>
+ * Code ensures that rows don't wrap around<p>
+ *
* Additionally shifts merged regions that are completely defined in these
- * rows (ie. merged 2 cells on a row to be shifted).
- * <p/>
+ * rows (ie. merged 2 cells on a row to be shifted).<p>
+ *
* TODO Might want to add bounds checking here
*
* @param startRow the row to start shifting
/**
* Shifts rows between startRow and endRow n number of rows.
* If you use a negative number, it will shift rows up.
- * Code ensures that rows don't wrap around
- * <p/>
- * <p/>
+ * Code ensures that rows don't wrap around<p>
+ *
* Additionally shifts merged regions that are completely defined in these
- * rows (ie. merged 2 cells on a row to be shifted).
- * <p/>
+ * rows (ie. merged 2 cells on a row to be shifted).<p>
+ *
* TODO Might want to add bounds checking here
*
* @param startRow the row to start shifting
}
/**
- * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
- * <p/>
- * <p>
+ * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.<p>
+ *
* If both colSplit and rowSplit are zero then the existing freeze pane is removed
- * </p>
*
* @param colSplit Horizonatal position of split.
* @param rowSplit Vertical position of split.
}
/**
- * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.
- * <p/>
- * <p>
+ * Creates a split (freezepane). Any existing freezepane or split pane is overwritten.<p>
+ *
* If both colSplit and rowSplit are zero then the existing freeze pane is removed
- * </p>
*
* @param colSplit Horizonatal position of split.
* @param rowSplit Vertical position of split.
/**
* Sets a page break at the indicated row
- * Breaks occur above the specified row and left of the specified column inclusive.
- * <p/>
+ * Breaks occur above the specified row and left of the specified column inclusive.<p>
+ *
* For example, <code>sheet.setColumnBreak(2);</code> breaks the sheet into two parts
* with columns A,B,C in the first and D,E,... in the second. Simuilar, <code>sheet.setRowBreak(2);</code>
* breaks the sheet into two parts with first three rows (rownum=1...3) in the first part
/**
* Sets a page break at the indicated column.
- * Breaks occur above the specified row and left of the specified column inclusive.
- * <p/>
+ * Breaks occur above the specified row and left of the specified column inclusive.<p>
+ *
* For example, <code>sheet.setColumnBreak(2);</code> breaks the sheet into two parts
- * with columns A,B,C in the first and D,E,... in the second. Simuilar, <code>sheet.setRowBreak(2);</code>
+ * with columns A,B,C in the first and D,E,... in the second. Simuilar, {@code sheet.setRowBreak(2);}
* breaks the sheet into two parts with first three rows (rownum=1...3) in the first part
* and rows starting with rownum=4 in the second.
*
}
/**
- * Adjusts the column width to fit the contents.
- * <p/>
+ * Adjusts the column width to fit the contents.<p>
+ *
* This process can be relatively slow on large sheets, so this should
* normally only be called once per column, at the end of your
* processing.
}
/**
- * Adjusts the column width to fit the contents.
- * <p/>
+ * Adjusts the column width to fit the contents.<p>
+ *
* This process can be relatively slow on large sheets, so this should
* normally only be called once per column, at the end of your
- * processing.
- * <p/>
+ * processing.<p>
+ *
* You can specify whether the content of merged cells should be considered or ignored.
* Default is to ignore merged cells.
*
return name.substring(name.lastIndexOf('/'));
}
/**
- * Returns the Document thumbnail image data, or
- * <code>null</code> if there isn't one.
+ * Returns the Document thumbnail image data, or {@code null} if there isn't one.
*
* @return The thumbnail data, or null
+ *
+ * @throws IOException if the thumbnail can't be read
*/
public InputStream getThumbnailImage() throws IOException {
PackagePart tPart = getThumbnailPart();
}
/**
- * Sets the Thumbnail for the document, replacing any existing
- * one.
+ * Sets the Thumbnail for the document, replacing any existing one.
*
- * @param name The filename for the thumbnail image, eg <code>thumbnail.jpg</code>
+ * @param filename The filename for the thumbnail image, eg {@code thumbnail.jpg}
* @param imageData The inputstream to read the thumbnail image from
+ *
+ * @throws IOException if the thumbnail can't be written
*/
public void setThumbnail(String filename, InputStream imageData) throws IOException {
PackagePart tPart = getThumbnailPart();
private final DateFormat dateFormat;
/**
- * Creates a new POIXMLPropertiesTextExtractor for the
- * given open document.
+ * Creates a new POIXMLPropertiesTextExtractor for the given open document.
+ *
+ * @param doc the given open document
*/
public POIXMLPropertiesTextExtractor(POIXMLDocument doc) {
super(doc);
* Creates a new POIXMLPropertiesTextExtractor, for the
* same file that another TextExtractor is already
* working on.
+ *
+ * @param otherExtractor the extractor referencing the given file
*/
public POIXMLPropertiesTextExtractor(POIXMLTextExtractor otherExtractor) {
this(otherExtractor.getDocument());
/**
* Returns the core document properties, eg author
+ *
+ * @return the core document properties
*/
@SuppressWarnings("resource")
public String getCorePropertiesText() {
return text.toString();
}
/**
- * Returns the extended document properties, eg
- * application
+ * Returns the extended document properties, eg application
+ *
+ * @return the extended document properties
*/
@SuppressWarnings("resource")
public String getExtendedPropertiesText() {
return text.toString();
}
/**
- * Returns the custom document properties, if
- * there are any
+ * Returns the custom document properties, if there are any
+ *
+ * @return the custom document properties
*/
@SuppressWarnings({ "resource" })
public String getCustomPropertiesText() {
/**
* Represents a descriptor of a OOXML relation.
- *
- * @author Yegor Kozlov
*/
public abstract class POIXMLRelation {
}
/**
- * Returns the filename for the nth one of these,
- * e.g. /xl/comments4.xml
+ * Returns the filename for the nth one of these, e.g. /xl/comments4.xml
+ *
+ * @param index the suffix for the document type
+ * @return the filename including the suffix
*/
public String getFileName(int index) {
if(_defaultName.indexOf("#") == -1) {
/**
* Returns the index of the filename within the package for the given part.
* e.g. 4 for /xl/comments4.xml
+ *
+ * @param part the part to read the suffix from
+ * @return the suffix
*/
public Integer getFileNameIndex(POIXMLDocumentPart part) {
String regex = _defaultName.replace("#", "(\\d+)");
/**
* Returns the core document properties
+ *
+ * @return the core document properties
*/
public CoreProperties getCoreProperties() {
return _document.getProperties().getCoreProperties();
}
/**
* Returns the extended document properties
+ *
+ * @return the extended document properties
*/
public ExtendedProperties getExtendedProperties() {
return _document.getProperties().getExtendedProperties();
}
/**
* Returns the custom document properties
+ *
+ * @return the custom document properties
*/
public CustomProperties getCustomProperties() {
return _document.getProperties().getCustomProperties();
/**
* Returns opened document
+ *
+ * @return the opened document
*/
public final POIXMLDocument getDocument() {
return _document;
/**
* Returns the opened OPCPackage that contains the document
+ *
+ * @return the opened OPCPackage
*/
public OPCPackage getPackage() {
return _document.getPackage();
* the addition of a thumbnail in a package. You can do the same work by
* using the traditionnal relationship and part mechanism.
*
- * @param path The full path to the image file.
+ * @param filename The full path to the image file.
+ * @param data the image data
*/
public void addThumbnail(String filename, InputStream data) throws IOException {
// Check parameter
// no instance initialisation\r
}\r
\r
- /**\r
- * Generates an escher record including the any children contained under that record.\r
- * An exception is thrown if the record could not be generated.\r
- *\r
- * @param data The byte array containing the records\r
- * @param offset The starting offset into the byte array\r
- * @return The generated escher record\r
- */\r
+ @Override\r
public EscherRecord createRecord(byte[] data, int offset) {\r
short options = LittleEndian.getShort( data, offset );\r
short recordId = LittleEndian.getShort( data, offset + 2 );\r