Merged REL_2_BRANCH to head.
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353586 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f94bad29e3
commit
eeef2a1b12
3
NOTICE
Normal file
3
NOTICE
Normal file
@ -0,0 +1,3 @@
|
||||
This product includes software developed by
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
42
build.xml
42
build.xml
@ -643,9 +643,45 @@ FORREST_HOME environment variable!</echo>
|
||||
description="Generates the documentation and reports"/>
|
||||
|
||||
<target name="jar" depends="compile" description="Creates jar files for distribution">
|
||||
<jar basedir="${main.output.dir}" destfile="${dist.dir}/${jar.name}-${version.id}-${DSTAMP}.jar"/>
|
||||
<jar basedir="${contrib.output.dir}" destfile="${dist.dir}/${jar.name}-contrib-${version.id}-${DSTAMP}.jar"/>
|
||||
<jar basedir="${scratchpad.output.dir}" destfile="${dist.dir}/${jar.name}-scratchpad-${version.id}-${DSTAMP}.jar"/>
|
||||
<jar basedir="${main.output.dir}" destfile="${dist.dir}/${jar.name}-${version.id}-${DSTAMP}.jar">
|
||||
<manifest>
|
||||
<attribute name="Built-By" value="${user.name}"/>
|
||||
<section name="common">
|
||||
<attribute name="Specification-Title" value="Jakarta POI"/>
|
||||
<attribute name="Specification-Version" value="${version.id}-${DSTAMP}"/>
|
||||
<attribute name="Specification-Vendor" value="Apache"/>
|
||||
<attribute name="Implementation-Title" value="Jakarta POI"/>
|
||||
<attribute name="Implementation-Version" value="${version.id}-${DSTAMP}"/>
|
||||
<attribute name="Implementation-Vendor" value="Apache"/>
|
||||
</section>
|
||||
</manifest>
|
||||
</jar>
|
||||
<jar basedir="${contrib.output.dir}" destfile="${dist.dir}/${jar.name}-contrib-${version.id}-${DSTAMP}.jar">
|
||||
<manifest>
|
||||
<attribute name="Built-By" value="${user.name}"/>
|
||||
<section name="common">
|
||||
<attribute name="Specification-Title" value="Jakarta POI"/>
|
||||
<attribute name="Specification-Version" value="${version.id}-${DSTAMP}"/>
|
||||
<attribute name="Specification-Vendor" value="Apache"/>
|
||||
<attribute name="Implementation-Title" value="Jakarta POI"/>
|
||||
<attribute name="Implementation-Version" value="${version.id}-${DSTAMP}"/>
|
||||
<attribute name="Implementation-Vendor" value="Apache"/>
|
||||
</section>
|
||||
</manifest>
|
||||
</jar>
|
||||
<jar basedir="${scratchpad.output.dir}" destfile="${dist.dir}/${jar.name}-scratchpad-${version.id}-${DSTAMP}.jar">
|
||||
<manifest>
|
||||
<attribute name="Built-By" value="${user.name}"/>
|
||||
<section name="common">
|
||||
<attribute name="Specification-Title" value="Jakarta POI"/>
|
||||
<attribute name="Specification-Version" value="${version.id}-${DSTAMP}"/>
|
||||
<attribute name="Specification-Vendor" value="Apache"/>
|
||||
<attribute name="Implementation-Title" value="Jakarta POI"/>
|
||||
<attribute name="Implementation-Version" value="${version.id}-${DSTAMP}"/>
|
||||
<attribute name="Implementation-Vendor" value="Apache"/>
|
||||
</section>
|
||||
</manifest>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<target name="dist" depends="compile,site,jar" description="Creates the entire distribution into build/dist">
|
||||
|
@ -421,7 +421,7 @@ most likely fail. No big deal. </li>
|
||||
</ul>
|
||||
</section>
|
||||
<section><title>Logging facility</title>
|
||||
<p>POI can dynamically select it's logging implementation. POI tries to
|
||||
<p>POI can dynamically select its logging implementation. POI tries to
|
||||
create a logger using the System property named "org.apache.poi.util.POILogger".
|
||||
Out of the box this can be set to one of three values:
|
||||
</p>
|
||||
@ -477,9 +477,7 @@ yet. When it does something, we'll document it.</p>
|
||||
|
||||
<p>Further effort on HSSF is going to focus on the following major areas: </p>
|
||||
<ul>
|
||||
<li>Performance: A lot of work is going on in CVS and mailing lists for greatly improving the
|
||||
memory efficiency of POI, as well as improving speed. Many approaches have been suggested, and a lot of code as been written.
|
||||
It now needs a lot of testing and bugfixing. </li>
|
||||
<li>Performance: POI currently uses a lot of memory for large sheets.</li>
|
||||
<li>Charts: This is a hard problem, with very little documentation.</li>
|
||||
</ul>
|
||||
<p><link href="../getinvolved/index.html"> So jump in! </link> </p>
|
||||
|
@ -44,6 +44,7 @@
|
||||
<li><link href="#DrawingShapes">Drawing Shapes.</link></li>
|
||||
<li><link href="#StylingShapes">Styling Shapes.</link></li>
|
||||
<li><link href="#Graphics2d">Shapes and Graphics2d.</link></li>
|
||||
<li><link href="#Outlining">Outlining.</link></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section><title>Features</title>
|
||||
@ -901,7 +902,42 @@
|
||||
using the POI logging infrastructure (disabled by default).
|
||||
</p>
|
||||
</section>
|
||||
<anchor id="Outlining"/>
|
||||
<section>
|
||||
<title>Outlining</title>
|
||||
<p>
|
||||
Outlines are great for grouping sections of information
|
||||
together and can be added easily to columns and rows
|
||||
using the POI API. Here's how:
|
||||
</p>
|
||||
<source>
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupRow( 5, 14 );
|
||||
sheet1.groupRow( 7, 14 );
|
||||
sheet1.groupRow( 16, 19 );
|
||||
|
||||
sheet1.groupColumn( (short)4, (short)7 );
|
||||
sheet1.groupColumn( (short)9, (short)12 );
|
||||
sheet1.groupColumn( (short)10, (short)11 );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
</source>
|
||||
<p>
|
||||
To collapse (or expand) an outline use the following calls:
|
||||
</p>
|
||||
<source>
|
||||
sheet1.setRowGroupCollapsed( 7, true );
|
||||
sheet1.setColumnGroupCollapsed( (short)4, true );
|
||||
</source>
|
||||
<p>
|
||||
The row/column you choose should contain an already
|
||||
created group. It can be anywhere within the group.
|
||||
</p>
|
||||
</section>
|
||||
</section>
|
||||
</section>
|
||||
</body>
|
||||
|
@ -12,6 +12,18 @@
|
||||
|
||||
<changes>
|
||||
|
||||
<release version="2.5.1-FINAL" date="29 Feburary 2004">
|
||||
<action dev="POI-DEVELOPERS" type="add" context="All">Outlining support</action>
|
||||
<action dev="POI-DEVELOPERS" type="fix" context="All">27574 - [PATCH] HSSFDateUtil.getExcelDate() is one hour off when DST changes</action>
|
||||
<action dev="POI-DEVELOPERS" type="fix" context="All">26465 - [PATCH] wrong lastrow entry</action>
|
||||
<action dev="POI-DEVELOPERS" type="fix" context="All">28203 - [PATCH] Unable to open read-write excel file including forms</action>
|
||||
</release>
|
||||
|
||||
<release version="2.5-FINAL" date="29 Feburary 2004">
|
||||
<action dev="POI-DEVELOPERS" type="add" context="All">Add support for the Escher file format</action>
|
||||
<action dev="POI-DEVELOPERS" type="fix" context="All">27005 java.lang.IndexOutOfBoundsException during Workbook.cloneSheet()</action>
|
||||
</release>
|
||||
|
||||
<release version="2.0-FINAL" date="26 Janurary 2004">
|
||||
<action dev="POI-DEVELOPERS" type="update" context="All">No changes</action>
|
||||
</release>
|
||||
|
@ -0,0 +1,284 @@
|
||||
|
||||
/* ====================================================================
|
||||
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.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.usermodel.examples;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||
import org.apache.poi.hssf.usermodel.HSSFRow;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Creates outlines.
|
||||
*
|
||||
* @author Glen Stampoultzis (glens at apache.org)
|
||||
*/
|
||||
public class Outlines
|
||||
{
|
||||
private Outlines(){}
|
||||
|
||||
public static void main(String[] args)
|
||||
throws IOException
|
||||
{
|
||||
createCase1( "outline1.xls" );
|
||||
System.out.println( "outline1.xls written. Two expanded groups." );
|
||||
createCase2( "outline2.xls" );
|
||||
System.out.println( "outline2.xls written. Two groups. Inner group collapsed." );
|
||||
createCase3( "outline3.xls" );
|
||||
System.out.println( "outline3.xls written. Two groups. Both collapsed." );
|
||||
createCase4( "outline4.xls" );
|
||||
System.out.println( "outline4.xls written. Two groups. Collapsed then inner group expanded." );
|
||||
createCase5( "outline5.xls" );
|
||||
System.out.println( "outline5.xls written. Two groups. Collapsed then reexpanded." );
|
||||
createCase6( "outline6.xls" );
|
||||
System.out.println( "outline6.xls written. Two groups with matching end points. Second group collapsed." );
|
||||
createCase7( "outline7.xls" );
|
||||
System.out.println( "outline7.xls written. Row outlines." );
|
||||
createCase8( "outline8.xls" );
|
||||
System.out.println( "outline8.xls written. Row outlines. Inner group collapsed." );
|
||||
createCase9( "outline9.xls" );
|
||||
System.out.println( "outline9.xls written. Row outlines. Both collapsed." );
|
||||
createCase10( "outline10.xls" );
|
||||
System.out.println( "outline10.xls written. Row outlines. Collapsed then inner group expanded." );
|
||||
createCase11( "outline11.xls" );
|
||||
System.out.println( "outline11.xls written. Row outlines. Collapsed then expanded." );
|
||||
createCase12( "outline12.xls" );
|
||||
System.out.println( "outline12.xls written. Row outlines. Two row groups with matching end points. Second group collapsed." );
|
||||
createCase13( "outline13.xls" );
|
||||
System.out.println( "outline13.xls written. Mixed bag." );
|
||||
}
|
||||
|
||||
private static void createCase1( String filename ) throws IOException{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupColumn( (short)4, (short)7 );
|
||||
|
||||
for (int row = 0; row < 200; row++)
|
||||
{
|
||||
HSSFRow r = sheet1.createRow( row );
|
||||
for (int column = 0; column < 200; column++)
|
||||
{
|
||||
HSSFCell c = r.createCell( (short) column );
|
||||
c.setCellValue( column );
|
||||
}
|
||||
}
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
private static void createCase2( String filename ) throws IOException{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupColumn( (short)2, (short)10 );
|
||||
sheet1.groupColumn( (short)4, (short)7 );
|
||||
sheet1.setColumnGroupCollapsed( (short)4, true );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
private static void createCase3( String filename ) throws IOException{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupColumn( (short)2, (short)10 );
|
||||
sheet1.groupColumn( (short)4, (short)7 );
|
||||
sheet1.setColumnGroupCollapsed( (short)4, true );
|
||||
sheet1.setColumnGroupCollapsed( (short)2, true );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
private static void createCase4( String filename ) throws IOException{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupColumn( (short)2, (short)10 );
|
||||
sheet1.groupColumn( (short)4, (short)7 );
|
||||
sheet1.setColumnGroupCollapsed( (short)4, true );
|
||||
sheet1.setColumnGroupCollapsed( (short)2, true );
|
||||
|
||||
sheet1.setColumnGroupCollapsed( (short)4, false );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
private static void createCase5( String filename ) throws IOException{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupColumn( (short)2, (short)10 );
|
||||
sheet1.groupColumn( (short)4, (short)7 );
|
||||
sheet1.setColumnGroupCollapsed( (short)4, true );
|
||||
sheet1.setColumnGroupCollapsed( (short)2, true );
|
||||
|
||||
sheet1.setColumnGroupCollapsed( (short)4, false );
|
||||
sheet1.setColumnGroupCollapsed( (short)3, false );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
private static void createCase6( String filename ) throws IOException{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupColumn( (short)2, (short)10 );
|
||||
sheet1.groupColumn( (short)4, (short)10 );
|
||||
sheet1.setColumnGroupCollapsed( (short)4, true );
|
||||
sheet1.setColumnGroupCollapsed( (short)2, true );
|
||||
|
||||
sheet1.setColumnGroupCollapsed( (short)3, false );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
private static void createCase7( String filename )
|
||||
throws IOException
|
||||
{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupRow( 5, 14 );
|
||||
sheet1.groupRow( 7, 10 );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
private static void createCase8( String filename )
|
||||
throws IOException
|
||||
{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupRow( 5, 14 );
|
||||
sheet1.groupRow( 7, 10 );
|
||||
sheet1.setRowGroupCollapsed( 7, true );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
private static void createCase9( String filename )
|
||||
throws IOException
|
||||
{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupRow( 5, 14 );
|
||||
sheet1.groupRow( 7, 10 );
|
||||
sheet1.setRowGroupCollapsed( 7, true );
|
||||
sheet1.setRowGroupCollapsed( 5, true );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
|
||||
private static void createCase10( String filename )
|
||||
throws IOException
|
||||
{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupRow( 5, 14 );
|
||||
sheet1.groupRow( 7, 10 );
|
||||
sheet1.setRowGroupCollapsed( 7, true );
|
||||
sheet1.setRowGroupCollapsed( 5, true );
|
||||
sheet1.setRowGroupCollapsed( 8, false );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
private static void createCase11( String filename )
|
||||
throws IOException
|
||||
{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupRow( 5, 14 );
|
||||
sheet1.groupRow( 7, 10 );
|
||||
sheet1.setRowGroupCollapsed( 7, true );
|
||||
sheet1.setRowGroupCollapsed( 5, true );
|
||||
sheet1.setRowGroupCollapsed( 8, false );
|
||||
sheet1.setRowGroupCollapsed( 14, false );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
private static void createCase12( String filename )
|
||||
throws IOException
|
||||
{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupRow( 5, 14 );
|
||||
sheet1.groupRow( 7, 14 );
|
||||
sheet1.setRowGroupCollapsed( 7, true );
|
||||
sheet1.setRowGroupCollapsed( 5, true );
|
||||
sheet1.setRowGroupCollapsed( 6, false );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
private static void createCase13( String filename )
|
||||
throws IOException
|
||||
{
|
||||
HSSFWorkbook wb = new HSSFWorkbook();
|
||||
HSSFSheet sheet1 = wb.createSheet("new sheet");
|
||||
|
||||
sheet1.groupRow( 5, 14 );
|
||||
sheet1.groupRow( 7, 14 );
|
||||
sheet1.groupRow( 16, 19 );
|
||||
|
||||
sheet1.groupColumn( (short)4, (short)7 );
|
||||
sheet1.groupColumn( (short)9, (short)12 );
|
||||
sheet1.groupColumn( (short)10, (short)11 );
|
||||
|
||||
FileOutputStream fileOut = new FileOutputStream(filename);
|
||||
wb.write(fileOut);
|
||||
fileOut.close();
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -44,6 +44,8 @@ public class ReadWriteWorkbook
|
||||
HSSFWorkbook wb = new HSSFWorkbook(fs);
|
||||
HSSFSheet sheet = wb.getSheetAt(0);
|
||||
HSSFRow row = sheet.getRow(2);
|
||||
if (row == null)
|
||||
row = sheet.createRow(2);
|
||||
HSSFCell cell = row.getCell((short)3);
|
||||
if (cell == null)
|
||||
cell = row.createCell((short)3);
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
@ -91,7 +90,7 @@ public class BiffViewer {
|
||||
public static Record[] createRecords(InputStream in, boolean dump)
|
||||
throws RecordFormatException {
|
||||
ArrayList records = new ArrayList();
|
||||
//Record last_record = null;
|
||||
// Record last_record = null;
|
||||
int loc = 0;
|
||||
|
||||
RecordDetails activeRecord = null;
|
||||
@ -103,8 +102,6 @@ public class BiffViewer {
|
||||
do {
|
||||
rectype = LittleEndian.readShort(in);
|
||||
int startloc = loc;
|
||||
// System.out.println("============================================");
|
||||
// System.out.println("Offset 0x" + Integer.toHexString(loc) + " (" + loc + ")");
|
||||
loc += 2;
|
||||
if (rectype != 0) {
|
||||
short recsize = LittleEndian.readShort(in);
|
||||
@ -148,8 +145,8 @@ public class BiffViewer {
|
||||
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) {
|
||||
@ -227,14 +224,11 @@ public class BiffViewer {
|
||||
* up non-debug operations.
|
||||
*
|
||||
*/
|
||||
|
||||
private static Record createRecord( short rectype, short size,
|
||||
byte[] data )
|
||||
{
|
||||
Record retval = null;
|
||||
Record[] realretval = null;
|
||||
|
||||
// int irectype = rectype;
|
||||
switch ( rectype )
|
||||
{
|
||||
|
||||
@ -705,3 +699,4 @@ public class BiffViewer {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,174 +0,0 @@
|
||||
println
|
||||
filename
|
||||
short
|
||||
stream
|
||||
Record
|
||||
equals
|
||||
length
|
||||
RKRecord
|
||||
FileInputStream
|
||||
InterfaceEndRecord
|
||||
FooterRecord
|
||||
toString
|
||||
BackupRecord
|
||||
static
|
||||
RecordFormatException
|
||||
toArray
|
||||
ArrayList
|
||||
SeriesRecord
|
||||
records
|
||||
processContinueRecord
|
||||
read
|
||||
VCenterRecord
|
||||
readShort
|
||||
run
|
||||
ColumnInfoRecord
|
||||
Exception
|
||||
io
|
||||
SSTRecord
|
||||
in
|
||||
printStackTrace
|
||||
GridsetRecord
|
||||
if
|
||||
PrintSetupRecord
|
||||
null
|
||||
BlankRecord
|
||||
add
|
||||
UnknownRecord
|
||||
DeltaRecord
|
||||
CalcCountRecord
|
||||
HideObjRecord
|
||||
RefreshAllRecord
|
||||
void
|
||||
BookBoolRecord
|
||||
FileOutputStream
|
||||
POIFSFileSystem
|
||||
size
|
||||
else
|
||||
int
|
||||
args
|
||||
record
|
||||
true
|
||||
public
|
||||
this
|
||||
try
|
||||
ExtSSTRecord
|
||||
hssf
|
||||
DefaultColWidthRecord
|
||||
default
|
||||
filesystem
|
||||
EndRecord
|
||||
fs
|
||||
main
|
||||
poifs
|
||||
print
|
||||
MMSRecord
|
||||
InputStream
|
||||
createRecord
|
||||
ContinueRecord
|
||||
throw
|
||||
class
|
||||
switch
|
||||
case
|
||||
PasswordRev4Record
|
||||
new
|
||||
util
|
||||
LabelRecord
|
||||
while
|
||||
net
|
||||
ByteArrayInputStream
|
||||
break
|
||||
UseSelFSRecord
|
||||
RowRecord
|
||||
import
|
||||
CalcModeRecord
|
||||
BiffViewer
|
||||
HeaderRecord
|
||||
WindowProtectRecord
|
||||
PasswordRecord
|
||||
last_record
|
||||
HexDump
|
||||
CodepageRecord
|
||||
dev
|
||||
BoundSheetRecord
|
||||
RefModeRecord
|
||||
GutsRecord
|
||||
do
|
||||
WindowOneRecord
|
||||
DSFRecord
|
||||
viewer
|
||||
data
|
||||
PrintHeadersRecord
|
||||
available
|
||||
System
|
||||
IOException
|
||||
LittleEndian
|
||||
IterationRecord
|
||||
NumberRecord
|
||||
StyleRecord
|
||||
sid
|
||||
FontRecord
|
||||
WSBoolRecord
|
||||
out
|
||||
long
|
||||
poi
|
||||
k
|
||||
SelectionRecord
|
||||
PrecisionRecord
|
||||
usermodel
|
||||
String
|
||||
e
|
||||
EOFRecord
|
||||
rectype
|
||||
SaveRecalcRecord
|
||||
WindowTwoRecord
|
||||
catch
|
||||
DimensionsRecord
|
||||
WriteAccessRecord
|
||||
loc
|
||||
package
|
||||
MulBlankRecord
|
||||
InterfaceHdrRecord
|
||||
java
|
||||
DBCellRecord
|
||||
realretval
|
||||
for
|
||||
private
|
||||
MergeCellsRecord
|
||||
sourceforge
|
||||
BOFRecord
|
||||
serialize
|
||||
setDump
|
||||
retval
|
||||
TabIdRecord
|
||||
throws
|
||||
MulRKRecord
|
||||
ProtectionRev4Record
|
||||
createRecords
|
||||
recsize
|
||||
DefaultRowHeightRecord
|
||||
DateWindow1904Record
|
||||
LabelSSTRecord
|
||||
ChartFormatRecord
|
||||
CountryRecord
|
||||
ChartRecord
|
||||
ProtectRecord
|
||||
boolean
|
||||
ExtendedFormatRecord
|
||||
PrintGridlinesRecord
|
||||
FormatRecord
|
||||
createDocumentInputStream
|
||||
HCenterRecord
|
||||
FnGroupCountRecord
|
||||
BeginRecord
|
||||
toHexString
|
||||
offset
|
||||
IndexRecord
|
||||
model
|
||||
return
|
||||
lr
|
||||
recs
|
||||
Integer
|
||||
byte
|
||||
dump
|
||||
instanceof
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
@ -15,7 +14,6 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.dev;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
|
@ -1,116 +0,0 @@
|
||||
cell
|
||||
println
|
||||
addSSTString
|
||||
CELL_TYPE_NUMERIC
|
||||
write
|
||||
getString
|
||||
getSSTString
|
||||
Record
|
||||
equals
|
||||
length
|
||||
FileInputStream
|
||||
static
|
||||
getRow
|
||||
getSid
|
||||
sheetnum
|
||||
run
|
||||
eventmodel
|
||||
io
|
||||
SSTRecord
|
||||
CELL_TYPE_STRING
|
||||
printStackTrace
|
||||
if
|
||||
null
|
||||
recordHandler
|
||||
fin
|
||||
void
|
||||
din
|
||||
FileOutputStream
|
||||
getType
|
||||
POIFSFileSystem
|
||||
getNumUniqueStrings
|
||||
else
|
||||
int
|
||||
args
|
||||
processEvents
|
||||
record
|
||||
HSSFWorkbook
|
||||
public
|
||||
createRow
|
||||
this
|
||||
rowrec
|
||||
try
|
||||
close
|
||||
getSSTIndex
|
||||
hssf
|
||||
filesystem
|
||||
main
|
||||
poifs
|
||||
setInputFile
|
||||
InputStream
|
||||
req
|
||||
switch
|
||||
class
|
||||
case
|
||||
bsr
|
||||
numrec
|
||||
new
|
||||
break
|
||||
net
|
||||
setOutputFile
|
||||
RowRecord
|
||||
HSSFRow
|
||||
HSSFRequest
|
||||
HSSFEventFactory
|
||||
EFHSSF
|
||||
import
|
||||
HSSFCell
|
||||
TYPE_WORKSHEET
|
||||
outfile
|
||||
dev
|
||||
BoundSheetRecord
|
||||
setCellValue
|
||||
viewer
|
||||
System
|
||||
createCell
|
||||
row
|
||||
efhssf
|
||||
IOException
|
||||
infile
|
||||
NumberRecord
|
||||
implements
|
||||
getValue
|
||||
sid
|
||||
TYPE_WORKBOOK
|
||||
cursheet
|
||||
out
|
||||
poi
|
||||
k
|
||||
createSheet
|
||||
usermodel
|
||||
String
|
||||
getSheetAt
|
||||
e
|
||||
processRecord
|
||||
catch
|
||||
package
|
||||
java
|
||||
for
|
||||
HSSFSheet
|
||||
sourceforge
|
||||
BOFRecord
|
||||
fout
|
||||
EFHSSFListener
|
||||
HSSFListener
|
||||
throws
|
||||
bof
|
||||
factory
|
||||
LabelSSTRecord
|
||||
sstrec
|
||||
addListenerForAllRecords
|
||||
createDocumentInputStream
|
||||
workbook
|
||||
lrec
|
||||
getSheetname
|
||||
getRowNumber
|
||||
getColumn
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 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.
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
@ -18,13 +17,15 @@
|
||||
|
||||
package org.apache.poi.hssf.dev;
|
||||
|
||||
import org.apache.poi.hssf.usermodel.*;
|
||||
import org.apache.poi.hssf.util.Region;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
import org.apache.poi.hssf.record.*;
|
||||
import org.apache.poi.hssf.usermodel.*;
|
||||
import org.apache.poi.hssf.util.*;
|
||||
|
||||
/**
|
||||
* File for HSSF testing/examples
|
||||
@ -38,9 +39,11 @@ import java.io.IOException;
|
||||
|
||||
public class HSSF
|
||||
{
|
||||
private String filename = null;
|
||||
|
||||
// private POIFSFileSystem fs = null;
|
||||
// private InputStream stream = null;
|
||||
// private Record[] records = null;
|
||||
private InputStream stream = null;
|
||||
private Record[] records = null;
|
||||
protected HSSFWorkbook hssfworkbook = null;
|
||||
|
||||
/**
|
||||
@ -57,6 +60,7 @@ public class HSSF
|
||||
public HSSF(String filename)
|
||||
throws IOException
|
||||
{
|
||||
this.filename = filename;
|
||||
POIFSFileSystem fs =
|
||||
new POIFSFileSystem(new FileInputStream(filename));
|
||||
|
||||
@ -94,13 +98,13 @@ public class HSSF
|
||||
|
||||
f.setFontHeightInPoints(( short ) 12);
|
||||
f.setColor(( short ) 0xA);
|
||||
f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
|
||||
f.setBoldweight(f.BOLDWEIGHT_BOLD);
|
||||
f2.setFontHeightInPoints(( short ) 10);
|
||||
f2.setColor(( short ) 0xf);
|
||||
f2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
|
||||
f2.setBoldweight(f2.BOLDWEIGHT_BOLD);
|
||||
cs.setFont(f);
|
||||
cs.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
|
||||
cs2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
|
||||
cs2.setBorderBottom(cs2.BORDER_THIN);
|
||||
cs2.setFillPattern(( short ) 1); // fill w fg
|
||||
cs2.setFillForegroundColor(( short ) 0xA);
|
||||
cs2.setFont(f2);
|
||||
@ -116,7 +120,7 @@ public class HSSF
|
||||
// r.setRowNum(( short ) rownum);
|
||||
for (short cellnum = ( short ) 0; cellnum < 50; cellnum += 2)
|
||||
{
|
||||
c = r.createCell(cellnum);
|
||||
c = r.createCell(cellnum, HSSFCell.CELL_TYPE_NUMERIC);
|
||||
c.setCellValue(rownum * 10000 + cellnum
|
||||
+ ((( double ) rownum / 1000)
|
||||
+ (( double ) cellnum / 10000)));
|
||||
@ -124,7 +128,8 @@ public class HSSF
|
||||
{
|
||||
c.setCellStyle(cs);
|
||||
}
|
||||
c = r.createCell(( short ) (cellnum + 1));
|
||||
c = r.createCell(( short ) (cellnum + 1),
|
||||
HSSFCell.CELL_TYPE_STRING);
|
||||
c.setCellValue("TEST");
|
||||
s.setColumnWidth(( short ) (cellnum + 1),
|
||||
( short ) ((50 * 8) / (( double ) 1 / 20)));
|
||||
@ -139,11 +144,10 @@ public class HSSF
|
||||
rownum++;
|
||||
rownum++;
|
||||
r = s.createRow(rownum);
|
||||
cs3.setBorderBottom(HSSFCellStyle.BORDER_THICK);
|
||||
cs3.setBorderBottom(cs3.BORDER_THICK);
|
||||
for (short cellnum = ( short ) 0; cellnum < 50; cellnum++)
|
||||
{
|
||||
c = r.createCell(cellnum);
|
||||
// c = r.createCell(cellnum, HSSFCell.CELL_TYPE_BLANK);
|
||||
c = r.createCell(cellnum, HSSFCell.CELL_TYPE_BLANK);
|
||||
|
||||
// c.setCellValue(0);
|
||||
c.setCellStyle(cs3);
|
||||
@ -164,6 +168,30 @@ public class HSSF
|
||||
out.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor HSSF - takes in file - attempts to read it then reconstruct it
|
||||
*
|
||||
*
|
||||
* @param infile
|
||||
* @param outfile
|
||||
* @param write
|
||||
*
|
||||
* @exception IOException
|
||||
*
|
||||
*/
|
||||
|
||||
public HSSF(String infile, String outfile, boolean write)
|
||||
throws IOException
|
||||
{
|
||||
this.filename = filename;
|
||||
POIFSFileSystem fs =
|
||||
new POIFSFileSystem(new FileInputStream(filename));
|
||||
|
||||
hssfworkbook = new HSSFWorkbook(fs);
|
||||
|
||||
// HSSFWorkbook book = hssfstream.getWorkbook();
|
||||
}
|
||||
|
||||
/**
|
||||
* Method main
|
||||
*
|
||||
@ -256,7 +284,7 @@ public class HSSF
|
||||
try
|
||||
{
|
||||
long time = System.currentTimeMillis();
|
||||
new HSSF(args[ 0 ], true);
|
||||
HSSF hssf = new HSSF(args[ 0 ], true);
|
||||
|
||||
System.out
|
||||
.println("" + (System.currentTimeMillis() - time)
|
||||
|
@ -16,5 +16,6 @@ For overviews, tutorials, examples, guides, and tool documentation, please see:
|
||||
</ul>
|
||||
|
||||
<!-- Put @see and @since tags down here. -->
|
||||
@see org.apache.poi.hssf
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -26,9 +25,9 @@ import org.apache.poi.hssf.eventusermodel.HSSFUserException;
|
||||
* a listener supporting this interface and register it with the HSSFRequest (associating
|
||||
* it with Record SID's).
|
||||
*
|
||||
* @see HSSFEventFactory
|
||||
* @see HSSFRequest
|
||||
* @see AbortableHSSFListener
|
||||
* @see org.apache.poi.hssf.eventmodel.HSSFEventFactory
|
||||
* @see org.apache.poi.hssf.eventmodel.HSSFRequest
|
||||
* @see org.apache.poi.hssf.HSSFUserException
|
||||
*
|
||||
* @author Carey Sublette (careysub@earthling.net)
|
||||
*
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,7 +15,6 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.eventusermodel;
|
||||
|
||||
import java.io.InputStream;
|
||||
@ -127,6 +126,7 @@ public class HSSFEventFactory
|
||||
* @see org.apache.poi.poifs.filesystem.POIFSFileSystem#createDocumentInputStream(String)
|
||||
* @param req an Instance of HSSFRequest which has your registered listeners
|
||||
* @param in a DocumentInputStream obtained from POIFS's POIFSFileSystem object
|
||||
* @param in a DocumentInputStream obtained from POIFS's POIFSFileSystem object
|
||||
* @return numeric user-specified result code.
|
||||
*/
|
||||
|
||||
|
@ -15,7 +15,6 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.eventusermodel;
|
||||
|
||||
import org.apache.poi.hssf.record.Record;
|
||||
@ -25,8 +24,8 @@ import org.apache.poi.hssf.record.Record;
|
||||
* a listener supporting this interface and register it with the HSSFRequest (associating
|
||||
* it with Record SID's).
|
||||
*
|
||||
* @see org.apache.poi.hssf.eventusermodel.HSSFEventFactory
|
||||
* @see org.apache.poi.hssf.eventusermodel.HSSFRequest
|
||||
* @see org.apache.poi.hssf.eventmodel.HSSFEventFactory
|
||||
* @see org.apache.poi.hssf.eventmodel.HSSFRequest
|
||||
* @author acoliver@apache.org
|
||||
*/
|
||||
|
||||
|
@ -29,10 +29,10 @@ import org.apache.poi.hssf.record.RecordFactory;
|
||||
* An HSSFRequest object should be constructed registering an instance or multiple
|
||||
* instances of HSSFListener with each Record.sid you wish to listen for.
|
||||
*
|
||||
* @see org.apache.poi.hssf.eventusermodel.HSSFEventFactory
|
||||
* @see org.apache.poi.hssf.eventusermodel.HSSFRequest
|
||||
* @see org.apache.poi.hssf.eventmodel.HSSFEventFactory
|
||||
* @see org.apache.poi.hssf.eventmodel.HSSFListener
|
||||
* @see org.apache.poi.hssf.dev.EFHSSF
|
||||
* @see org.apache.poi.hssf.eventusermodel.HSSFUserException
|
||||
* @see org.apache.poi.hssf.HSSFUserException
|
||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||
* @author Carey Sublette (careysub@earthling.net)
|
||||
*/
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 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.
|
||||
|
@ -1,3 +1,19 @@
|
||||
/* ====================================================================
|
||||
Copyright 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.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.model;
|
||||
|
||||
import org.apache.poi.ddf.EscherRecord;
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 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.
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 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.
|
||||
@ -15,6 +14,7 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.model;
|
||||
|
||||
import org.apache.poi.ddf.*;
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 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.
|
||||
@ -15,6 +14,7 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.model;
|
||||
|
||||
/**
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 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.
|
||||
@ -15,6 +14,7 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.model;
|
||||
|
||||
import org.apache.poi.ddf.*;
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 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.
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
@ -15,6 +14,7 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.model;
|
||||
|
||||
import org.apache.poi.ddf.*;
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
@ -21,6 +20,7 @@ package org.apache.poi.hssf.model;
|
||||
import org.apache.poi.hssf.record.*;
|
||||
import org.apache.poi.hssf.util.HSSFColor;
|
||||
import org.apache.poi.hssf.util.SheetReferences;
|
||||
import org.apache.poi.hssf.usermodel.HSSFSheet;
|
||||
import org.apache.poi.util.POILogFactory;
|
||||
import org.apache.poi.util.POILogger;
|
||||
import org.apache.poi.ddf.*;
|
||||
@ -55,7 +55,8 @@ import java.util.Locale;
|
||||
* @version 1.0-pre
|
||||
*/
|
||||
|
||||
public class Workbook implements Model {
|
||||
public class Workbook implements Model
|
||||
{
|
||||
private static final int DEBUG = POILogger.DEBUG;
|
||||
|
||||
// public static Workbook currentBook = null;
|
||||
@ -674,30 +675,20 @@ public class Workbook implements Model {
|
||||
*
|
||||
* @return byte array containing the HSSF-only portions of the POIFS file.
|
||||
*/
|
||||
// GJS: Not used by system
|
||||
// GJS: Not used so why keep it.
|
||||
// public byte [] serialize() {
|
||||
// log.log(DEBUG, "Serializing Workbook!");
|
||||
// byte[] retval = null;
|
||||
//
|
||||
// // ArrayList bytes = new ArrayList(records.size());
|
||||
//// ArrayList bytes = new ArrayList(records.size());
|
||||
// int arraysize = getSize();
|
||||
// int pos = 0;
|
||||
//
|
||||
// // for (int k = 0; k < records.size(); k++)
|
||||
// // {
|
||||
// // bytes.add((( Record ) records.get(k)).serialize());
|
||||
// // }
|
||||
// // for (int k = 0; k < bytes.size(); k++)
|
||||
// // {
|
||||
// // arraysize += (( byte [] ) bytes.get(k)).length;
|
||||
// // }
|
||||
// retval = new byte[ arraysize ];
|
||||
// for (int k = 0; k < records.size(); k++) {
|
||||
//
|
||||
// // byte[] rec = (( byte [] ) bytes.get(k));
|
||||
// // System.arraycopy(rec, 0, retval, pos, rec.length);
|
||||
// Record record = records.get(k);
|
||||
// // Let's skip RECALCID records, as they are only use for optimization
|
||||
//// Let's skip RECALCID records, as they are only use for optimization
|
||||
// if(record.getSid() != RecalcIdRecord.sid || ((RecalcIdRecord)record).isNeeded()) {
|
||||
// pos += record.serialize(pos, retval); // rec.length;
|
||||
// }
|
||||
@ -767,6 +758,7 @@ public class Workbook implements Model {
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* creates the BOF record
|
||||
* @see org.apache.poi.hssf.record.BOFRecord
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 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.
|
||||
@ -16,11 +15,8 @@
|
||||
==================================================================== */
|
||||
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record;
|
||||
|
||||
|
||||
|
||||
import org.apache.poi.ddf.DefaultEscherRecordFactory;
|
||||
import org.apache.poi.ddf.EscherRecord;
|
||||
import org.apache.poi.ddf.EscherRecordFactory;
|
||||
@ -36,6 +32,7 @@ import java.util.List;
|
||||
* must be subclassed for maximum benefit.
|
||||
*
|
||||
* @author Glen Stampoultzis (glens at apache.org)
|
||||
* @author Michael Zalewski (zalewski at optonline.net)
|
||||
*/
|
||||
public abstract class AbstractEscherHolderRecord
|
||||
extends Record
|
||||
@ -122,13 +119,13 @@ public abstract class AbstractEscherHolderRecord
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
|
||||
final String nl = System.getProperty("line.separator");
|
||||
buffer.append("[" + getRecordName() + "]" + nl);
|
||||
buffer.append('[' + getRecordName() + ']' + nl);
|
||||
for ( Iterator iterator = escherRecords.iterator(); iterator.hasNext(); )
|
||||
{
|
||||
EscherRecord r = (EscherRecord) iterator.next();
|
||||
buffer.append(r.toString());
|
||||
}
|
||||
buffer.append("[/" + getRecordName() + "]" + nl);
|
||||
buffer.append("[/" + getRecordName() + ']' + nl);
|
||||
|
||||
return buffer.toString();
|
||||
}
|
||||
@ -137,28 +134,48 @@ public abstract class AbstractEscherHolderRecord
|
||||
|
||||
public int serialize(int offset, byte[] data)
|
||||
{
|
||||
if (escherRecords.size() == 0 && rawData != null)
|
||||
LittleEndian.putShort( data, 0 + offset, getSid() );
|
||||
LittleEndian.putShort( data, 2 + offset, (short) ( getRecordSize() - 4 ) );
|
||||
if ( escherRecords.size() == 0 && rawData != null )
|
||||
{
|
||||
System.arraycopy( rawData, 0, data, offset, rawData.length);
|
||||
return rawData.length;
|
||||
System.arraycopy( rawData, 0, data, offset + 4, rawData.length );
|
||||
}
|
||||
else
|
||||
{
|
||||
collapseShapeInformation();
|
||||
|
||||
LittleEndian.putShort(data, 0 + offset, getSid());
|
||||
LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4));
|
||||
|
||||
int pos = offset + 4;
|
||||
for ( Iterator iterator = escherRecords.iterator(); iterator.hasNext(); )
|
||||
{
|
||||
EscherRecord r = (EscherRecord) iterator.next();
|
||||
pos += r.serialize(pos, data, new NullEscherSerializationListener() );
|
||||
pos += r.serialize( pos, data, new NullEscherSerializationListener() );
|
||||
}
|
||||
}
|
||||
|
||||
return getRecordSize();
|
||||
}
|
||||
}
|
||||
|
||||
// public int serialize(int offset, byte[] data)
|
||||
// {
|
||||
// if (escherRecords.size() == 0 && rawData != null)
|
||||
// {
|
||||
// System.arraycopy( rawData, 0, data, offset, rawData.length);
|
||||
// return rawData.length;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// collapseShapeInformation();
|
||||
//
|
||||
// LittleEndian.putShort(data, 0 + offset, getSid());
|
||||
// LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4));
|
||||
//
|
||||
// int pos = offset + 4;
|
||||
// for ( Iterator iterator = escherRecords.iterator(); iterator.hasNext(); )
|
||||
// {
|
||||
// EscherRecord r = (EscherRecord) iterator.next();
|
||||
// pos += r.serialize(pos, data, new NullEscherSerializationListener() );
|
||||
// }
|
||||
//
|
||||
// return getRecordSize();
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* Size of record (including 4 byte header)
|
||||
@ -167,12 +184,10 @@ public abstract class AbstractEscherHolderRecord
|
||||
{
|
||||
if (escherRecords.size() == 0 && rawData != null)
|
||||
{
|
||||
return rawData.length;
|
||||
return rawData.length + 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
collapseShapeInformation();
|
||||
|
||||
int size = 4;
|
||||
for ( Iterator iterator = escherRecords.iterator(); iterator.hasNext(); )
|
||||
{
|
||||
@ -183,10 +198,29 @@ public abstract class AbstractEscherHolderRecord
|
||||
}
|
||||
}
|
||||
|
||||
private void collapseShapeInformation()
|
||||
{
|
||||
|
||||
}
|
||||
//
|
||||
// /**
|
||||
// * Size of record (including 4 byte header)
|
||||
// */
|
||||
// public int getRecordSize()
|
||||
// {
|
||||
// if (escherRecords.size() == 0 && rawData != null)
|
||||
// {
|
||||
// return rawData.length;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// collapseShapeInformation();
|
||||
//
|
||||
// int size = 4;
|
||||
// for ( Iterator iterator = escherRecords.iterator(); iterator.hasNext(); )
|
||||
// {
|
||||
// EscherRecord r = (EscherRecord) iterator.next();
|
||||
// size += r.getRecordSize();
|
||||
// }
|
||||
// return size;
|
||||
// }
|
||||
// }
|
||||
|
||||
public abstract short getSid();
|
||||
|
||||
|
@ -137,7 +137,7 @@ public class BOFRecord
|
||||
/**
|
||||
* Version number - for BIFF8 should be 0x06
|
||||
* @see #VERSION
|
||||
* @param version to be set
|
||||
* @param short version to be set
|
||||
*/
|
||||
|
||||
public void setVersion(short version)
|
||||
@ -153,7 +153,7 @@ public class BOFRecord
|
||||
* @see #TYPE_CHART
|
||||
* @see #TYPE_EXCEL_4_MACRO
|
||||
* @see #TYPE_WORKSPACE_FILE
|
||||
* @param type to be set
|
||||
* @param short type to be set
|
||||
*/
|
||||
|
||||
public void setType(short type)
|
||||
@ -164,7 +164,7 @@ public class BOFRecord
|
||||
/**
|
||||
* build that wrote this file
|
||||
* @see #BUILD
|
||||
* @param build number to set
|
||||
* @param short build number to set
|
||||
*/
|
||||
|
||||
public void setBuild(short build)
|
||||
@ -175,7 +175,7 @@ public class BOFRecord
|
||||
/**
|
||||
* Year of the build that wrote this file
|
||||
* @see #BUILD_YEAR
|
||||
* @param year year to set
|
||||
* @param short build year to set
|
||||
*/
|
||||
|
||||
public void setBuildYear(short year)
|
||||
@ -186,7 +186,7 @@ public class BOFRecord
|
||||
/**
|
||||
* set the history bit mask (not very useful)
|
||||
* @see #HISTORY_MASK
|
||||
* @param bitmask to set for the history
|
||||
* @param int bitmask to set for the history
|
||||
*/
|
||||
|
||||
public void setHistoryBitMask(int bitmask)
|
||||
@ -198,7 +198,7 @@ public class BOFRecord
|
||||
* set the minimum version required to read this file
|
||||
*
|
||||
* @see #VERSION
|
||||
* @param version to set
|
||||
* @param int version to set
|
||||
*/
|
||||
|
||||
public void setRequiredVersion(int version)
|
||||
|
@ -82,7 +82,7 @@ public class BookBoolRecord
|
||||
/**
|
||||
* set the save ext links flag
|
||||
*
|
||||
* @param flag (0/1 -off/on)
|
||||
* @param short flag (0/1 -off/on)
|
||||
*/
|
||||
|
||||
public void setSaveLinkValues(short flag)
|
||||
|
@ -148,6 +148,7 @@ public class BoolErrRecord
|
||||
throw new RuntimeException("Error Value can only be 0,7,15,23,29,36 or 42. It cannot be "+value);
|
||||
}
|
||||
}
|
||||
|
||||
//public short getRow()
|
||||
public int getRow()
|
||||
{
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -16,25 +15,24 @@
|
||||
==================================================================== */
|
||||
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record;
|
||||
|
||||
|
||||
import org.apache.poi.util.*;
|
||||
|
||||
|
||||
/**
|
||||
* Record for the bottom margin.
|
||||
* NOTE: This source was automatically generated.
|
||||
*
|
||||
* @author Shawn Laubach (slaubach at apache dot org)
|
||||
*/
|
||||
|
||||
public class BottomMarginRecord
|
||||
extends Record implements Margin
|
||||
{
|
||||
public final static short sid = 0x29;
|
||||
private double field_1_margin;
|
||||
|
||||
|
||||
public BottomMarginRecord()
|
||||
{
|
||||
|
||||
@ -48,10 +46,9 @@ public class BottomMarginRecord
|
||||
* @param size size the size of the data area of the record
|
||||
* @param data data of the record (should not contain sid/len)
|
||||
*/
|
||||
|
||||
public BottomMarginRecord(short id, short size, byte [] data)
|
||||
public BottomMarginRecord( short id, short size, byte[] data )
|
||||
{
|
||||
super(id, size, data);
|
||||
super( id, size, data );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -63,10 +60,9 @@ public class BottomMarginRecord
|
||||
* @param data data of the record (should not contain sid/len)
|
||||
* @param offset of the record's data
|
||||
*/
|
||||
|
||||
public BottomMarginRecord(short id, short size, byte [] data, int offset)
|
||||
public BottomMarginRecord( short id, short size, byte[] data, int offset )
|
||||
{
|
||||
super(id, size, data, offset);
|
||||
super( id, size, data, offset );
|
||||
}
|
||||
|
||||
/**
|
||||
@ -74,40 +70,34 @@ public class BottomMarginRecord
|
||||
*
|
||||
* @param id the expected sid.
|
||||
*/
|
||||
protected void validateSid(short id)
|
||||
protected void validateSid( short id )
|
||||
{
|
||||
if (id != sid)
|
||||
if ( id != sid )
|
||||
{
|
||||
throw new RecordFormatException("Not a BottomMargin record");
|
||||
throw new RecordFormatException( "Not a BottomMargin record" );
|
||||
}
|
||||
}
|
||||
|
||||
protected void fillFields(byte [] data, short size, int offset)
|
||||
protected void fillFields( byte[] data, short size, int offset )
|
||||
{
|
||||
field_1_margin = LittleEndian.getDouble(data, 0x0 + offset);
|
||||
|
||||
field_1_margin = LittleEndian.getDouble( data, 0x0 + offset );
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
|
||||
buffer.append("[BottomMargin]\n");
|
||||
|
||||
buffer.append(" .margin = ")
|
||||
.append(" (").append(getMargin()).append(" )\n");
|
||||
|
||||
buffer.append("[/BottomMargin]\n");
|
||||
buffer.append( "[BottomMargin]\n" );
|
||||
buffer.append( " .margin = " )
|
||||
.append( " (" ).append( getMargin() ).append( " )\n" );
|
||||
buffer.append( "[/BottomMargin]\n" );
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public int serialize(int offset, byte[] data)
|
||||
public int serialize( int offset, byte[] data )
|
||||
{
|
||||
LittleEndian.putShort(data, 0 + offset, sid);
|
||||
LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4));
|
||||
|
||||
LittleEndian.putDouble(data, 4 + offset, field_1_margin);
|
||||
|
||||
LittleEndian.putShort( data, 0 + offset, sid );
|
||||
LittleEndian.putShort( data, 2 + offset, (short) ( getRecordSize() - 4 ) );
|
||||
LittleEndian.putDouble( data, 4 + offset, field_1_margin );
|
||||
return getRecordSize();
|
||||
}
|
||||
|
||||
@ -124,7 +114,6 @@ public class BottomMarginRecord
|
||||
return this.sid;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the margin field for the BottomMargin record.
|
||||
*/
|
||||
@ -136,16 +125,16 @@ public class BottomMarginRecord
|
||||
/**
|
||||
* Set the margin field for the BottomMargin record.
|
||||
*/
|
||||
public void setMargin(double field_1_margin)
|
||||
public void setMargin( double field_1_margin )
|
||||
{
|
||||
this.field_1_margin = field_1_margin;
|
||||
}
|
||||
|
||||
public Object clone() {
|
||||
public Object clone()
|
||||
{
|
||||
BottomMarginRecord rec = new BottomMarginRecord();
|
||||
rec.field_1_margin = this.field_1_margin;
|
||||
return rec;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
} // END OF CLASS
|
||||
|
@ -158,7 +158,7 @@ public class BoundSheetRecord
|
||||
/**
|
||||
* Set the sheetname for this sheet. (this appears in the tabs at the bottom)
|
||||
* @param sheetname the name of the sheet
|
||||
* @throws IllegalArgumentException if sheet name will cause excel to crash.
|
||||
* @thows IllegalArgumentException if sheet name will cause excel to crash.
|
||||
*/
|
||||
|
||||
public void setSheetname( String sheetname )
|
||||
|
@ -65,7 +65,7 @@ public class CodepageRecord
|
||||
* @param id id must be 0x42 or an exception will be throw upon validation
|
||||
* @param size the size of the data area of the record
|
||||
* @param data data of the record (should not contain sid/len)
|
||||
* @param offset of the record
|
||||
* @param int offset of the record
|
||||
*/
|
||||
|
||||
public CodepageRecord(short id, short size, byte [] data, int offset)
|
||||
@ -90,7 +90,7 @@ public class CodepageRecord
|
||||
* set the codepage for this workbook
|
||||
*
|
||||
* @see #CODEPAGE
|
||||
* @param cp the codepage to set
|
||||
* @param codepage - the codepage to set
|
||||
*/
|
||||
|
||||
public void setCodepage(short cp)
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
|
@ -21,18 +21,16 @@ package org.apache.poi.hssf.record;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
|
||||
/**
|
||||
* Title: DBCell Record
|
||||
* Description: Used by Excel and other MS apps to quickly find rows in the sheets.<P>
|
||||
* Title: DBCell Record (Currently read only. Not required.)
|
||||
* Description: Used to find rows in blocks...TODO<P>
|
||||
* REFERENCE: PG 299/440 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P>
|
||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||
* @author Jason Height
|
||||
* @version 2.0-pre
|
||||
*/
|
||||
|
||||
public class DBCellRecord
|
||||
extends Record
|
||||
{
|
||||
public final static int BLOCK_SIZE = 32;
|
||||
public final static short sid = 0xd7;
|
||||
private int field_1_row_offset;
|
||||
private short[] field_2_cell_offsets;
|
||||
@ -182,7 +180,7 @@ public class DBCellRecord
|
||||
LittleEndian.putInt(data, 4 + offset, getRowOffset());
|
||||
for (int k = 0; k < getNumCellOffsets(); k++)
|
||||
{
|
||||
LittleEndian.putShort(data, 8 + 2*k + offset, getCellOffsetAt(k));
|
||||
LittleEndian.putShort(data, 8 + k + offset, getCellOffsetAt(k));
|
||||
}
|
||||
return getRecordSize();
|
||||
}
|
||||
@ -192,11 +190,6 @@ public class DBCellRecord
|
||||
return 8 + (getNumCellOffsets() * 2);
|
||||
}
|
||||
|
||||
/** Returns the size of a DBCellRecord when it needs to reference a certain number of rows*/
|
||||
public static int getRecordSizeForRows(int rows) {
|
||||
return 8 + (rows * 2);
|
||||
}
|
||||
|
||||
public short getSid()
|
||||
{
|
||||
return this.sid;
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -14,7 +13,6 @@
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.record;
|
||||
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
|
@ -29,7 +29,6 @@ import org.apache.poi.util.LittleEndian;
|
||||
* Extended SST table info subrecord<P>
|
||||
* contains the elements of "info" in the SST's array field<P>
|
||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||
* @author Jason Height
|
||||
* @version 2.0-pre
|
||||
* @see org.apache.poi.hssf.record.ExtSSTRecord
|
||||
*/
|
||||
|
@ -30,7 +30,7 @@ import java.util.ArrayList;
|
||||
* position relative to the start of the SST record.
|
||||
* REFERENCE: PG 313 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P>
|
||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||
* @author Jason Height
|
||||
* @author Jason Height (jheight at apache dot org)
|
||||
* @version 2.0-pre
|
||||
* @see org.apache.poi.hssf.record.ExtSSTInfoSubRecord
|
||||
*/
|
||||
@ -163,17 +163,15 @@ public class ExtSSTRecord
|
||||
for (int k = 0; k < getNumInfoRecords(); k++)
|
||||
{
|
||||
ExtSSTInfoSubRecord rec = getInfoRecordAt(k);
|
||||
int length = rec.serialize(pos + offset, data);
|
||||
pos += length;
|
||||
pos += rec.serialize(pos + offset, data);
|
||||
}
|
||||
|
||||
return pos;
|
||||
}
|
||||
|
||||
/** Returns the size of this record */
|
||||
public int getRecordSize()
|
||||
{
|
||||
return 6+8*getNumInfoRecords();
|
||||
return 6 + 8*getNumInfoRecords();
|
||||
}
|
||||
|
||||
public static final int getNumberOfInfoRecsForStrings(int numStrings) {
|
||||
|
@ -604,7 +604,7 @@ public class ExtendedFormatRecord
|
||||
* set whether or not to use the pattern in this XF instead of the parent XF.
|
||||
* (foregrount/background)
|
||||
*
|
||||
* @param pattern true if this XF has a different pattern value than its parent,
|
||||
* @param pattern- true if this XF has a different pattern value than its parent,
|
||||
* false otherwise.
|
||||
* @see #setIndentionOptions(short)
|
||||
*/
|
||||
@ -620,7 +620,7 @@ public class ExtendedFormatRecord
|
||||
* set whether or not to use the locking/hidden in this XF instead of the parent XF.
|
||||
*
|
||||
*
|
||||
* @param options true if this XF has a different locking or hidden value than its parent,
|
||||
* @param options- true if this XF has a different locking or hidden value than its parent,
|
||||
* false otherwise.
|
||||
* @see #setIndentionOptions(short)
|
||||
*/
|
||||
|
@ -29,14 +29,13 @@ import java.util.ArrayList;
|
||||
* @author Libin Roman (Vista Portal LDT. Developer)
|
||||
* @version 1.0-pre
|
||||
*/
|
||||
public class ExternSheetRecord extends Record
|
||||
{
|
||||
|
||||
public class ExternSheetRecord extends Record {
|
||||
public final static short sid = 0x17;
|
||||
private short field_1_number_of_REF_sturcutres;
|
||||
private ArrayList field_2_REF_structures;
|
||||
|
||||
public ExternSheetRecord()
|
||||
{
|
||||
public ExternSheetRecord() {
|
||||
field_2_REF_structures = new ArrayList();
|
||||
}
|
||||
|
||||
@ -45,10 +44,11 @@ public class ExternSheetRecord extends Record
|
||||
*
|
||||
* @param id id must be 0x16 or an exception will be throw upon validation
|
||||
* @param size the size of the data area of the record
|
||||
* @param data data of the record (should not contain sid/len) */
|
||||
public ExternSheetRecord( short id, short size, byte[] data )
|
||||
{
|
||||
super( id, size, data );
|
||||
* @param data data of the record (should not contain sid/len)
|
||||
*/
|
||||
|
||||
public ExternSheetRecord(short id, short size, byte[] data) {
|
||||
super(id, size, data);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -57,22 +57,21 @@ public class ExternSheetRecord extends Record
|
||||
* @param id id must be 0x16 or an exception will be throw upon validation
|
||||
* @param size the size of the data area of the record
|
||||
* @param data data of the record (should not contain sid/len)
|
||||
* @param offset of the record's data */
|
||||
public ExternSheetRecord( short id, short size, byte[] data, int offset )
|
||||
{
|
||||
super( id, size, data, offset );
|
||||
* @param offset of the record's data
|
||||
*/
|
||||
public ExternSheetRecord(short id, short size, byte[] data, int offset) {
|
||||
super(id, size, data, offset);
|
||||
}
|
||||
|
||||
/**
|
||||
* called by constructor, should throw runtime exception in the event of a
|
||||
* record passed with a differing ID.
|
||||
*
|
||||
* @param id alleged id for this record */
|
||||
protected void validateSid( short id )
|
||||
{
|
||||
if ( id != sid )
|
||||
{
|
||||
throw new RecordFormatException( "NOT An ExternSheet RECORD" );
|
||||
* @param id alleged id for this record
|
||||
*/
|
||||
protected void validateSid(short id) {
|
||||
if (id != sid) {
|
||||
throw new RecordFormatException("NOT An ExternSheet RECORD");
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,72 +81,77 @@ public class ExternSheetRecord extends Record
|
||||
*
|
||||
* @param data raw data
|
||||
* @param size size of data
|
||||
* @param offset of the record's data (provided a big array of the file) */
|
||||
protected void fillFields( byte[] data, short size, int offset )
|
||||
{
|
||||
* @param offset of the record's data (provided a big array of the file)
|
||||
*/
|
||||
protected void fillFields(byte [] data, short size, int offset) {
|
||||
field_2_REF_structures = new ArrayList();
|
||||
field_1_number_of_REF_sturcutres = LittleEndian.getShort( data, 0 + offset );
|
||||
|
||||
field_1_number_of_REF_sturcutres = LittleEndian.getShort(data, 0 + offset);
|
||||
|
||||
int pos = 2 + offset;
|
||||
for ( int i = 0; i < field_1_number_of_REF_sturcutres; ++i )
|
||||
{
|
||||
ExternSheetSubRecord rec = new ExternSheetSubRecord( (short) 0, (short) 6, data, pos );
|
||||
for (int i = 0 ; i < field_1_number_of_REF_sturcutres ; ++i) {
|
||||
ExternSheetSubRecord rec = new ExternSheetSubRecord((short)0, (short)6 , data , pos);
|
||||
|
||||
pos += 6;
|
||||
field_2_REF_structures.add( rec );
|
||||
|
||||
field_2_REF_structures.add( rec);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* sets the number of the REF structors , that is in Excel file
|
||||
* @param numStruct number of REF structs */
|
||||
public void setNumOfREFStructures( short numStruct )
|
||||
{
|
||||
* @param numStruct number of REF structs
|
||||
*/
|
||||
public void setNumOfREFStructures(short numStruct) {
|
||||
field_1_number_of_REF_sturcutres = numStruct;
|
||||
}
|
||||
|
||||
/**
|
||||
* return the number of the REF structors , that is in Excel file
|
||||
* @return number of REF structs */
|
||||
public short getNumOfREFStructures()
|
||||
{
|
||||
* @return number of REF structs
|
||||
*/
|
||||
public short getNumOfREFStructures() {
|
||||
return field_1_number_of_REF_sturcutres;
|
||||
}
|
||||
|
||||
/**
|
||||
* adds REF struct (ExternSheetSubRecord)
|
||||
* @param rec REF struct */
|
||||
public void addREFRecord( ExternSheetSubRecord rec )
|
||||
{
|
||||
field_2_REF_structures.add( rec );
|
||||
* @param rec REF struct
|
||||
*/
|
||||
public void addREFRecord(ExternSheetSubRecord rec) {
|
||||
field_2_REF_structures.add(rec);
|
||||
}
|
||||
|
||||
/** returns the number of REF Records, which is in model
|
||||
* @return number of REF records */
|
||||
public int getNumOfREFRecords()
|
||||
{
|
||||
* @return number of REF records
|
||||
*/
|
||||
public int getNumOfREFRecords() {
|
||||
return field_2_REF_structures.size();
|
||||
}
|
||||
|
||||
/** returns the REF record (ExternSheetSubRecord)
|
||||
* @param elem index to place
|
||||
* @return REF record */
|
||||
public ExternSheetSubRecord getREFRecordAt( int elem )
|
||||
{
|
||||
ExternSheetSubRecord result = (ExternSheetSubRecord) field_2_REF_structures.get( elem );
|
||||
* @return REF record
|
||||
*/
|
||||
public ExternSheetSubRecord getREFRecordAt(int elem) {
|
||||
ExternSheetSubRecord result = ( ExternSheetSubRecord ) field_2_REF_structures.get(elem);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
public String toString() {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append( "[EXTERNSHEET]\n" );
|
||||
buffer.append( " numOfRefs = " ).append( getNumOfREFStructures() ).append( "\n" );
|
||||
for ( int k = 0; k < this.getNumOfREFRecords(); k++ )
|
||||
{
|
||||
buffer.append( "refrec #" ).append( k ).append( '\n' );
|
||||
buffer.append( getREFRecordAt( k ).toString() );
|
||||
buffer.append( "----refrec #" ).append( k ).append( '\n' );
|
||||
|
||||
buffer.append("[EXTERNSHEET]\n");
|
||||
buffer.append(" numOfRefs = ").append(getNumOfREFStructures()).append("\n");
|
||||
for (int k=0; k < this.getNumOfREFRecords(); k++) {
|
||||
buffer.append("refrec #").append(k).append('\n');
|
||||
buffer.append(getREFRecordAt(k).toString());
|
||||
buffer.append("----refrec #").append(k).append('\n');
|
||||
}
|
||||
buffer.append( "[/EXTERNSHEET]\n" );
|
||||
buffer.append("[/EXTERNSHEET]\n");
|
||||
|
||||
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
@ -158,31 +162,33 @@ public class ExternSheetRecord extends Record
|
||||
*
|
||||
* @param offset to begin writing at
|
||||
* @param data byte array containing instance data
|
||||
* @return number of bytes written */
|
||||
public int serialize( int offset, byte[] data )
|
||||
{
|
||||
LittleEndian.putShort( data, 0 + offset, sid );
|
||||
LittleEndian.putShort( data, 2 + offset, (short) ( 2 + ( getNumOfREFRecords() * 6 ) ) );
|
||||
LittleEndian.putShort( data, 4 + offset, getNumOfREFStructures() );
|
||||
int pos = 6;
|
||||
for ( int k = 0; k < getNumOfREFRecords(); k++ )
|
||||
{
|
||||
ExternSheetSubRecord record = getREFRecordAt( k );
|
||||
System.arraycopy( record.serialize(), 0, data, pos + offset, 6 );
|
||||
pos += 6;
|
||||
* @return number of bytes written
|
||||
*/
|
||||
public int serialize(int offset, byte [] data) {
|
||||
LittleEndian.putShort(data, 0 + offset, sid);
|
||||
LittleEndian.putShort(data, 2 + offset,(short)(2 + (getNumOfREFRecords() *6)));
|
||||
|
||||
LittleEndian.putShort(data, 4 + offset, getNumOfREFStructures());
|
||||
|
||||
int pos = 6 ;
|
||||
|
||||
for (int k = 0; k < getNumOfREFRecords(); k++) {
|
||||
ExternSheetSubRecord record = getREFRecordAt(k);
|
||||
System.arraycopy(record.serialize(), 0, data, pos + offset, 6);
|
||||
|
||||
pos +=6;
|
||||
}
|
||||
return getRecordSize();
|
||||
}
|
||||
|
||||
public int getRecordSize()
|
||||
{
|
||||
public int getRecordSize() {
|
||||
return 4 + 2 + getNumOfREFRecords() * 6;
|
||||
}
|
||||
|
||||
/**
|
||||
* return the non static version of the id for this record. */
|
||||
public short getSid()
|
||||
{
|
||||
* return the non static version of the id for this record.
|
||||
*/
|
||||
public short getSid() {
|
||||
return this.sid;
|
||||
}
|
||||
}
|
||||
|
@ -305,14 +305,6 @@ public class FormulaRecord
|
||||
return field_8_parsed_expr;
|
||||
}
|
||||
|
||||
/**
|
||||
* sets the stack with a list
|
||||
*/
|
||||
public void setParsedExpression(List ptgs) {
|
||||
field_8_parsed_expr = new Stack();
|
||||
field_8_parsed_expr.addAll(ptgs);
|
||||
}
|
||||
|
||||
/**
|
||||
* called by constructor, should throw runtime exception in the event of a
|
||||
* record passed with a differing ID.
|
||||
|
@ -185,13 +185,6 @@ public class IndexRecord
|
||||
return 20 + (getNumDbcells() * 4);
|
||||
}
|
||||
|
||||
/** Returns the size of an INdexRecord when it needs to index the specified number of blocks
|
||||
*
|
||||
*/
|
||||
public static int getRecordSizeForBlockCount(int blockCount) {
|
||||
return 20 + (4 * blockCount);
|
||||
}
|
||||
|
||||
public short getSid()
|
||||
{
|
||||
return this.sid;
|
||||
|
@ -114,14 +114,13 @@ public class LabelRecord
|
||||
field_4_string_len = LittleEndian.getShort(data, 6 + offset);
|
||||
field_5_unicode_flag = data[ 8 + offset ];
|
||||
if (field_4_string_len > 0) {
|
||||
if (isUnCompressedUnicode())
|
||||
{
|
||||
if (isUnCompressedUnicode()) {
|
||||
field_6_value = StringUtil.getFromUnicodeLE(data, 9 + offset,
|
||||
field_4_string_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
field_6_value = StringUtil.getFromCompressedUnicode(data, 9 + offset, getStringLength());
|
||||
else {
|
||||
field_6_value = StringUtil.getFromCompressedUnicode(data, 9 + offset,
|
||||
getStringLength());
|
||||
}
|
||||
} else field_6_value = null;
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,11 +14,8 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record;
|
||||
|
||||
|
||||
import org.apache.poi.util.*;
|
||||
|
||||
/**
|
||||
@ -27,16 +23,12 @@ import org.apache.poi.util.*;
|
||||
* NOTE: This source was automatically generated.
|
||||
* @author Shawn Laubach (slaubach at apache dot org)
|
||||
*/
|
||||
|
||||
public class LeftMarginRecord
|
||||
extends Record implements Margin{
|
||||
public class LeftMarginRecord extends Record implements Margin
|
||||
{
|
||||
public final static short sid = 0x26;
|
||||
private double field_1_margin;
|
||||
|
||||
public LeftMarginRecord()
|
||||
{
|
||||
|
||||
}
|
||||
public LeftMarginRecord() { }
|
||||
|
||||
/**
|
||||
* Constructs a LeftMargin record and sets its fields appropriately.
|
||||
@ -46,99 +38,85 @@ public class LeftMarginRecord
|
||||
* @param size size the size of the data area of the record
|
||||
* @param data data of the record (should not contain sid/len)
|
||||
*/
|
||||
|
||||
public LeftMarginRecord(short id, short size, byte [] data)
|
||||
{
|
||||
super(id, size, data);
|
||||
}
|
||||
public LeftMarginRecord( short id, short size, byte[] data )
|
||||
{ super( id, size, data ); }
|
||||
|
||||
/**
|
||||
* Constructs a LeftMargin record and sets its fields appropriately.
|
||||
*
|
||||
* @param id id must be 0x26 or an exception
|
||||
* will be throw upon validation
|
||||
* @param size size the size of the data area of the record
|
||||
* @param data data of the record (should not contain sid/len)
|
||||
* @param offset of the record's data
|
||||
*/
|
||||
|
||||
public LeftMarginRecord(short id, short size, byte [] data, int offset)
|
||||
{
|
||||
super(id, size, data, offset);
|
||||
}
|
||||
public LeftMarginRecord( short id, short size, byte[] data, int offset )
|
||||
{ super( id, size, data, offset ); }
|
||||
|
||||
/**
|
||||
* Checks the sid matches the expected side for this record
|
||||
*
|
||||
* @param id the expected sid.
|
||||
*/
|
||||
|
||||
protected void validateSid(short id)
|
||||
protected void validateSid( short id )
|
||||
{
|
||||
if (id != sid)
|
||||
if ( id != sid )
|
||||
{
|
||||
throw new RecordFormatException("Not a LeftMargin record");
|
||||
throw new RecordFormatException( "Not a LeftMargin record" );
|
||||
}
|
||||
}
|
||||
|
||||
protected void fillFields(byte [] data, short size, int offset)
|
||||
protected void fillFields( byte[] data, short size, int offset )
|
||||
{
|
||||
field_1_margin = LittleEndian.getDouble(data, 0x0 + offset);
|
||||
field_1_margin = LittleEndian.getDouble( data, 0x0 + offset );
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append("[LeftMargin]\n");
|
||||
buffer.append(" .margin = ") .append(" (").append(getMargin()).append(" )\n");
|
||||
buffer.append("[/LeftMargin]\n");
|
||||
buffer.append( "[LeftMargin]\n" );
|
||||
buffer.append( " .margin = " ).append( " (" ).append( getMargin() ).append( " )\n" );
|
||||
buffer.append( "[/LeftMargin]\n" );
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public int serialize(int offset, byte[] data)
|
||||
public int serialize( int offset, byte[] data )
|
||||
{
|
||||
LittleEndian.putShort(data, 0 + offset, sid);
|
||||
LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4));
|
||||
LittleEndian.putDouble(data, 4 + offset, field_1_margin);
|
||||
LittleEndian.putShort( data, 0 + offset, sid );
|
||||
LittleEndian.putShort( data, 2 + offset, (short) ( getRecordSize() - 4 ) );
|
||||
LittleEndian.putDouble( data, 4 + offset, field_1_margin );
|
||||
return getRecordSize();
|
||||
}
|
||||
|
||||
/**
|
||||
* Size of record (exluding 4 byte header)
|
||||
*/
|
||||
|
||||
public int getRecordSize()
|
||||
{
|
||||
public int getRecordSize() {
|
||||
return 4 + 8;
|
||||
}
|
||||
|
||||
public short getSid()
|
||||
{
|
||||
public short getSid() {
|
||||
return this.sid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the margin field for the LeftMargin record.
|
||||
*/
|
||||
|
||||
public double getMargin()
|
||||
{
|
||||
public double getMargin() {
|
||||
return field_1_margin;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the margin field for the LeftMargin record.
|
||||
*/
|
||||
|
||||
public void setMargin(double field_1_margin)
|
||||
public void setMargin( double field_1_margin )
|
||||
{
|
||||
this.field_1_margin = field_1_margin;
|
||||
}
|
||||
|
||||
public Object clone() {
|
||||
public Object clone()
|
||||
{
|
||||
LeftMarginRecord rec = new LeftMarginRecord();
|
||||
rec.field_1_margin = this.field_1_margin;
|
||||
return rec;
|
||||
}
|
||||
|
||||
}
|
||||
} // END OF CLASS
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,30 +14,24 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record;
|
||||
|
||||
import org.apache.poi.util.*;
|
||||
|
||||
/**
|
||||
* The margin interface is a parent used to define left, right, top and bottom margins. This allows much of the code to be generic when it comes to handling margins.
|
||||
* The margin interface is a parent used to define left, right, top and bottom margins.
|
||||
* This allows much of the code to be generic when it comes to handling margins.
|
||||
* NOTE: This source wass automatically generated.
|
||||
*
|
||||
* @author Shawn Laubach (slaubach at apache dot org)
|
||||
*/
|
||||
|
||||
public interface Margin{
|
||||
|
||||
public interface Margin
|
||||
{
|
||||
/**
|
||||
* Get the margin field for the Margin.
|
||||
*/
|
||||
|
||||
public double getMargin();
|
||||
|
||||
/**
|
||||
* Set the margin field for the Margin.
|
||||
*/
|
||||
|
||||
public void setMargin(double field_1_margin);
|
||||
|
||||
}
|
||||
public void setMargin( double field_1_margin );
|
||||
} // END OF CLASS
|
@ -24,19 +24,18 @@ import java.util.Iterator;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
|
||||
/**
|
||||
* Title: Merged Cells Record<P>
|
||||
* Title: Merged Cells Record
|
||||
* <br>
|
||||
* Description: Optional record defining a square area of cells to "merged" into
|
||||
* one cell. <P>
|
||||
* REFERENCE: NONE (UNDOCUMENTED PRESENTLY) <P>
|
||||
* one cell. <br>
|
||||
* REFERENCE: NONE (UNDOCUMENTED PRESENTLY) <br>
|
||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||
* @version 2.0-pre
|
||||
*/
|
||||
|
||||
public class MergeCellsRecord
|
||||
extends Record
|
||||
{
|
||||
public final static short sid = 0xe5;
|
||||
private short field_1_num_areas;
|
||||
private ArrayList field_2_regions;
|
||||
|
||||
public MergeCellsRecord()
|
||||
@ -72,11 +71,11 @@ public class MergeCellsRecord
|
||||
|
||||
protected void fillFields(byte [] data, short size, int offset)
|
||||
{
|
||||
field_1_num_areas = LittleEndian.getShort(data, 0 + offset);
|
||||
field_2_regions = new ArrayList(field_1_num_areas + 10);
|
||||
short numAreas = LittleEndian.getShort(data, 0 + offset);
|
||||
field_2_regions = new ArrayList(numAreas + 10);
|
||||
int pos = 2;
|
||||
|
||||
for (int k = 0; k < field_1_num_areas; k++)
|
||||
for (int k = 0; k < numAreas; k++)
|
||||
{
|
||||
MergedRegion region =
|
||||
new MergedRegion(LittleEndian
|
||||
@ -98,7 +97,9 @@ public class MergeCellsRecord
|
||||
|
||||
public short getNumAreas()
|
||||
{
|
||||
return field_1_num_areas;
|
||||
//if the array size is larger than a short (65536), the record can't hold that many merges anyway
|
||||
if (field_2_regions == null) return 0;
|
||||
return (short)field_2_regions.size();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -106,13 +107,14 @@ public class MergeCellsRecord
|
||||
* it will be incremented automatically or decremented when an area is removed. If
|
||||
* you are setting this to 0 then you are a terrible person. Just remove the record.
|
||||
* (just kidding about you being a terrible person..hehe)
|
||||
*
|
||||
* @deprecated We now link the size to the actual array of merged regions
|
||||
* @see #getNumAreas()
|
||||
* @param numareas number of areas
|
||||
*/
|
||||
|
||||
public void setNumAreas(short numareas)
|
||||
{
|
||||
field_1_num_areas = numareas;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -138,7 +140,6 @@ public class MergeCellsRecord
|
||||
colto);
|
||||
|
||||
field_2_regions.add(region);
|
||||
field_1_num_areas++;
|
||||
return field_2_regions.size() - 1;
|
||||
}
|
||||
|
||||
@ -150,7 +151,6 @@ public class MergeCellsRecord
|
||||
public void removeAreaAt(int area)
|
||||
{
|
||||
field_2_regions.remove(area);
|
||||
field_1_num_areas--;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -209,9 +209,9 @@ public class MergeCellsRecord
|
||||
|
||||
retval.append("[MERGEDCELLS]").append("\n");
|
||||
retval.append(" .sid =").append(sid).append("\n");
|
||||
retval.append(" .numregions =").append(field_1_num_areas)
|
||||
retval.append(" .numregions =").append(getNumAreas())
|
||||
.append("\n");
|
||||
for (int k = 0; k < field_1_num_areas; k++)
|
||||
for (int k = 0; k < getNumAreas(); k++)
|
||||
{
|
||||
MergedRegion region = ( MergedRegion ) field_2_regions.get(k);
|
||||
|
||||
@ -289,7 +289,6 @@ public class MergeCellsRecord
|
||||
|
||||
public Object clone() {
|
||||
MergeCellsRecord rec = new MergeCellsRecord();
|
||||
rec.field_1_num_areas = field_1_num_areas;
|
||||
rec.field_2_regions = new ArrayList();
|
||||
Iterator iterator = field_2_regions.iterator();
|
||||
while (iterator.hasNext()) {
|
||||
|
@ -924,6 +924,7 @@ public class NameRecord extends Record {
|
||||
.append("\n");
|
||||
buffer.append(" .Status bar text (Unicode string without length field) = ").append( field_17_status_bar_text )
|
||||
.append("\n");
|
||||
if (field_13_raw_name_definition != null)
|
||||
buffer.append(org.apache.poi.util.HexDump.dump(this.field_13_raw_name_definition,0,0));
|
||||
buffer.append("[/NAME]\n");
|
||||
|
||||
|
@ -168,8 +168,8 @@ public class PaletteRecord
|
||||
* If the given index is greater than the current last color index,
|
||||
* then black is inserted at every index required to make the palette continuous.
|
||||
*
|
||||
* @param byteIndex the index to set; if this index is less than 0x8 or
|
||||
* greater than 0x40, then no modification is made
|
||||
* @param i the index to set; if this index is less than 0x8 or greater than
|
||||
* 0x40, then no modification is made
|
||||
*/
|
||||
public void setColor(short byteIndex, byte red, byte green, byte blue)
|
||||
{
|
||||
|
@ -18,15 +18,13 @@
|
||||
|
||||
package org.apache.poi.hssf.record;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Title: Record Factory<P>
|
||||
* Description: Takes a stream and outputs an array of Record objects.<P>
|
||||
@ -75,9 +73,9 @@ public class RecordFactory
|
||||
FormulaRecord.class, BoolErrRecord.class, ExternSheetRecord.class,
|
||||
NameRecord.class, LeftMarginRecord.class, RightMarginRecord.class,
|
||||
TopMarginRecord.class, BottomMarginRecord.class,
|
||||
PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class,
|
||||
DrawingRecord.class, DrawingGroupRecord.class, DrawingSelectionRecord.class,
|
||||
ObjRecord.class, TextObjectRecord.class,
|
||||
PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class,
|
||||
HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class
|
||||
};
|
||||
} else {
|
||||
@ -329,6 +327,7 @@ public class RecordFactory
|
||||
}
|
||||
catch (Exception illegalArgumentException)
|
||||
{
|
||||
illegalArgumentException.printStackTrace();
|
||||
throw new RecordFormatException(
|
||||
"Unable to determine record types");
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -16,129 +15,87 @@
|
||||
==================================================================== */
|
||||
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record;
|
||||
|
||||
import org.apache.poi.util.*;
|
||||
|
||||
/**
|
||||
* Record for the right margin.
|
||||
* NOTE: This source was automatically generated.
|
||||
* @author Shawn Laubach (slaubach at apache dot org)
|
||||
* Record for the right margin. * NOTE: This source was automatically generated. * @author Shawn Laubach (slaubach at apache dot org)
|
||||
*/
|
||||
|
||||
|
||||
public class RightMarginRecord
|
||||
extends Record implements Margin{
|
||||
public class RightMarginRecord extends Record implements Margin
|
||||
{
|
||||
public final static short sid = 0x27;
|
||||
private double field_1_margin;
|
||||
|
||||
public RightMarginRecord()
|
||||
{
|
||||
|
||||
}
|
||||
public RightMarginRecord() { }
|
||||
|
||||
/**
|
||||
* Constructs a RightMargin record and sets its fields appropriately.
|
||||
*
|
||||
* @param id id must be 0x27 or an exception
|
||||
* will be throw upon validation
|
||||
* @param size size the size of the data area of the record
|
||||
* @param data data of the record (should not contain sid/len)
|
||||
* Constructs a RightMargin record and sets its fields appropriately. * * @param id id must be 0x27 or an exception * will be throw upon validation * @param size size the size of the data area of the record * @param data data of the record (should not contain sid/len)
|
||||
*/
|
||||
|
||||
public RightMarginRecord(short id, short size, byte [] data)
|
||||
{
|
||||
super(id, size, data);
|
||||
}
|
||||
public RightMarginRecord( short id, short size, byte[] data )
|
||||
{ super( id, size, data ); }
|
||||
|
||||
/**
|
||||
* Constructs a RightMargin record and sets its fields appropriately.
|
||||
*
|
||||
* @param id id must be 0x27 or an exception
|
||||
* will be throw upon validation
|
||||
* @param size size the size of the data area of the record
|
||||
* @param data data of the record (should not contain sid/len)
|
||||
* @param offset of the record's data
|
||||
* Constructs a RightMargin record and sets its fields appropriately. * * @param id id must be 0x27 or an exception * will be throw upon validation * @param size size the size of the data area of the record * @param data data of the record (should not contain sid/len) * @param offset of the record's data
|
||||
*/
|
||||
|
||||
public RightMarginRecord(short id, short size, byte [] data, int offset)
|
||||
{
|
||||
super(id, size, data, offset);
|
||||
}
|
||||
public RightMarginRecord( short id, short size, byte[] data, int offset )
|
||||
{ super( id, size, data, offset ); }
|
||||
|
||||
/**
|
||||
* Checks the sid matches the expected side for this record
|
||||
*
|
||||
* @param id the expected sid.
|
||||
* Checks the sid matches the expected side for this record * * @param id the expected sid.
|
||||
*/
|
||||
|
||||
protected void validateSid(short id)
|
||||
protected void validateSid( short id )
|
||||
{
|
||||
if (id != sid)
|
||||
if ( id != sid )
|
||||
{
|
||||
throw new RecordFormatException("Not a RightMargin record");
|
||||
throw new RecordFormatException( "Not a RightMargin record" );
|
||||
}
|
||||
}
|
||||
|
||||
protected void fillFields(byte [] data, short size, int offset)
|
||||
protected void fillFields( byte[] data, short size, int offset )
|
||||
{
|
||||
field_1_margin = LittleEndian.getDouble(data, 0x0 + offset);
|
||||
field_1_margin = LittleEndian.getDouble( data, 0x0 + offset );
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append("[RightMargin]\n");
|
||||
buffer.append(" .margin = ") .append(" (").append(getMargin()).append(" )\n");
|
||||
buffer.append("[/RightMargin]\n");
|
||||
buffer.append( "[RightMargin]\n" );
|
||||
buffer.append( " .margin = " ).append( " (" ).append( getMargin() ).append( " )\n" );
|
||||
buffer.append( "[/RightMargin]\n" );
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public int serialize(int offset, byte[] data)
|
||||
public int serialize( int offset, byte[] data )
|
||||
{
|
||||
LittleEndian.putShort(data, 0 + offset, sid);
|
||||
LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4));
|
||||
LittleEndian.putDouble(data, 4 + offset, field_1_margin);
|
||||
LittleEndian.putShort( data, 0 + offset, sid );
|
||||
LittleEndian.putShort( data, 2 + offset, (short) ( getRecordSize() - 4 ) );
|
||||
LittleEndian.putDouble( data, 4 + offset, field_1_margin );
|
||||
return getRecordSize();
|
||||
}
|
||||
|
||||
/**
|
||||
* Size of record (exluding 4 byte header)
|
||||
*/
|
||||
public int getRecordSize() { return 4 + 8; }
|
||||
|
||||
public int getRecordSize()
|
||||
{
|
||||
return 4 + 8;
|
||||
}
|
||||
|
||||
public short getSid()
|
||||
{
|
||||
return this.sid;
|
||||
}
|
||||
public short getSid() { return this.sid; }
|
||||
|
||||
/**
|
||||
* Get the margin field for the RightMargin record.
|
||||
*/
|
||||
|
||||
public double getMargin()
|
||||
{
|
||||
return field_1_margin;
|
||||
}
|
||||
public double getMargin() { return field_1_margin; }
|
||||
|
||||
/**
|
||||
* Set the margin field for the RightMargin record.
|
||||
*/
|
||||
public void setMargin( double field_1_margin )
|
||||
{ this.field_1_margin = field_1_margin; }
|
||||
|
||||
public void setMargin(double field_1_margin)
|
||||
public Object clone()
|
||||
{
|
||||
this.field_1_margin = field_1_margin;
|
||||
}
|
||||
|
||||
public Object clone() {
|
||||
RightMarginRecord rec = new RightMarginRecord();
|
||||
rec.field_1_margin = this.field_1_margin;
|
||||
return rec;
|
||||
}
|
||||
|
||||
}
|
||||
} // END OF CLASS
|
@ -223,6 +223,7 @@ class SSTDeserializer
|
||||
*/
|
||||
static public void addToStringTable( BinaryTree strings, Integer integer, UnicodeString string )
|
||||
{
|
||||
|
||||
if ( string.isRichText() )
|
||||
string.setOptionFlags( (byte) ( string.getOptionFlags() & ( ~8 ) ) );
|
||||
if ( string.isExtendedText() )
|
||||
|
@ -18,9 +18,8 @@
|
||||
|
||||
package org.apache.poi.hssf.record;
|
||||
|
||||
import org.apache.poi.util.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
import org.apache.poi.util.StringUtil;
|
||||
|
||||
/**
|
||||
* Supports the STRING record structure.
|
||||
@ -102,6 +101,11 @@ public class StringRecord
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isInValueSection()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
private int getStringLength()
|
||||
{
|
||||
return field_1_string_length;
|
||||
@ -129,12 +133,6 @@ public class StringRecord
|
||||
return (field_2_unicode_flag == 1);
|
||||
}
|
||||
|
||||
public boolean isInValueSection()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* called by the class that is responsible for writing this sucker.
|
||||
* Subclasses should implement this so that their data is passed back in a
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,31 +14,22 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record;
|
||||
|
||||
|
||||
|
||||
import org.apache.poi.util.*;
|
||||
|
||||
/**
|
||||
* Record for the top margin.
|
||||
* NOTE: This source was automatically generated.
|
||||
*
|
||||
* @author Shawn Laubach (slaubach at apache dot org)
|
||||
*/
|
||||
|
||||
public class TopMarginRecord
|
||||
extends Record implements Margin
|
||||
public class TopMarginRecord extends Record implements Margin
|
||||
{
|
||||
public final static short sid = 0x28;
|
||||
private double field_1_margin;
|
||||
|
||||
|
||||
public TopMarginRecord()
|
||||
{
|
||||
|
||||
}
|
||||
public TopMarginRecord() { }
|
||||
|
||||
/**
|
||||
* Constructs a TopMargin record and sets its fields appropriately.
|
||||
@ -49,11 +39,8 @@ public class TopMarginRecord
|
||||
* @param size size the size of the data area of the record
|
||||
* @param data data of the record (should not contain sid/len)
|
||||
*/
|
||||
|
||||
public TopMarginRecord(short id, short size, byte [] data)
|
||||
{
|
||||
super(id, size, data);
|
||||
}
|
||||
public TopMarginRecord( short id, short size, byte[] data )
|
||||
{ super( id, size, data ); }
|
||||
|
||||
/**
|
||||
* Constructs a TopMargin record and sets its fields appropriately.
|
||||
@ -64,85 +51,66 @@ public class TopMarginRecord
|
||||
* @param data data of the record (should not contain sid/len)
|
||||
* @param offset of the record's data
|
||||
*/
|
||||
|
||||
public TopMarginRecord(short id, short size, byte [] data, int offset)
|
||||
{
|
||||
super(id, size, data, offset);
|
||||
}
|
||||
public TopMarginRecord( short id, short size, byte[] data, int offset )
|
||||
{ super( id, size, data, offset ); }
|
||||
|
||||
/**
|
||||
* Checks the sid matches the expected side for this record
|
||||
*
|
||||
* @param id the expected sid.
|
||||
*/
|
||||
|
||||
protected void validateSid(short id)
|
||||
protected void validateSid( short id )
|
||||
{
|
||||
if (id != sid)
|
||||
if ( id != sid )
|
||||
{
|
||||
throw new RecordFormatException("Not a TopMargin record");
|
||||
throw new RecordFormatException( "Not a TopMargin record" );
|
||||
}
|
||||
}
|
||||
|
||||
protected void fillFields(byte [] data, short size, int offset)
|
||||
protected void fillFields( byte[] data, short size, int offset )
|
||||
{
|
||||
field_1_margin = LittleEndian.getDouble(data, 0x0 + offset);
|
||||
field_1_margin = LittleEndian.getDouble( data, 0x0 + offset );
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append("[TopMargin]\n");
|
||||
buffer.append(" .margin = ")
|
||||
.append(" (").append(getMargin()).append(" )\n");
|
||||
buffer.append("[/TopMargin]\n");
|
||||
buffer.append( "[TopMargin]\n" );
|
||||
buffer.append( " .margin = " ).append( " (" ).append( getMargin() ).append( " )\n" );
|
||||
buffer.append( "[/TopMargin]\n" );
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public int serialize(int offset, byte[] data)
|
||||
public int serialize( int offset, byte[] data )
|
||||
{
|
||||
LittleEndian.putShort(data, 0 + offset, sid);
|
||||
LittleEndian.putShort(data, 2 + offset, (short)(getRecordSize() - 4));
|
||||
LittleEndian.putDouble(data, 4 + offset, field_1_margin);
|
||||
LittleEndian.putShort( data, 0 + offset, sid );
|
||||
LittleEndian.putShort( data, 2 + offset, (short) ( getRecordSize() - 4 ) );
|
||||
LittleEndian.putDouble( data, 4 + offset, field_1_margin );
|
||||
return getRecordSize();
|
||||
}
|
||||
|
||||
/**
|
||||
* Size of record (exluding 4 byte header)
|
||||
*/
|
||||
public int getRecordSize() { return 4 + 8; }
|
||||
|
||||
public int getRecordSize()
|
||||
{
|
||||
return 4 + 8;
|
||||
}
|
||||
|
||||
public short getSid()
|
||||
{
|
||||
return this.sid;
|
||||
}
|
||||
public short getSid() { return this.sid; }
|
||||
|
||||
/**
|
||||
* Get the margin field for the TopMargin record.
|
||||
*/
|
||||
|
||||
public double getMargin()
|
||||
{
|
||||
return field_1_margin;
|
||||
}
|
||||
public double getMargin() { return field_1_margin; }
|
||||
|
||||
/**
|
||||
* Set the margin field for the TopMargin record.
|
||||
*/
|
||||
public void setMargin( double field_1_margin )
|
||||
{ this.field_1_margin = field_1_margin; }
|
||||
|
||||
public void setMargin(double field_1_margin)
|
||||
public Object clone()
|
||||
{
|
||||
this.field_1_margin = field_1_margin;
|
||||
}
|
||||
|
||||
public Object clone() {
|
||||
TopMarginRecord rec = new TopMarginRecord();
|
||||
rec.field_1_margin = this.field_1_margin;
|
||||
return rec;
|
||||
}
|
||||
|
||||
}
|
||||
} // END OF CLASS
|
@ -18,11 +18,11 @@
|
||||
|
||||
package org.apache.poi.hssf.record;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
import org.apache.poi.util.StringUtil;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
|
||||
/**
|
||||
* Title: Unicode String<P>
|
||||
* Description: Unicode String record. We implement these as a record, although
|
||||
@ -283,12 +283,10 @@ public class UnicodeString
|
||||
|
||||
// System.out.println("Unicode: We've got "+retval[2]+" for our option flag");
|
||||
try {
|
||||
String unicodeString = new
|
||||
String(getString().getBytes("Unicode"),"Unicode");
|
||||
String unicodeString = new String(getString().getBytes("Unicode"),"Unicode");
|
||||
if (getOptionFlags() == 0)
|
||||
{
|
||||
StringUtil.putCompressedUnicode(unicodeString, data, 0x3 +
|
||||
offset);
|
||||
StringUtil.putCompressedUnicode(unicodeString, data, 0x3 +offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -28,16 +28,14 @@ import org.apache.poi.util.LittleEndian;
|
||||
* Company: SuperLink Software, Inc.<P>
|
||||
* @author Andrew C. Oliver (acoliver at apache dot org)
|
||||
* @author Jason Height (jheight at chariot dot net dot au)
|
||||
* @version 2.0-pre
|
||||
* @author Glen Stampoultzis (glens at apache.org)
|
||||
*/
|
||||
|
||||
public class UnknownRecord
|
||||
extends Record
|
||||
{
|
||||
private short sid = 0;
|
||||
private short size = 0;
|
||||
private byte[] thedata = null;
|
||||
int offset = 0;
|
||||
|
||||
public UnknownRecord()
|
||||
{
|
||||
@ -53,9 +51,8 @@ public class UnknownRecord
|
||||
|
||||
public UnknownRecord(short id, short size, byte [] data)
|
||||
{
|
||||
this.sid = id;
|
||||
this.size = size;
|
||||
this.thedata = data;
|
||||
sid = id;
|
||||
thedata = data;
|
||||
}
|
||||
|
||||
public UnknownRecord( short id, short size, byte[] data, int offset )
|
||||
@ -66,9 +63,8 @@ public class UnknownRecord
|
||||
}
|
||||
|
||||
/**
|
||||
* spit the record out AS IS. no interperatation or identification
|
||||
* spit the record out AS IS. no interpretation or identification
|
||||
*/
|
||||
|
||||
public int serialize(int offset, byte [] data)
|
||||
{
|
||||
if (thedata == null)
|
||||
@ -98,7 +94,7 @@ public class UnknownRecord
|
||||
protected void fillFields(byte [] data, short sid)
|
||||
{
|
||||
this.sid = sid;
|
||||
this.thedata = data;
|
||||
thedata = data;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -149,9 +145,7 @@ public class UnknownRecord
|
||||
/** Unlike the other Record.clone methods this is a shallow clone*/
|
||||
public Object clone() {
|
||||
UnknownRecord rec = new UnknownRecord();
|
||||
rec.offset = offset;
|
||||
rec.sid = sid;
|
||||
rec.size = size;
|
||||
rec.thedata = thedata;
|
||||
return rec;
|
||||
}
|
||||
|
@ -0,0 +1,509 @@
|
||||
package org.apache.poi.hssf.record.aggregates;
|
||||
|
||||
import org.apache.poi.hssf.record.ColumnInfoRecord;
|
||||
import org.apache.poi.hssf.record.Record;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Glen Stampoultzis
|
||||
* @version $Id$
|
||||
*/
|
||||
public class ColumnInfoRecordsAggregate
|
||||
extends Record
|
||||
{
|
||||
int size = 0;
|
||||
List records = null;
|
||||
|
||||
public ColumnInfoRecordsAggregate()
|
||||
{
|
||||
records = new ArrayList();
|
||||
}
|
||||
|
||||
/** You never fill an aggregate */
|
||||
protected void fillFields(byte [] data, short size, int offset)
|
||||
{
|
||||
}
|
||||
|
||||
/** Not required by an aggregate */
|
||||
protected void validateSid(short id)
|
||||
{
|
||||
}
|
||||
|
||||
/** It's an aggregate... just made something up */
|
||||
public short getSid()
|
||||
{
|
||||
return -1012;
|
||||
}
|
||||
|
||||
public int getRecordSize()
|
||||
{
|
||||
return size;
|
||||
}
|
||||
|
||||
public Iterator getIterator()
|
||||
{
|
||||
return records.iterator();
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a deep clone of the record
|
||||
*/
|
||||
public Object clone()
|
||||
{
|
||||
ColumnInfoRecordsAggregate rec = new ColumnInfoRecordsAggregate();
|
||||
for ( Iterator colIter = getIterator(); colIter.hasNext(); )
|
||||
{
|
||||
//return the cloned Row Record & insert
|
||||
ColumnInfoRecord col = (ColumnInfoRecord) ( (ColumnInfoRecord) colIter.next() ).clone();
|
||||
rec.insertColumn( col );
|
||||
}
|
||||
return rec;
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts a column into the aggregate (at the end of the list).
|
||||
*/
|
||||
public void insertColumn( ColumnInfoRecord col )
|
||||
{
|
||||
size += col.getRecordSize();
|
||||
records.add( col );
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts a column into the aggregate (at the position specified
|
||||
* by <code>idx</code>.
|
||||
*/
|
||||
public void insertColumn( int idx, ColumnInfoRecord col )
|
||||
{
|
||||
size += col.getRecordSize();
|
||||
records.add( idx, col );
|
||||
}
|
||||
|
||||
public int getNumColumns( )
|
||||
{
|
||||
return records.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* called by the class that is responsible for writing this sucker.
|
||||
* Subclasses should implement this so that their data is passed back in a
|
||||
* byte array.
|
||||
*
|
||||
* @param offset offset to begin writing at
|
||||
* @param data byte array containing instance data
|
||||
* @return number of bytes written
|
||||
*/
|
||||
public int serialize(int offset, byte [] data)
|
||||
{
|
||||
Iterator itr = records.iterator();
|
||||
int pos = offset;
|
||||
|
||||
while (itr.hasNext())
|
||||
{
|
||||
pos += (( Record ) itr.next()).serialize(pos, data);
|
||||
}
|
||||
return pos - offset;
|
||||
}
|
||||
|
||||
public int findStartOfColumnOutlineGroup(int idx)
|
||||
{
|
||||
// Find the start of the group.
|
||||
ColumnInfoRecord columnInfo = (ColumnInfoRecord) records.get( idx );
|
||||
int level = columnInfo.getOutlineLevel();
|
||||
while (idx != 0)
|
||||
{
|
||||
ColumnInfoRecord prevColumnInfo = (ColumnInfoRecord) records.get( idx - 1 );
|
||||
if (columnInfo.getFirstColumn() - 1 == prevColumnInfo.getLastColumn())
|
||||
{
|
||||
if (prevColumnInfo.getOutlineLevel() < level)
|
||||
{
|
||||
break;
|
||||
}
|
||||
idx--;
|
||||
columnInfo = prevColumnInfo;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return idx;
|
||||
}
|
||||
|
||||
public int findEndOfColumnOutlineGroup(int idx)
|
||||
{
|
||||
// Find the end of the group.
|
||||
ColumnInfoRecord columnInfo = (ColumnInfoRecord) records.get( idx );
|
||||
int level = columnInfo.getOutlineLevel();
|
||||
while (idx < records.size() - 1)
|
||||
{
|
||||
ColumnInfoRecord nextColumnInfo = (ColumnInfoRecord) records.get( idx + 1 );
|
||||
if (columnInfo.getLastColumn() + 1 == nextColumnInfo.getFirstColumn())
|
||||
{
|
||||
if (nextColumnInfo.getOutlineLevel() < level)
|
||||
{
|
||||
break;
|
||||
}
|
||||
idx++;
|
||||
columnInfo = nextColumnInfo;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return idx;
|
||||
}
|
||||
|
||||
public ColumnInfoRecord getColInfo(int idx)
|
||||
{
|
||||
return (ColumnInfoRecord) records.get( idx );
|
||||
}
|
||||
|
||||
public ColumnInfoRecord writeHidden( ColumnInfoRecord columnInfo, int idx, boolean hidden )
|
||||
{
|
||||
int level = columnInfo.getOutlineLevel();
|
||||
while (idx < records.size())
|
||||
{
|
||||
columnInfo.setHidden( hidden );
|
||||
if (idx + 1 < records.size())
|
||||
{
|
||||
ColumnInfoRecord nextColumnInfo = (ColumnInfoRecord) records.get( idx + 1 );
|
||||
if (columnInfo.getLastColumn() + 1 == nextColumnInfo.getFirstColumn())
|
||||
{
|
||||
if (nextColumnInfo.getOutlineLevel() < level)
|
||||
break;
|
||||
columnInfo = nextColumnInfo;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
return columnInfo;
|
||||
}
|
||||
|
||||
public boolean isColumnGroupCollapsed( int idx )
|
||||
{
|
||||
int endOfOutlineGroupIdx = findEndOfColumnOutlineGroup( idx );
|
||||
if (endOfOutlineGroupIdx >= records.size())
|
||||
return false;
|
||||
if (getColInfo(endOfOutlineGroupIdx).getLastColumn() + 1 != getColInfo(endOfOutlineGroupIdx + 1).getFirstColumn())
|
||||
return false;
|
||||
else
|
||||
return getColInfo(endOfOutlineGroupIdx+1).getCollapsed();
|
||||
}
|
||||
|
||||
|
||||
public boolean isColumnGroupHiddenByParent( int idx )
|
||||
{
|
||||
// Look out outline details of end
|
||||
int endLevel;
|
||||
boolean endHidden;
|
||||
int endOfOutlineGroupIdx = findEndOfColumnOutlineGroup( idx );
|
||||
if (endOfOutlineGroupIdx >= records.size())
|
||||
{
|
||||
endLevel = 0;
|
||||
endHidden = false;
|
||||
}
|
||||
else if (getColInfo(endOfOutlineGroupIdx).getLastColumn() + 1 != getColInfo(endOfOutlineGroupIdx + 1).getFirstColumn())
|
||||
{
|
||||
endLevel = 0;
|
||||
endHidden = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
endLevel = getColInfo( endOfOutlineGroupIdx + 1).getOutlineLevel();
|
||||
endHidden = getColInfo( endOfOutlineGroupIdx + 1).getHidden();
|
||||
}
|
||||
|
||||
// Look out outline details of start
|
||||
int startLevel;
|
||||
boolean startHidden;
|
||||
int startOfOutlineGroupIdx = findStartOfColumnOutlineGroup( idx );
|
||||
if (startOfOutlineGroupIdx <= 0)
|
||||
{
|
||||
startLevel = 0;
|
||||
startHidden = false;
|
||||
}
|
||||
else if (getColInfo(startOfOutlineGroupIdx).getFirstColumn() - 1 != getColInfo(startOfOutlineGroupIdx - 1).getLastColumn())
|
||||
{
|
||||
startLevel = 0;
|
||||
startHidden = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
startLevel = getColInfo( startOfOutlineGroupIdx - 1).getOutlineLevel();
|
||||
startHidden = getColInfo( startOfOutlineGroupIdx - 1 ).getHidden();
|
||||
}
|
||||
|
||||
if (endLevel > startLevel)
|
||||
{
|
||||
return endHidden;
|
||||
}
|
||||
else
|
||||
{
|
||||
return startHidden;
|
||||
}
|
||||
}
|
||||
|
||||
public void collapseColumn( short columnNumber )
|
||||
{
|
||||
int idx = findColumnIdx( columnNumber, 0 );
|
||||
if (idx == -1)
|
||||
return;
|
||||
|
||||
// Find the start of the group.
|
||||
ColumnInfoRecord columnInfo = (ColumnInfoRecord) records.get( findStartOfColumnOutlineGroup( idx ) );
|
||||
|
||||
// Hide all the columns until the end of the group
|
||||
columnInfo = writeHidden( columnInfo, idx, true );
|
||||
|
||||
// Write collapse field
|
||||
setColumn( (short) ( columnInfo.getLastColumn() + 1 ), null, null, null, Boolean.TRUE);
|
||||
}
|
||||
|
||||
public void expandColumn( short columnNumber )
|
||||
{
|
||||
int idx = findColumnIdx( columnNumber, 0 );
|
||||
if (idx == -1)
|
||||
return;
|
||||
|
||||
// If it is already exapanded do nothing.
|
||||
if (!isColumnGroupCollapsed(idx))
|
||||
return;
|
||||
|
||||
// Find the start of the group.
|
||||
int startIdx = findStartOfColumnOutlineGroup( idx );
|
||||
ColumnInfoRecord columnInfo = getColInfo( startIdx );
|
||||
|
||||
// Find the end of the group.
|
||||
int endIdx = findEndOfColumnOutlineGroup( idx );
|
||||
ColumnInfoRecord endColumnInfo = getColInfo( endIdx );
|
||||
|
||||
// expand:
|
||||
// colapsed bit must be unset
|
||||
// hidden bit gets unset _if_ surrounding groups are expanded you can determine
|
||||
// this by looking at the hidden bit of the enclosing group. You will have
|
||||
// to look at the start and the end of the current group to determine which
|
||||
// is the enclosing group
|
||||
// hidden bit only is altered for this outline level. ie. don't uncollapse contained groups
|
||||
if (!isColumnGroupHiddenByParent( idx ))
|
||||
{
|
||||
for (int i = startIdx; i <= endIdx; i++)
|
||||
{
|
||||
if (columnInfo.getOutlineLevel() == getColInfo(i).getOutlineLevel())
|
||||
getColInfo(i).setHidden( false );
|
||||
}
|
||||
}
|
||||
|
||||
// Write collapse field
|
||||
setColumn( (short) ( columnInfo.getLastColumn() + 1 ), null, null, null, Boolean.FALSE);
|
||||
}
|
||||
|
||||
/**
|
||||
* creates the ColumnInfo Record and sets it to a default column/width
|
||||
* @see org.apache.poi.hssf.record.ColumnInfoRecord
|
||||
* @return record containing a ColumnInfoRecord
|
||||
*/
|
||||
public static Record createColInfo()
|
||||
{
|
||||
ColumnInfoRecord retval = new ColumnInfoRecord();
|
||||
|
||||
retval.setColumnWidth(( short ) 2275);
|
||||
// was: retval.setOptions(( short ) 6);
|
||||
retval.setOptions(( short ) 2);
|
||||
retval.setXFIndex(( short ) 0x0f);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
public void setColumn(short column, Short width, Integer level, Boolean hidden, Boolean collapsed)
|
||||
{
|
||||
ColumnInfoRecord ci = null;
|
||||
int k = 0;
|
||||
|
||||
for (k = 0; k < records.size(); k++)
|
||||
{
|
||||
ci = ( ColumnInfoRecord ) records.get(k);
|
||||
if ((ci.getFirstColumn() <= column)
|
||||
&& (column <= ci.getLastColumn()))
|
||||
{
|
||||
break;
|
||||
}
|
||||
ci = null;
|
||||
}
|
||||
|
||||
if (ci != null)
|
||||
{
|
||||
boolean widthChanged = width != null && ci.getColumnWidth() != width.shortValue();
|
||||
boolean levelChanged = level != null && ci.getOutlineLevel() != level.intValue();
|
||||
boolean hiddenChanged = hidden != null && ci.getHidden() != hidden.booleanValue();
|
||||
boolean collapsedChanged = collapsed != null && ci.getCollapsed() != collapsed.booleanValue();
|
||||
boolean columnChanged = widthChanged || levelChanged || hiddenChanged || collapsedChanged;
|
||||
if (!columnChanged)
|
||||
{
|
||||
// do nothing...nothing changed.
|
||||
}
|
||||
else if ((ci.getFirstColumn() == column)
|
||||
&& (ci.getLastColumn() == column))
|
||||
{ // if its only for this cell then
|
||||
setColumnInfoFields( ci, width, level, hidden, collapsed );
|
||||
}
|
||||
else if ((ci.getFirstColumn() == column)
|
||||
|| (ci.getLastColumn() == column))
|
||||
{
|
||||
// okay so the width is different but the first or last column == the column we'return setting
|
||||
// we'll just divide the info and create a new one
|
||||
if (ci.getFirstColumn() == column)
|
||||
{
|
||||
ci.setFirstColumn(( short ) (column + 1));
|
||||
}
|
||||
else
|
||||
{
|
||||
ci.setLastColumn(( short ) (column - 1));
|
||||
}
|
||||
ColumnInfoRecord nci = ( ColumnInfoRecord ) createColInfo();
|
||||
|
||||
nci.setFirstColumn(column);
|
||||
nci.setLastColumn(column);
|
||||
nci.setOptions(ci.getOptions());
|
||||
nci.setXFIndex(ci.getXFIndex());
|
||||
setColumnInfoFields( nci, width, level, hidden, collapsed );
|
||||
|
||||
insertColumn(k, nci);
|
||||
}
|
||||
else
|
||||
{
|
||||
//split to 3 records
|
||||
short lastcolumn = ci.getLastColumn();
|
||||
ci.setLastColumn(( short ) (column - 1));
|
||||
|
||||
ColumnInfoRecord nci = ( ColumnInfoRecord ) createColInfo();
|
||||
nci.setFirstColumn(column);
|
||||
nci.setLastColumn(column);
|
||||
nci.setOptions(ci.getOptions());
|
||||
nci.setXFIndex(ci.getXFIndex());
|
||||
setColumnInfoFields( nci, width, level, hidden, collapsed );
|
||||
insertColumn(++k, nci);
|
||||
|
||||
nci = ( ColumnInfoRecord ) createColInfo();
|
||||
nci.setFirstColumn((short)(column+1));
|
||||
nci.setLastColumn(lastcolumn);
|
||||
nci.setOptions(ci.getOptions());
|
||||
nci.setXFIndex(ci.getXFIndex());
|
||||
nci.setColumnWidth(ci.getColumnWidth());
|
||||
insertColumn(++k, nci);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
// okay so there ISN'T a column info record that cover's this column so lets create one!
|
||||
ColumnInfoRecord nci = ( ColumnInfoRecord ) createColInfo();
|
||||
|
||||
nci.setFirstColumn(column);
|
||||
nci.setLastColumn(column);
|
||||
setColumnInfoFields( nci, width, level, hidden, collapsed );
|
||||
insertColumn(k, nci);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets all non null fields into the <code>ci</code> parameter.
|
||||
*/
|
||||
private void setColumnInfoFields( ColumnInfoRecord ci, Short width, Integer level, Boolean hidden, Boolean collapsed )
|
||||
{
|
||||
if (width != null)
|
||||
ci.setColumnWidth(width.shortValue());
|
||||
if (level != null)
|
||||
ci.setOutlineLevel( level.shortValue() );
|
||||
if (hidden != null)
|
||||
ci.setHidden( hidden.booleanValue() );
|
||||
if (collapsed != null)
|
||||
ci.setCollapsed( collapsed.booleanValue() );
|
||||
}
|
||||
|
||||
public int findColumnIdx(int column, int fromIdx)
|
||||
{
|
||||
if (column < 0)
|
||||
throw new IllegalArgumentException( "column parameter out of range: " + column );
|
||||
if (fromIdx < 0)
|
||||
throw new IllegalArgumentException( "fromIdx parameter out of range: " + fromIdx );
|
||||
|
||||
ColumnInfoRecord ci;
|
||||
for (int k = fromIdx; k < records.size(); k++)
|
||||
{
|
||||
ci = ( ColumnInfoRecord ) records.get(k);
|
||||
if ((ci.getFirstColumn() <= column)
|
||||
&& (column <= ci.getLastColumn()))
|
||||
{
|
||||
return k;
|
||||
}
|
||||
ci = null;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public void collapseColInfoRecords( int columnIdx )
|
||||
{
|
||||
if (columnIdx == 0)
|
||||
return;
|
||||
ColumnInfoRecord previousCol = (ColumnInfoRecord) records.get( columnIdx - 1);
|
||||
ColumnInfoRecord currentCol = (ColumnInfoRecord) records.get( columnIdx );
|
||||
boolean adjacentColumns = previousCol.getLastColumn() == currentCol.getFirstColumn() - 1;
|
||||
if (!adjacentColumns)
|
||||
return;
|
||||
|
||||
boolean columnsMatch =
|
||||
previousCol.getXFIndex() == currentCol.getXFIndex() &&
|
||||
previousCol.getOptions() == currentCol.getOptions() &&
|
||||
previousCol.getColumnWidth() == currentCol.getColumnWidth();
|
||||
|
||||
if (columnsMatch)
|
||||
{
|
||||
previousCol.setLastColumn( currentCol.getLastColumn() );
|
||||
records.remove( columnIdx );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an outline group for the specified columns.
|
||||
* @param fromColumn group from this column (inclusive)
|
||||
* @param toColumn group to this column (inclusive)
|
||||
* @param indent if true the group will be indented by one level,
|
||||
* if false indenting will be removed by one level.
|
||||
*/
|
||||
public void groupColumnRange(short fromColumn, short toColumn, boolean indent)
|
||||
{
|
||||
|
||||
// Set the level for each column
|
||||
int fromIdx = 0;
|
||||
for (int i = fromColumn; i <= toColumn; i++)
|
||||
{
|
||||
int level = 1;
|
||||
int columnIdx = findColumnIdx( i, Math.max(0,fromIdx) );
|
||||
if (columnIdx != -1)
|
||||
{
|
||||
level = ((ColumnInfoRecord)records.get( columnIdx )).getOutlineLevel();
|
||||
if (indent) level++; else level--;
|
||||
level = Math.max(0, level);
|
||||
level = Math.min(7, level);
|
||||
fromIdx = columnIdx - 1; // subtract 1 just in case this column is collapsed later.
|
||||
}
|
||||
setColumn((short)i, null, new Integer(level), null, null);
|
||||
columnIdx = findColumnIdx( i, Math.max(0, fromIdx ) );
|
||||
collapseColInfoRecords( columnIdx );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
|
@ -20,13 +20,10 @@ package org.apache.poi.hssf.record.aggregates;
|
||||
|
||||
import org.apache.poi.hssf.record.Record;
|
||||
import org.apache.poi.hssf.record.RowRecord;
|
||||
import org.apache.poi.hssf.record.DBCellRecord;
|
||||
import org.apache.poi.hssf.record.UnknownRecord;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
@ -39,17 +36,14 @@ public class RowRecordsAggregate
|
||||
{
|
||||
int firstrow = -1;
|
||||
int lastrow = -1;
|
||||
boolean firstdirty = false;
|
||||
boolean lastdirty = false;
|
||||
Map records = null;
|
||||
int size = 0;
|
||||
|
||||
/** Creates a new instance of RowRecordsAggregate */
|
||||
/** Creates a new instance of ValueRecordsAggregate */
|
||||
|
||||
public RowRecordsAggregate()
|
||||
{
|
||||
records = new TreeMap();
|
||||
|
||||
}
|
||||
|
||||
public void insertRow(RowRecord row)
|
||||
@ -73,12 +67,6 @@ public class RowRecordsAggregate
|
||||
size -= row.getRecordSize();
|
||||
|
||||
// Integer integer = new Integer(row.getRowNumber());
|
||||
if (lastrow == row.getRowNumber()) {
|
||||
lastdirty = true;
|
||||
}
|
||||
if (firstrow == row.getRowNumber()) {
|
||||
firstdirty = true;
|
||||
}
|
||||
records.remove(row);
|
||||
}
|
||||
|
||||
@ -99,20 +87,17 @@ public class RowRecordsAggregate
|
||||
|
||||
public int getFirstRowNum()
|
||||
{
|
||||
if (firstdirty) {
|
||||
firstrow = findFirstRow();
|
||||
}
|
||||
return firstrow;
|
||||
}
|
||||
|
||||
public int getLastRowNum()
|
||||
{
|
||||
if (lastdirty) {
|
||||
lastrow = findLastRow();
|
||||
}
|
||||
return lastrow;
|
||||
}
|
||||
|
||||
/*
|
||||
* No need to go through all the records as we're just collecting RowRecords
|
||||
|
||||
public int construct(int offset, List records)
|
||||
{
|
||||
int k = 0;
|
||||
@ -132,86 +117,7 @@ public class RowRecordsAggregate
|
||||
}
|
||||
return k;
|
||||
}
|
||||
|
||||
/** Returns the number of row blocks.
|
||||
* <p/>The row blocks are goupings of rows that contain the DBCell record
|
||||
* after them
|
||||
*/
|
||||
public int getRowBlockCount() {
|
||||
int size = records.size()/DBCellRecord.BLOCK_SIZE;
|
||||
if ((records.size() % DBCellRecord.BLOCK_SIZE) != 0)
|
||||
size++;
|
||||
return size;
|
||||
}
|
||||
|
||||
public int getRowBlockSize(int block) {
|
||||
return 20 * getRowCountForBlock(block);
|
||||
}
|
||||
|
||||
/** Returns the number of physical rows within a block*/
|
||||
public int getRowCountForBlock(int block) {
|
||||
int startIndex = block * DBCellRecord.BLOCK_SIZE;
|
||||
int endIndex = startIndex + DBCellRecord.BLOCK_SIZE - 1;
|
||||
if (endIndex >= records.size())
|
||||
endIndex = records.size()-1;
|
||||
|
||||
return endIndex-startIndex+1;
|
||||
}
|
||||
|
||||
/** Returns the physical row number of the first row in a block*/
|
||||
public int getStartRowNumberForBlock(int block) {
|
||||
//JMH Damn! I would like to directly index a record in the map rather than
|
||||
//iterating through it.
|
||||
int startIndex = block * DBCellRecord.BLOCK_SIZE;
|
||||
Iterator rowIter = records.values().iterator();
|
||||
RowRecord row = null;
|
||||
//Position the iterator at the start of the block
|
||||
for (int i=0; i<=startIndex;i++) {
|
||||
row = (RowRecord)rowIter.next();
|
||||
}
|
||||
|
||||
return row.getRowNumber();
|
||||
}
|
||||
|
||||
/** Returns the physical row number of the end row in a block*/
|
||||
public int getEndRowNumberForBlock(int block) {
|
||||
//JMH Damn! I would like to directly index a record in the map rather than
|
||||
//iterating through it.
|
||||
int endIndex = ((block + 1)*DBCellRecord.BLOCK_SIZE)-1;
|
||||
if (endIndex >= records.size())
|
||||
endIndex = records.size()-1;
|
||||
|
||||
Iterator rowIter = records.values().iterator();
|
||||
RowRecord row = null;
|
||||
for (int i=0; i<=endIndex;i++) {
|
||||
row = (RowRecord)rowIter.next();
|
||||
}
|
||||
return row.getRowNumber();
|
||||
}
|
||||
|
||||
|
||||
/** Serializes a block of the rows */
|
||||
private int serializeRowBlock(final int block, final int offset, byte[] data) {
|
||||
final int startIndex = block*DBCellRecord.BLOCK_SIZE;
|
||||
final int endIndex = startIndex + DBCellRecord.BLOCK_SIZE;
|
||||
|
||||
Iterator rowIterator = records.values().iterator();
|
||||
int pos = offset;
|
||||
|
||||
//JMH TBD create an iterator that can start at a specific index.
|
||||
int i=0;
|
||||
for (;i<startIndex;i++)
|
||||
rowIterator.next();
|
||||
while(rowIterator.hasNext() && (i++ < endIndex)) {
|
||||
RowRecord row = (RowRecord)rowIterator.next();
|
||||
pos += row.serialize(pos, data);
|
||||
}
|
||||
return pos - offset;
|
||||
}
|
||||
|
||||
public int serialize(int offset, byte [] data) {
|
||||
throw new RuntimeException("The serialize method that passes in cells should be used");
|
||||
}
|
||||
|
||||
/**
|
||||
* called by the class that is responsible for writing this sucker.
|
||||
@ -223,38 +129,14 @@ public class RowRecordsAggregate
|
||||
* @return number of bytes written
|
||||
*/
|
||||
|
||||
public int serialize(int offset, byte [] data, ValueRecordsAggregate cells)
|
||||
public int serialize(int offset, byte [] data)
|
||||
{
|
||||
Iterator itr = records.values().iterator();
|
||||
int pos = offset;
|
||||
|
||||
//DBCells are serialized before row records.
|
||||
final int blockCount = getRowBlockCount();
|
||||
for (int block=0;block<blockCount;block++) {
|
||||
//Serialize a block of rows.
|
||||
//Hold onto the position of the first row in the block
|
||||
final int rowStartPos = pos;
|
||||
//Hold onto the size of this block that was serialized
|
||||
final int rowBlockSize = serializeRowBlock(block, pos, data);
|
||||
pos += rowBlockSize;
|
||||
//Serialize a block of cells for those rows
|
||||
final int startRowNumber = getStartRowNumberForBlock(block);
|
||||
final int endRowNumber = getEndRowNumberForBlock(block);
|
||||
DBCellRecord cellRecord = new DBCellRecord();
|
||||
//Note: Cell references start from the second row...
|
||||
int cellRefOffset = (rowBlockSize-20);
|
||||
for (int row=startRowNumber;row<=endRowNumber;row++) {
|
||||
if (cells.rowHasCells(row)) {
|
||||
final int rowCellSize = cells.serializeCellRow(row, pos, data);
|
||||
pos += rowCellSize;
|
||||
//Add the offset to the first cell for the row into the DBCellRecord.
|
||||
cellRecord.addCellOffset((short)cellRefOffset);
|
||||
cellRefOffset = rowCellSize;
|
||||
}
|
||||
}
|
||||
//Calculate Offset from the start of a DBCellRecord to the first Row
|
||||
cellRecord.setRowOffset(pos - rowStartPos);
|
||||
pos += cellRecord.serialize(pos, data);
|
||||
while (itr.hasNext())
|
||||
{
|
||||
pos += (( Record ) itr.next()).serialize(pos, data);
|
||||
}
|
||||
return pos - offset;
|
||||
}
|
||||
@ -303,51 +185,198 @@ public class RowRecordsAggregate
|
||||
}
|
||||
|
||||
/**
|
||||
* used internally to refresh the "last row" when the last row is removed.
|
||||
* Performs a deep clone of the record
|
||||
*/
|
||||
private int findLastRow()
|
||||
public Object clone()
|
||||
{
|
||||
int rownum = lastrow-1;
|
||||
RowRecord r = getRow(rownum);
|
||||
|
||||
while (r == null && rownum >= 0)
|
||||
{
|
||||
r = this.getRow(--rownum);
|
||||
}
|
||||
return rownum;
|
||||
}
|
||||
|
||||
/**
|
||||
* used internally to refresh the "first row" when the first row is removed.
|
||||
*/
|
||||
|
||||
private int findFirstRow()
|
||||
{
|
||||
int rownum = firstrow+1;
|
||||
RowRecord r = getRow(rownum);
|
||||
|
||||
while (r == null && rownum <= getLastRowNum())
|
||||
{
|
||||
r = getRow(++rownum);
|
||||
}
|
||||
|
||||
if (rownum > getLastRowNum())
|
||||
return -1;
|
||||
|
||||
return rownum;
|
||||
}
|
||||
|
||||
|
||||
/** Performs a deep clone of the record*/
|
||||
public Object clone() {
|
||||
RowRecordsAggregate rec = new RowRecordsAggregate();
|
||||
for (Iterator rowIter = getIterator(); rowIter.hasNext();) {
|
||||
for ( Iterator rowIter = getIterator(); rowIter.hasNext(); )
|
||||
{
|
||||
//return the cloned Row Record & insert
|
||||
RowRecord row = (RowRecord)((RowRecord)rowIter.next()).clone();
|
||||
rec.insertRow(row);
|
||||
RowRecord row = (RowRecord) ( (RowRecord) rowIter.next() ).clone();
|
||||
rec.insertRow( row );
|
||||
}
|
||||
return rec;
|
||||
}
|
||||
|
||||
|
||||
public int findStartOfRowOutlineGroup(int row)
|
||||
{
|
||||
// Find the start of the group.
|
||||
RowRecord rowRecord = this.getRow( row );
|
||||
int level = rowRecord.getOutlineLevel();
|
||||
int currentRow = row;
|
||||
while (this.getRow( currentRow ) != null)
|
||||
{
|
||||
rowRecord = this.getRow( currentRow );
|
||||
if (rowRecord.getOutlineLevel() < level)
|
||||
return currentRow + 1;
|
||||
currentRow--;
|
||||
}
|
||||
|
||||
return currentRow + 1;
|
||||
}
|
||||
|
||||
public int findEndOfRowOutlineGroup( int row )
|
||||
{
|
||||
int level = getRow( row ).getOutlineLevel();
|
||||
int currentRow;
|
||||
for (currentRow = row; currentRow < this.getLastRowNum(); currentRow++)
|
||||
{
|
||||
if (getRow(currentRow) == null || getRow(currentRow).getOutlineLevel() < level)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return currentRow-1;
|
||||
}
|
||||
|
||||
public int writeHidden( RowRecord rowRecord, int row, boolean hidden )
|
||||
{
|
||||
int level = rowRecord.getOutlineLevel();
|
||||
while (rowRecord != null && this.getRow(row).getOutlineLevel() >= level)
|
||||
{
|
||||
rowRecord.setZeroHeight( hidden );
|
||||
row++;
|
||||
rowRecord = this.getRow( row );
|
||||
}
|
||||
return row - 1;
|
||||
}
|
||||
|
||||
public void collapseRow( int rowNumber )
|
||||
{
|
||||
|
||||
// Find the start of the group.
|
||||
int startRow = findStartOfRowOutlineGroup( rowNumber );
|
||||
RowRecord rowRecord = (RowRecord) getRow( startRow );
|
||||
|
||||
// Hide all the columns until the end of the group
|
||||
int lastRow = writeHidden( rowRecord, startRow, true );
|
||||
|
||||
// Write collapse field
|
||||
if (getRow(lastRow + 1) != null)
|
||||
{
|
||||
getRow(lastRow + 1).setColapsed( true );
|
||||
}
|
||||
else
|
||||
{
|
||||
RowRecord row = createRow( lastRow + 1);
|
||||
row.setColapsed( true );
|
||||
insertRow( row );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a row record.
|
||||
*
|
||||
* @param row number
|
||||
* @return RowRecord created for the passed in row number
|
||||
* @see org.apache.poi.hssf.record.RowRecord
|
||||
*/
|
||||
public static RowRecord createRow(int row)
|
||||
{
|
||||
RowRecord rowrec = new RowRecord();
|
||||
|
||||
//rowrec.setRowNumber(( short ) row);
|
||||
rowrec.setRowNumber(row);
|
||||
rowrec.setHeight(( short ) 0xff);
|
||||
rowrec.setOptimize(( short ) 0x0);
|
||||
rowrec.setOptionFlags(( short ) 0x100); // seems necessary for outlining
|
||||
rowrec.setXFIndex(( short ) 0xf);
|
||||
return rowrec;
|
||||
}
|
||||
|
||||
public boolean isRowGroupCollapsed( int row )
|
||||
{
|
||||
int collapseRow = findEndOfRowOutlineGroup( row ) + 1;
|
||||
|
||||
if (getRow(collapseRow) == null)
|
||||
return false;
|
||||
else
|
||||
return getRow( collapseRow ).getColapsed();
|
||||
}
|
||||
|
||||
public void expandRow( int rowNumber )
|
||||
{
|
||||
int idx = rowNumber;
|
||||
if (idx == -1)
|
||||
return;
|
||||
|
||||
// If it is already expanded do nothing.
|
||||
if (!isRowGroupCollapsed(idx))
|
||||
return;
|
||||
|
||||
// Find the start of the group.
|
||||
int startIdx = findStartOfRowOutlineGroup( idx );
|
||||
RowRecord row = getRow( startIdx );
|
||||
|
||||
// Find the end of the group.
|
||||
int endIdx = findEndOfRowOutlineGroup( idx );
|
||||
|
||||
// expand:
|
||||
// colapsed bit must be unset
|
||||
// hidden bit gets unset _if_ surrounding groups are expanded you can determine
|
||||
// this by looking at the hidden bit of the enclosing group. You will have
|
||||
// to look at the start and the end of the current group to determine which
|
||||
// is the enclosing group
|
||||
// hidden bit only is altered for this outline level. ie. don't uncollapse contained groups
|
||||
if ( !isRowGroupHiddenByParent( idx ) )
|
||||
{
|
||||
for ( int i = startIdx; i <= endIdx; i++ )
|
||||
{
|
||||
if ( row.getOutlineLevel() == getRow( i ).getOutlineLevel() )
|
||||
getRow( i ).setZeroHeight( false );
|
||||
else if (!isRowGroupCollapsed(i))
|
||||
getRow( i ).setZeroHeight( false );
|
||||
}
|
||||
}
|
||||
|
||||
// Write collapse field
|
||||
getRow( endIdx + 1 ).setColapsed( false );
|
||||
}
|
||||
|
||||
public boolean isRowGroupHiddenByParent( int row )
|
||||
{
|
||||
// Look out outline details of end
|
||||
int endLevel;
|
||||
boolean endHidden;
|
||||
int endOfOutlineGroupIdx = findEndOfRowOutlineGroup( row );
|
||||
if (getRow( endOfOutlineGroupIdx + 1 ) == null)
|
||||
{
|
||||
endLevel = 0;
|
||||
endHidden = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
endLevel = getRow( endOfOutlineGroupIdx + 1).getOutlineLevel();
|
||||
endHidden = getRow( endOfOutlineGroupIdx + 1).getZeroHeight();
|
||||
}
|
||||
|
||||
// Look out outline details of start
|
||||
int startLevel;
|
||||
boolean startHidden;
|
||||
int startOfOutlineGroupIdx = findStartOfRowOutlineGroup( row );
|
||||
if (startOfOutlineGroupIdx - 1 < 0 || getRow(startOfOutlineGroupIdx - 1) == null)
|
||||
{
|
||||
startLevel = 0;
|
||||
startHidden = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
startLevel = getRow( startOfOutlineGroupIdx - 1).getOutlineLevel();
|
||||
startHidden = getRow( startOfOutlineGroupIdx - 1 ).getZeroHeight();
|
||||
}
|
||||
|
||||
if (endLevel > startLevel)
|
||||
{
|
||||
return endHidden;
|
||||
}
|
||||
else
|
||||
{
|
||||
return startHidden;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -19,21 +19,16 @@
|
||||
package org.apache.poi.hssf.record.aggregates;
|
||||
|
||||
import org.apache.poi.hssf.record.*;
|
||||
import org.apache.poi.hssf.record.formula.Ptg;
|
||||
import org.apache.poi.hssf.usermodel.HSSFCell;
|
||||
import org.apache.poi.util.DoubleList2d;
|
||||
import org.apache.poi.util.IntList;
|
||||
import org.apache.poi.util.IntList2d;
|
||||
import org.apache.poi.util.List2d;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.TreeMap;
|
||||
|
||||
/**
|
||||
*
|
||||
* Aggregate value records together. Things are easier to handle that way.
|
||||
*
|
||||
* @author Andrew C. Oliver
|
||||
* @author andy
|
||||
* @author Glen Stampoultzis (glens at apache.org)
|
||||
* @author Jason Height (jheight at chariot dot net dot au)
|
||||
*/
|
||||
@ -42,110 +37,69 @@ public class ValueRecordsAggregate
|
||||
extends Record
|
||||
{
|
||||
public final static short sid = -1000;
|
||||
int firstcell = -1;
|
||||
int lastcell = -1;
|
||||
TreeMap records = null;
|
||||
// int size = 0;
|
||||
|
||||
private final static int DEFAULT_ROWS=10000;
|
||||
private final static int DEFAULT_COLS=256;
|
||||
/** Creates a new instance of ValueRecordsAggregate */
|
||||
|
||||
IntList2d celltype = null;
|
||||
IntList2d xfs = null; // array of style types. Index of XF record
|
||||
DoubleList2d numericcells = null; // numeric and Shared string indicies.
|
||||
List2d formulaptgs = null; // array of arrays of FormulaRecordAggregate
|
||||
List2d stringvals = null; // array of actual string/formula string vals
|
||||
IntList populatedRows = null; //indicies of populated rows
|
||||
int physCells; //physical number of cells
|
||||
|
||||
public CellValueRecordInterface getCell(int row, short col) {
|
||||
return constructRecord(row, col);
|
||||
}
|
||||
|
||||
public int getRecordSize() {
|
||||
int size = 0;
|
||||
Iterator irecs = getIterator();
|
||||
|
||||
while (irecs.hasNext()) {
|
||||
size += (( Record ) irecs.next()).getRecordSize();
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
|
||||
public int serialize(int offset, byte [] data)
|
||||
public ValueRecordsAggregate()
|
||||
{
|
||||
throw new RuntimeException("This method shouldnt be called. ValueRecordsAggregate.serializeCellRow() should be called from RowRecordsAggregate.");
|
||||
records = new TreeMap();
|
||||
}
|
||||
|
||||
public ValueRecordsAggregate() {
|
||||
celltype = new IntList2d();
|
||||
xfs = new IntList2d();
|
||||
numericcells = new DoubleList2d();
|
||||
formulaptgs = new List2d();
|
||||
stringvals = new List2d();
|
||||
populatedRows = new IntList();
|
||||
physCells = 0;
|
||||
}
|
||||
|
||||
public Iterator getIterator() {
|
||||
return new VRAIterator(this);
|
||||
}
|
||||
|
||||
/** Tallies a count of the size of the cell records
|
||||
* that are attached to the rows in the range specified.
|
||||
*/
|
||||
public int getRowCellBlockSize(int startRow, int endRow) {
|
||||
//Make sure that the row has cells
|
||||
while (!rowHasCells(startRow) && (startRow <= endRow))
|
||||
startRow++;
|
||||
if (startRow > endRow) {
|
||||
//Couldnt find any cells between the row range provided.
|
||||
return 0;
|
||||
}
|
||||
|
||||
Iterator cellRec = new VRAIterator(this, startRow, endRow);
|
||||
int size = 0;
|
||||
while (cellRec.hasNext()) {
|
||||
CellValueRecordInterface cell = (CellValueRecordInterface)cellRec.next();
|
||||
int row = cell.getRow();
|
||||
if ((row >=startRow) && (row <= endRow))
|
||||
size += ((Record)cell).getRecordSize();
|
||||
}
|
||||
return size;
|
||||
}
|
||||
|
||||
/** Returns true if the row has cells attached to it */
|
||||
public boolean rowHasCells(int row)
|
||||
public void insertCell(CellValueRecordInterface cell)
|
||||
{
|
||||
if (row == -1)
|
||||
return false;
|
||||
|
||||
int col = 0;
|
||||
while (celltype.isAllocated( col, row))
|
||||
/* if (records.get(cell) == null)
|
||||
{
|
||||
if (celltype.get( col, row ) != 0)
|
||||
return true;
|
||||
col++;
|
||||
size += (( Record ) cell).getRecordSize();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Serializes the cells that are allocated to a certain row range*/
|
||||
public int serializeCellRow(final int row, int offset, byte [] data)
|
||||
else
|
||||
{
|
||||
Iterator itr = new VRAIterator(this, row);
|
||||
int pos = offset;
|
||||
size += (( Record ) cell).getRecordSize()
|
||||
- (( Record ) records.get(cell)).getRecordSize();
|
||||
}*/
|
||||
|
||||
while (itr.hasNext())
|
||||
// XYLocator xy = new XYLocator(cell.getRow(), cell.getColumn());
|
||||
Object o = records.put(cell, cell);
|
||||
|
||||
if ((cell.getColumn() < firstcell) || (firstcell == -1))
|
||||
{
|
||||
CellValueRecordInterface cell = (CellValueRecordInterface)itr.next();
|
||||
pos += (( Record ) cell).serialize(pos, data);
|
||||
firstcell = cell.getColumn();
|
||||
}
|
||||
if ((cell.getColumn() > lastcell) || (lastcell == -1))
|
||||
{
|
||||
lastcell = cell.getColumn();
|
||||
}
|
||||
return pos - offset;
|
||||
}
|
||||
|
||||
public void removeCell(CellValueRecordInterface cell)
|
||||
{
|
||||
// size -= (( Record ) cell).getRecordSize();
|
||||
|
||||
// XYLocator xy = new XYLocator(cell.getRow(), cell.getColumn());
|
||||
records.remove(cell);
|
||||
}
|
||||
|
||||
public int getPhysicalNumberOfCells()
|
||||
{
|
||||
return records.size();
|
||||
}
|
||||
|
||||
public int getFirstCellNum()
|
||||
{
|
||||
return firstcell;
|
||||
}
|
||||
|
||||
public int getLastCellNum()
|
||||
{
|
||||
return lastcell;
|
||||
}
|
||||
|
||||
public int construct(int offset, List records)
|
||||
{
|
||||
int k;
|
||||
int k = 0;
|
||||
|
||||
FormulaRecordAggregate lastFormulaAggregate = null;
|
||||
|
||||
@ -166,7 +120,9 @@ public class ValueRecordsAggregate
|
||||
{
|
||||
lastFormulaAggregate.setStringRecord((StringRecord)rec);
|
||||
}
|
||||
else if (rec instanceof SharedFormulaRecord) {
|
||||
else if (rec instanceof SharedFormulaRecord)
|
||||
{
|
||||
//these follow the first formula in a group
|
||||
lastFormulaAggregate.setSharedFormulaRecord((SharedFormulaRecord)rec);
|
||||
}
|
||||
else if (rec.isValue())
|
||||
@ -177,518 +133,140 @@ public class ValueRecordsAggregate
|
||||
return k;
|
||||
}
|
||||
|
||||
public int getPhysicalNumberOfCells() {
|
||||
return physCells;
|
||||
}
|
||||
|
||||
public int getPhysicalNumberOfCellsInRow(int row) {
|
||||
int count = -1;
|
||||
int col = -1;
|
||||
|
||||
while (col > 0 || count == -1) {
|
||||
col = findNextPopulatedCell(row,col);
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
public void setValue(int row, short cell, double val) {
|
||||
numericcells.set(cell, row, val);
|
||||
}
|
||||
|
||||
public void setStyle(int row, short cell, short xf) {
|
||||
xfs.set(cell, row, xf);
|
||||
}
|
||||
|
||||
|
||||
public Iterator getRowCellIterator(int row) {
|
||||
return new VRAIterator(this, row);
|
||||
}
|
||||
|
||||
public void removeRow(int row) {
|
||||
Iterator iterator = this.getRowCellIterator(row);
|
||||
while(iterator.hasNext()) {
|
||||
iterator.next();
|
||||
iterator.remove();
|
||||
}
|
||||
}
|
||||
|
||||
public void removeCell(CellValueRecordInterface cell) {
|
||||
if (cell == null)
|
||||
return;
|
||||
|
||||
int rownum = cell.getRow();
|
||||
int colnum = cell.getColumn();
|
||||
|
||||
if (celltype.get( colnum, rownum ) != 0)
|
||||
{
|
||||
celltype.set( colnum, rownum, 0 );
|
||||
if (rowHasCells( rownum ))
|
||||
populatedRows.removeValue( populatedRows.indexOf( rownum ) );
|
||||
physCells--;
|
||||
}
|
||||
else
|
||||
{
|
||||
//this cell doesn't exist... the old code falls through so lets make this fall through too.
|
||||
}
|
||||
}
|
||||
|
||||
public void insertCell( CellValueRecordInterface cell )
|
||||
{
|
||||
int rownum = cell.getRow();
|
||||
int colnum = cell.getColumn();
|
||||
int xf = cell.getXFIndex();
|
||||
int type = determineType(cell);
|
||||
|
||||
if (!populatedRows.contains( rownum ))
|
||||
{
|
||||
populatedRows.add(rownum); //this means we must never have had this row inserted
|
||||
}
|
||||
|
||||
// ensureRows(rownum);
|
||||
|
||||
// IntList ctRow = (IntList)celltype.get(rownum);
|
||||
// IntList xfRow = (IntList)xfs.get(rownum);
|
||||
|
||||
// adjustIntList(ctRow, colnum+1);
|
||||
// adjustIntList(xfRow, colnum+1);
|
||||
|
||||
celltype.set(colnum, rownum, type);
|
||||
xfs.set( colnum, rownum, xf);
|
||||
|
||||
insertCell(cell, type);
|
||||
}
|
||||
|
||||
CellValueRecordInterface constructRecord(int row, int col) {
|
||||
|
||||
if (celltype.get( col, row) == 0)
|
||||
throw new ArrayIndexOutOfBoundsException("No cell at position col" + col + ", row " + row + ".");
|
||||
// if (celltype.size() < row || ((IntList)celltype.get(row)).size() < col) {
|
||||
// throw new ArrayIndexOutOfBoundsException("constructRecord called with row = "+row+
|
||||
// "and col ="+col+" but there are only "+celltype.size()+" rows and "+
|
||||
// ((IntList)celltype.get(row)).size()+" cols!!");
|
||||
// }
|
||||
|
||||
CellValueRecordInterface retval;
|
||||
int type = celltype.get( col, row );
|
||||
|
||||
switch (type) {
|
||||
case HSSFCell.CELL_TYPE_NUMERIC:
|
||||
NumberRecord nrecord = new NumberRecord();
|
||||
nrecord.setColumn((short)col);
|
||||
nrecord.setRow(row);
|
||||
nrecord.setValue( numericcells.get( col, row));
|
||||
nrecord.setXFIndex((short)xfs.get( col, row ));
|
||||
// nrecord.setXFIndex((short)((IntList)xfs.get(row)).get(col));
|
||||
retval = nrecord;
|
||||
break;
|
||||
case HSSFCell.CELL_TYPE_STRING:
|
||||
LabelSSTRecord srecord = new LabelSSTRecord();
|
||||
srecord.setColumn((short)col);
|
||||
srecord.setRow(row);
|
||||
srecord.setSSTIndex((int) numericcells.get( col, row));
|
||||
srecord.setXFIndex((short)xfs.get( col, row ));
|
||||
retval=srecord;
|
||||
break;
|
||||
case HSSFCell.CELL_TYPE_BLANK:
|
||||
BlankRecord brecord = new BlankRecord();
|
||||
brecord.setColumn((short)col);
|
||||
brecord.setRow(row);
|
||||
brecord.setXFIndex((short)xfs.get( col, row ));
|
||||
retval=brecord;
|
||||
break;
|
||||
case HSSFCell.CELL_TYPE_FORMULA:
|
||||
/*
|
||||
FormulaRecord fr = new FormulaRecord();
|
||||
fr.setColumn((short)col);
|
||||
fr.setOptions((short)2);
|
||||
|
||||
fr.setRow(row);
|
||||
fr.setXFIndex((short)xfs.get( col, row ));
|
||||
StringRecord st = null;
|
||||
String strval = (String)stringvals.get( col, row );
|
||||
List expressionlist = (List) formulaptgs.get( col, row);
|
||||
fr.setParsedExpression(expressionlist);
|
||||
fr.setExpressionLength(calculatePtgSize(expressionlist));
|
||||
if (strval != null) {
|
||||
st = new StringRecord();
|
||||
st.setString(strval);
|
||||
}
|
||||
FormulaRecordAggregate frarecord = new FormulaRecordAggregate(fr,st);
|
||||
|
||||
retval= frarecord;
|
||||
break;
|
||||
/**
|
||||
* called by the class that is responsible for writing this sucker.
|
||||
* Subclasses should implement this so that their data is passed back in a
|
||||
* byte array.
|
||||
*
|
||||
* @param offset to begin writing at
|
||||
* @param data byte array containing instance data
|
||||
* @return number of bytes written
|
||||
*/
|
||||
retval = (CellValueRecordInterface) formulaptgs.get( col, row );
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException("UnImplemented Celltype "+type);
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
private short calculatePtgSize(List expressionlist)
|
||||
public int serialize(int offset, byte [] data)
|
||||
{
|
||||
short retval = 0;
|
||||
Iterator iter = expressionlist.iterator();
|
||||
while (iter.hasNext()) {
|
||||
retval += (short)((Ptg)iter.next()).getSize();
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
Iterator itr = records.values().iterator();
|
||||
int pos = offset;
|
||||
|
||||
private void insertCell(CellValueRecordInterface cell, int type)
|
||||
while (itr.hasNext())
|
||||
{
|
||||
int rownum = cell.getRow();
|
||||
int colnum = cell.getColumn();
|
||||
|
||||
// DoubleList nmRow = (DoubleList)numericcells.get(rownum);
|
||||
|
||||
switch (type) {
|
||||
case HSSFCell.CELL_TYPE_NUMERIC:
|
||||
NumberRecord nrecord = (NumberRecord)cell;
|
||||
// adjustDoubleList(nmRow, colnum+1);
|
||||
numericcells.set(colnum, rownum, nrecord.getValue());
|
||||
physCells++;
|
||||
break;
|
||||
case HSSFCell.CELL_TYPE_STRING:
|
||||
LabelSSTRecord srecord = (LabelSSTRecord)cell;
|
||||
// adjustDoubleList(nmRow, colnum+1);
|
||||
numericcells.set(colnum, rownum, srecord.getSSTIndex());
|
||||
// nmRow.set(colnum,srecord.getSSTIndex());
|
||||
physCells++;
|
||||
break;
|
||||
case HSSFCell.CELL_TYPE_FORMULA:
|
||||
FormulaRecordAggregate frarecord = (FormulaRecordAggregate)cell;
|
||||
formulaptgs.set( colnum, rownum, frarecord);
|
||||
physCells++;
|
||||
break;
|
||||
/*
|
||||
// List ptRow = (List)formulaptgs.get(rownum);
|
||||
// List stRow = (List)stringvals.get(rownum);
|
||||
FormulaRecordAggregate frarecord = (FormulaRecordAggregate)cell;
|
||||
// adjustDoubleList(nmRow, colnum+1);
|
||||
// adjustObjectList(ptRow, colnum+1);
|
||||
// adjustStringList(stRow, colnum+1);
|
||||
numericcells.set(colnum, rownum, frarecord.getFormulaRecord().getValue());
|
||||
formulaptgs.set( colnum, rownum, frarecord.getFormulaRecord().getParsedExpression() );
|
||||
StringRecord str = frarecord.getStringRecord();
|
||||
if ( str != null )
|
||||
stringvals.set( colnum, rownum, str.getString() );
|
||||
else
|
||||
stringvals.set( colnum, rownum, null );
|
||||
physCells++;
|
||||
break;
|
||||
pos += (( Record ) itr.next()).serialize(pos, data);
|
||||
}
|
||||
return pos - offset;
|
||||
}
|
||||
/**
|
||||
* called by the constructor, should set class level fields. Should throw
|
||||
* runtime exception for bad/icomplete data.
|
||||
*
|
||||
* @param data raw data
|
||||
* @param size size of data
|
||||
* @param offset of the record's data (provided a big array of the file)
|
||||
*/
|
||||
case HSSFCell.CELL_TYPE_BLANK:
|
||||
//BlankRecord brecord = (BlankRecord)cell;
|
||||
physCells++;
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new RuntimeException("UnImplemented Celltype "+cell.toString());
|
||||
}
|
||||
}
|
||||
|
||||
private int determineType(CellValueRecordInterface cval)
|
||||
protected void fillFields(byte [] data, short size, int offset)
|
||||
{
|
||||
Record record = ( Record ) cval;
|
||||
int sid = record.getSid();
|
||||
int retval = 0;
|
||||
|
||||
switch (sid)
|
||||
{
|
||||
|
||||
case NumberRecord.sid :
|
||||
retval = HSSFCell.CELL_TYPE_NUMERIC;
|
||||
break;
|
||||
|
||||
case BlankRecord.sid :
|
||||
retval = HSSFCell.CELL_TYPE_BLANK;
|
||||
break;
|
||||
|
||||
case LabelSSTRecord.sid :
|
||||
retval = HSSFCell.CELL_TYPE_STRING;
|
||||
break;
|
||||
|
||||
case FormulaRecordAggregate.sid :
|
||||
retval = HSSFCell.CELL_TYPE_FORMULA;
|
||||
break;
|
||||
|
||||
case BoolErrRecord.sid :
|
||||
BoolErrRecord boolErrRecord = ( BoolErrRecord ) record;
|
||||
|
||||
retval = (boolErrRecord.isBoolean())
|
||||
? HSSFCell.CELL_TYPE_BOOLEAN
|
||||
: HSSFCell.CELL_TYPE_ERROR;
|
||||
break;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
// private void ensureRows(int rownum) {
|
||||
//adjustRows(celltype, rownum+1, IntList.class);
|
||||
// adjustRows(xfs, rownum+1, IntList.class);
|
||||
// adjustRows(numericcells, rownum+1, DoubleList.class);
|
||||
// adjustRows(formulaptgs, rownum+1, ArrayList.class);
|
||||
// adjustRows(stringvals, rownum+1, ArrayList.class);
|
||||
|
||||
// }
|
||||
|
||||
// private void adjustRows(List list, int size, Class theclass) {
|
||||
// while (list.size() < size) {
|
||||
// try {
|
||||
// list.add(theclass.newInstance());
|
||||
// } catch (Exception e) {
|
||||
// throw new RuntimeException("Could Not Instantiate Row in adjustRows");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// private void adjustIntList(IntList list, int size) {
|
||||
// while (list.size() < size) {
|
||||
// list.add(-1);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private void adjustDoubleList(DoubleList list, int size) {
|
||||
// while (list.size() < size) {
|
||||
// list.add(-1);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private void adjustObjectList(List list, int size) {
|
||||
// while (list.size() < size) {
|
||||
// list.add(new ArrayList());
|
||||
// }
|
||||
// }
|
||||
|
||||
// private void adjustStringList(List list, int size) {
|
||||
// while (list.size() < size) {
|
||||
// list.add(new String());
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* Find the next populated cell in the row starting from but not
|
||||
* including the current column
|
||||
* called by constructor, should throw runtime exception in the event of a
|
||||
* record passed with a differing ID.
|
||||
*
|
||||
* @return the next valid column number
|
||||
* @param id alleged id for this record
|
||||
*/
|
||||
protected int findNextPopulatedCell(int row, int col) {
|
||||
|
||||
int currentCol = col + 1;
|
||||
while (celltype.isAllocated( currentCol, row ))
|
||||
protected void validateSid(short id)
|
||||
{
|
||||
if (celltype.get( currentCol, row) > 0)
|
||||
return currentCol;
|
||||
currentCol++;
|
||||
}
|
||||
return -1;
|
||||
|
||||
/*
|
||||
IntList ctRow = (IntList) celltype.get(row);
|
||||
int retval = -1;
|
||||
if (ctRow.size() > col+1) {
|
||||
for (int k = col+1; k < ctRow.size() +1; k++) {
|
||||
|
||||
if (k != ctRow.size()) {
|
||||
int val = ctRow.get(k);
|
||||
|
||||
if (val != -1) {
|
||||
retval = k;
|
||||
break;
|
||||
} // end if (val !=...
|
||||
|
||||
} //end if (k !=..
|
||||
|
||||
} //end for
|
||||
|
||||
} //end if (ctRow.size()...
|
||||
return retval;
|
||||
/**
|
||||
* return the non static version of the id for this record.
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
public short getSid() {
|
||||
public short getSid()
|
||||
{
|
||||
return sid;
|
||||
}
|
||||
|
||||
public int getRecordSize() {
|
||||
|
||||
public void fillFields(byte[] data, short size, int offset) {
|
||||
int size = 0;
|
||||
Iterator irecs = records.values().iterator();
|
||||
|
||||
while (irecs.hasNext()) {
|
||||
size += (( Record ) irecs.next()).getRecordSize();
|
||||
}
|
||||
|
||||
protected void validateSid(short sid) {
|
||||
|
||||
return size;
|
||||
// return size;
|
||||
}
|
||||
|
||||
public Iterator getIterator()
|
||||
{
|
||||
return records.values().iterator();
|
||||
}
|
||||
|
||||
/** Performs a deep clone of the record*/
|
||||
public Object clone() {
|
||||
ValueRecordsAggregate rec = new ValueRecordsAggregate();
|
||||
for (Iterator valIter = getIterator(); valIter.hasNext();) {
|
||||
CellValueRecordInterface val = (CellValueRecordInterface)((CellValueRecordInterface)valIter.next()).clone();
|
||||
rec.insertCell(val);
|
||||
}
|
||||
return rec;
|
||||
}
|
||||
}
|
||||
|
||||
class VRAIterator implements Iterator {
|
||||
private boolean hasNext;
|
||||
private ValueRecordsAggregate vra;
|
||||
private int popindex;
|
||||
private int row;
|
||||
private int rowlimit;
|
||||
CellValueRecordInterface current = null;
|
||||
CellValueRecordInterface next = null;
|
||||
|
||||
public VRAIterator(ValueRecordsAggregate vra) {
|
||||
this(vra, 0, -1);
|
||||
}
|
||||
|
||||
public VRAIterator(ValueRecordsAggregate vra, int row) {
|
||||
this(vra, row, row);
|
||||
}
|
||||
|
||||
public VRAIterator(ValueRecordsAggregate vra, int startRow, int endRow) {
|
||||
this.vra = vra;
|
||||
this.row = startRow;
|
||||
this.rowlimit = endRow;
|
||||
this.popindex = vra.populatedRows.indexOf(row);
|
||||
if (this.popindex == -1) {
|
||||
if (vra.populatedRows.size() == 0)
|
||||
hasNext = false;
|
||||
else
|
||||
{
|
||||
int lastRow = vra.populatedRows.get(vra.populatedRows.size()-1);
|
||||
if (lastRow == -1)
|
||||
{
|
||||
hasNext = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = row; i <= lastRow; i++)
|
||||
{
|
||||
this.popindex = vra.populatedRows.indexOf(i);
|
||||
if (popindex != -1)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (popindex == -1)
|
||||
hasNext = false;
|
||||
else
|
||||
{
|
||||
next = findNextCell(null);
|
||||
hasNext = (next != null);
|
||||
}
|
||||
}
|
||||
} else if (vra.getPhysicalNumberOfCells() > 0) {
|
||||
next = findNextCell(null);
|
||||
hasNext = (next != null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public boolean hasNext() {
|
||||
return hasNext;
|
||||
}
|
||||
|
||||
public Object next() {
|
||||
current = next;
|
||||
next = findNextCell(current);
|
||||
if (next == null) {
|
||||
hasNext = false;
|
||||
}
|
||||
return current;
|
||||
}
|
||||
|
||||
public void remove() {
|
||||
vra.removeCell(current);
|
||||
}
|
||||
|
||||
private CellValueRecordInterface findNextCell(CellValueRecordInterface current) {
|
||||
// IntList ctRow = null;
|
||||
int rowNum = -1;
|
||||
int colNum = -1;
|
||||
int newCol = -1;
|
||||
boolean wasntFirst = false;
|
||||
|
||||
if (current != null) {
|
||||
wasntFirst = true;
|
||||
rowNum = current.getRow();
|
||||
colNum = current.getColumn();
|
||||
// ctRow = ((IntList)vra.celltype.get(rowNum));
|
||||
}
|
||||
|
||||
//if popindex = row iwth no cells, fast forward till we get to one with size > 0
|
||||
while (!vra.rowHasCells( rowNum ) && vra.populatedRows.size() > popindex) {
|
||||
if (wasntFirst == true) {
|
||||
throw new RuntimeException("CANT HAPPEN WASNTFIRST BUT WE'RE FASTFORWARDING!");
|
||||
}
|
||||
rowNum = vra.populatedRows.get(popindex);
|
||||
if (!vra.rowHasCells( rowNum )) {
|
||||
if ((rowlimit == -1)||(rowNum<=rowlimit)) {
|
||||
popindex++;
|
||||
} else {
|
||||
this.hasNext = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*while ((ctRow == null || ctRow.size() == 0) && vra.populatedRows.size() > popindex) {
|
||||
if (wasntFirst == true) {
|
||||
throw new RuntimeException("CANT HAPPEN WASNTFIRST BUT WE'RE FASTFORWARDING!");
|
||||
}
|
||||
rowNum = vra.populatedRows.get(popindex);
|
||||
ctRow = (IntList)vra.celltype.get(rowNum);
|
||||
if (ctRow.size() == 0) {
|
||||
if ((rowlimit == -1)||(rowNum<=rowlimit)) {
|
||||
popindex++;
|
||||
} else {
|
||||
this.hasNext = false;
|
||||
}
|
||||
}
|
||||
} */
|
||||
|
||||
if (rowNum == -1) {
|
||||
return null;
|
||||
}
|
||||
|
||||
while (newCol == -1) {
|
||||
newCol = findNextPopulatedCell(rowNum,colNum);
|
||||
colNum = newCol;
|
||||
if (colNum == -1) { //end of row, forward one row
|
||||
popindex++;
|
||||
if (popindex < vra.populatedRows.size() && ((rowlimit == -1)||(rowNum<=rowlimit))) {
|
||||
rowNum = vra.populatedRows.get(popindex);
|
||||
//Return null if the row is out of range
|
||||
if ((rowlimit != -1) &&( rowNum > rowlimit))
|
||||
return null;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return vra.constructRecord(rowNum,colNum);
|
||||
}
|
||||
|
||||
private int findNextPopulatedCell(int row, int col) {
|
||||
|
||||
/*IntList ctRow = (IntList) vra.celltype.get(row);
|
||||
int retval = -1;
|
||||
if (ctRow.size() > col+1) {
|
||||
for (int k = col+1; k < ctRow.size() +1; k++) {
|
||||
|
||||
if (k != ctRow.size()) {
|
||||
int val = ctRow.get(k);
|
||||
|
||||
if (val != -1) {
|
||||
retval = k;
|
||||
break;
|
||||
} // end if (val !=...
|
||||
|
||||
} //end if (k !=..
|
||||
|
||||
} //end for
|
||||
|
||||
} //end if (ctRow.size()...
|
||||
return retval;*/
|
||||
return vra.findNextPopulatedCell(row, col);
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
* class XYLocator implements Comparable {
|
||||
* private int row = 0;
|
||||
* private int col = 0;
|
||||
* public XYLocator(int row, int col) {
|
||||
* this.row = row;
|
||||
* this.col = col;
|
||||
* }
|
||||
*
|
||||
* public int getRow() {
|
||||
* return row;
|
||||
* }
|
||||
*
|
||||
* public int getCol() {
|
||||
* return col;
|
||||
* }
|
||||
*
|
||||
* public int compareTo(Object obj) {
|
||||
* XYLocator loc = (XYLocator)obj;
|
||||
*
|
||||
* if (this.getRow() == loc.getRow() &&
|
||||
* this.getCol() == loc.getCol() )
|
||||
* return 0;
|
||||
*
|
||||
* if (this.getRow() < loc.getRow())
|
||||
* return -1;
|
||||
*
|
||||
* if (this.getRow() > loc.getRow())
|
||||
* return 1;
|
||||
*
|
||||
* if (this.getCol() < loc.getCol())
|
||||
* return -1;
|
||||
*
|
||||
* if (this.getCol() > loc.getCol())
|
||||
* return 1;
|
||||
*
|
||||
* return -1;
|
||||
*
|
||||
* }
|
||||
*
|
||||
* public boolean equals(Object obj) {
|
||||
* if (!(obj instanceof XYLocator)) return false;
|
||||
*
|
||||
* XYLocator loc = (XYLocator)obj;
|
||||
* if (this.getRow() == loc.getRow()
|
||||
* &&
|
||||
* this.getCol() == loc.getCol()
|
||||
* ) return true;
|
||||
* return false;
|
||||
* }
|
||||
*
|
||||
*
|
||||
* }
|
||||
*/
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,7 +15,6 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
* AddPtg.java
|
||||
*
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,7 +14,6 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
@ -200,7 +198,7 @@ public class Area3DPtg extends Ptg
|
||||
|
||||
/**
|
||||
* sets the first row to relative or not
|
||||
* @param rel specifies whether the first row is relative or not
|
||||
* @param isRelative or not.
|
||||
*/
|
||||
public void setFirstRowRelative( boolean rel )
|
||||
{
|
||||
@ -217,7 +215,7 @@ public class Area3DPtg extends Ptg
|
||||
|
||||
/**
|
||||
* set whether the last row is relative or not
|
||||
* @param rel specifies whether the last row is relative
|
||||
* @param last row relative
|
||||
*/
|
||||
public void setLastRowRelative( boolean rel )
|
||||
{
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -16,11 +15,6 @@
|
||||
==================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
* AreaPtg.java
|
||||
*
|
||||
* Created on November 17, 2001, 9:30 PM
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
@ -134,7 +128,7 @@ public class AreaPtg
|
||||
}
|
||||
|
||||
/**
|
||||
* @param row last row number in the area
|
||||
* @param last row number in the area
|
||||
*/
|
||||
public void setLastRow(short row)
|
||||
{
|
||||
@ -230,7 +224,7 @@ public class AreaPtg
|
||||
|
||||
/**
|
||||
* set whether the last row is relative or not
|
||||
* @param rel specifies whether the last row is relative or not
|
||||
* @param last row relative
|
||||
*/
|
||||
public void setLastRowRelative(boolean rel) {
|
||||
field_4_last_column=rowRelative.setShortBoolean(field_4_last_column,rel);
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -16,11 +15,6 @@
|
||||
==================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
* AttrPtg.java
|
||||
*
|
||||
* Created on November 21, 2001, 1:20 PM
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.hssf.model.Workbook;
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,12 +14,6 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
* BoolPtg.java
|
||||
*
|
||||
* Created on Septemeber 26, 2002, 7:37 PM
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -16,11 +15,6 @@
|
||||
==================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
* AddPtg.java
|
||||
*
|
||||
* Created on October 29, 2001, 7:48 PM
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,6 +14,7 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
public abstract class ControlPtg
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -16,11 +15,6 @@
|
||||
==================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
* DividePtg.java
|
||||
*
|
||||
* Created on November 4, 2001, 9:04 PM
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,16 +15,8 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
* EqualPtg.java
|
||||
*
|
||||
* Created on November 17, 2001, 12:51 PM
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.poi.hssf.model.Workbook;
|
||||
|
||||
/**
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,12 +15,6 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
* ExpPtg.java
|
||||
*
|
||||
* Created on November 25, 2001, 4:00 PM
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.hssf.model.Workbook;
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,6 +14,7 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,6 +14,7 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
|
||||
|
@ -1,20 +1,4 @@
|
||||
|
||||
/* ====================================================================
|
||||
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.
|
||||
==================================================================== */
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2003-2004 Apache Software Foundation
|
||||
|
||||
@ -31,8 +15,8 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.hssf.model.Workbook;
|
||||
|
||||
@ -49,23 +33,21 @@ public class GreaterEqualPtg
|
||||
public final static int SIZE = 1;
|
||||
public final static byte sid = 0x0c;
|
||||
|
||||
/**
|
||||
* Creates new GreaterEqualPtg
|
||||
*/
|
||||
/** Creates new GreaterEqualPtg */
|
||||
|
||||
public GreaterEqualPtg()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public GreaterEqualPtg( byte[] data, int offset )
|
||||
public GreaterEqualPtg(byte [] data, int offset)
|
||||
{
|
||||
|
||||
// doesn't need anything
|
||||
}
|
||||
|
||||
|
||||
public void writeBytes( byte[] array, int offset )
|
||||
public void writeBytes(byte [] array, int offset)
|
||||
{
|
||||
array[offset + 0] = sid;
|
||||
array[ offset + 0 ] = sid;
|
||||
}
|
||||
|
||||
public int getSize()
|
||||
@ -83,25 +65,24 @@ public class GreaterEqualPtg
|
||||
return 2;
|
||||
}
|
||||
|
||||
public String toFormulaString( Workbook book )
|
||||
public String toFormulaString(Workbook book)
|
||||
{
|
||||
return ">=";
|
||||
}
|
||||
|
||||
public String toFormulaString( String[] operands )
|
||||
{
|
||||
public String toFormulaString(String[] operands) {
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append( operands[0] );
|
||||
buffer.append( toFormulaString( (Workbook) null ) );
|
||||
buffer.append( operands[1] );
|
||||
|
||||
buffer.append(operands[ 0 ]);
|
||||
|
||||
buffer.append(toFormulaString((Workbook)null));
|
||||
buffer.append(operands[ 1 ]);
|
||||
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public Object clone()
|
||||
{
|
||||
public Object clone() {
|
||||
return new GreaterEqualPtg();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
|
||||
@ -95,10 +94,11 @@ public class GreaterThanPtg
|
||||
|
||||
/**
|
||||
* Implementation of method from Ptg
|
||||
* @param refs the Sheet References
|
||||
*/
|
||||
public String toFormulaString(Workbook book)
|
||||
{
|
||||
return GreaterThanPtg.GREATERTHAN;
|
||||
return this.GREATERTHAN;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
|
@ -1,20 +1,4 @@
|
||||
|
||||
/* ====================================================================
|
||||
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.
|
||||
==================================================================== */
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2003-2004 Apache Software Foundation
|
||||
|
||||
@ -31,11 +15,13 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
|
||||
import org.apache.poi.hssf.model.Workbook;
|
||||
|
||||
|
||||
/**
|
||||
* Ptg class to implement less than or equal
|
||||
*
|
||||
@ -52,6 +38,7 @@ public class LessEqualPtg
|
||||
*/
|
||||
public LessEqualPtg()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public LessEqualPtg( byte[] data, int offset )
|
||||
@ -97,6 +84,4 @@ public class LessEqualPtg
|
||||
{
|
||||
return new LessEqualPtg();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -104,10 +103,11 @@ public class LessThanPtg
|
||||
|
||||
/**
|
||||
* Implementation of method from Ptg
|
||||
* @param refs the Sheet References
|
||||
*/
|
||||
public String toFormulaString(Workbook book)
|
||||
{
|
||||
return LessThanPtg.LESSTHAN;
|
||||
return this.LESSTHAN;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,7 +14,6 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.hssf.model.Workbook;
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -14,13 +13,6 @@
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
* MultiplyPtg.java
|
||||
*
|
||||
* Created on November 4, 2001, 8:26 PM
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,12 +14,6 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
* NamePtg.java
|
||||
*
|
||||
* Created on November 25, 2001, 3:30 PM
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,12 +14,6 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
* NameXPtg.java
|
||||
*
|
||||
* Created on May 5, 2003
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
|
@ -1,3 +1,4 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2003-2004 Apache Software Foundation
|
||||
|
||||
@ -20,30 +21,30 @@ import org.apache.poi.hssf.model.Workbook;
|
||||
|
||||
/**
|
||||
* Ptg class to implement not equal
|
||||
*
|
||||
* @author fred at stsci dot edu
|
||||
*/
|
||||
|
||||
public class NotEqualPtg
|
||||
extends OperationPtg
|
||||
{
|
||||
public final static int SIZE = 1;
|
||||
public final static byte sid = 0x0e;
|
||||
|
||||
/** Creates new NotEqualPtg */
|
||||
/**
|
||||
* Creates new NotEqualPtg
|
||||
*/
|
||||
public NotEqualPtg()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public NotEqualPtg(byte [] data, int offset)
|
||||
public NotEqualPtg( byte[] data, int offset )
|
||||
{
|
||||
|
||||
// doesn't need anything
|
||||
}
|
||||
|
||||
public void writeBytes(byte [] array, int offset)
|
||||
public void writeBytes( byte[] array, int offset )
|
||||
{
|
||||
array[ offset + 0 ] = sid;
|
||||
array[offset + 0] = sid;
|
||||
}
|
||||
|
||||
public int getSize()
|
||||
@ -61,25 +62,26 @@ public class NotEqualPtg
|
||||
return 2;
|
||||
}
|
||||
|
||||
public String toFormulaString(Workbook book)
|
||||
public String toFormulaString( Workbook book )
|
||||
{
|
||||
return "<>";
|
||||
}
|
||||
|
||||
public String toFormulaString(String[] operands) {
|
||||
public String toFormulaString( String[] operands )
|
||||
{
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
|
||||
buffer.append( operands[0] );
|
||||
|
||||
buffer.append( toFormulaString( (Workbook) null ) );
|
||||
buffer.append( operands[1] );
|
||||
|
||||
buffer.append(operands[ 0 ]);
|
||||
buffer.append(toFormulaString((Workbook)null));
|
||||
buffer.append(operands[ 1 ]);
|
||||
return buffer.toString();
|
||||
}
|
||||
|
||||
public Object clone() {
|
||||
public Object clone()
|
||||
{
|
||||
return new NotEqualPtg();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,7 +14,6 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
|
@ -1,6 +1,5 @@
|
||||
|
||||
/* ====================================================================
|
||||
Copyright 2002-2004 Apache Software Foundation
|
||||
Copyright 2003-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.
|
||||
@ -15,15 +14,9 @@
|
||||
limitations under the License.
|
||||
==================================================================== */
|
||||
|
||||
|
||||
/*
|
||||
* OperationPtg.java
|
||||
*
|
||||
* Created on October 29, 2001, 7:53 PM
|
||||
*/
|
||||
package org.apache.poi.hssf.record.formula;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* defines a Ptg that is an operation instead of an operand
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user