Fix inconsistent whitespace

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1613174 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2014-07-24 16:22:28 +00:00
parent fec4eb7a12
commit f91eee5846

View File

@ -163,122 +163,121 @@ public class HSSFOptimiser {
} }
} }
/** /**
* Goes through the Wokrbook, optimising the cell styles * Goes through the Wokrbook, optimising the cell styles
* by removing duplicate ones, and ones that aren't used. * by removing duplicate ones, and ones that aren't used.
* For best results, optimise the fonts via a call to * For best results, optimise the fonts via a call to
* {@link #optimiseFonts(HSSFWorkbook)} first. * {@link #optimiseFonts(HSSFWorkbook)} first.
* @param workbook The workbook in which to optimise the cell styles * @param workbook The workbook in which to optimise the cell styles
*/ */
public static void optimiseCellStyles(HSSFWorkbook workbook) { public static void optimiseCellStyles(HSSFWorkbook workbook) {
// Where each style has ended up, and if we need to // Where each style has ended up, and if we need to
// delete the record for it. Start off with no change // delete the record for it. Start off with no change
short[] newPos = short[] newPos = new short[workbook.getWorkbook().getNumExFormats()];
new short[workbook.getWorkbook().getNumExFormats()]; boolean[] isUsed = new boolean[newPos.length];
boolean[] isUsed = new boolean[newPos.length]; boolean[] zapRecords = new boolean[newPos.length];
boolean[] zapRecords = new boolean[newPos.length]; for(int i=0; i<newPos.length; i++) {
for(int i=0; i<newPos.length; i++) { isUsed[i] = false;
isUsed[i] = false; newPos[i] = (short)i;
newPos[i] = (short)i; zapRecords[i] = false;
zapRecords[i] = false; }
}
// Get each style record, so we can do deletes
// Get each style record, so we can do deletes // without getting confused
// without getting confused ExtendedFormatRecord[] xfrs = new ExtendedFormatRecord[newPos.length];
ExtendedFormatRecord[] xfrs = new ExtendedFormatRecord[newPos.length]; for(int i=0; i<newPos.length; i++) {
for(int i=0; i<newPos.length; i++) { xfrs[i] = workbook.getWorkbook().getExFormatAt(i);
xfrs[i] = workbook.getWorkbook().getExFormatAt(i); }
}
// Loop over each style, seeing if it is the same
// Loop over each style, seeing if it is the same // as an earlier one. If it is, point users of the
// as an earlier one. If it is, point users of the // later duplicate copy to the earlier one, and
// later duplicate copy to the earlier one, and // mark the later one as needing deleting
// mark the later one as needing deleting // Only work on user added ones, which come after 20
// Only work on user added ones, which come after 20 for(int i=21; i<newPos.length; i++) {
for(int i=21; i<newPos.length; i++) { // Check this one for being a duplicate
// Check this one for being a duplicate // of an earlier one
// of an earlier one int earlierDuplicate = -1;
int earlierDuplicate = -1; for(int j=0; j<i && earlierDuplicate == -1; j++) {
for(int j=0; j<i && earlierDuplicate == -1; j++) { ExtendedFormatRecord xfCheck = workbook.getWorkbook().getExFormatAt(j);
ExtendedFormatRecord xfCheck = workbook.getWorkbook().getExFormatAt(j); if(xfCheck.equals(xfrs[i])) {
if(xfCheck.equals(xfrs[i])) { earlierDuplicate = j;
earlierDuplicate = j; }
} }
}
// If we got a duplicate, mark it as such
// If we got a duplicate, mark it as such if(earlierDuplicate != -1) {
if(earlierDuplicate != -1) { newPos[i] = (short)earlierDuplicate;
newPos[i] = (short)earlierDuplicate; zapRecords[i] = true;
zapRecords[i] = true; }
} }
}
// Loop over all the cells in the file, and identify any user defined
// Loop over all the cells in the file, and identify any user defined // styles aren't actually being used (don't touch built-in ones)
// styles aren't actually being used (don't touch built-in ones) for(int sheetNum=0; sheetNum<workbook.getNumberOfSheets(); sheetNum++) {
for(int sheetNum=0; sheetNum<workbook.getNumberOfSheets(); sheetNum++) { HSSFSheet s = workbook.getSheetAt(sheetNum);
HSSFSheet s = workbook.getSheetAt(sheetNum); for (Row row : s) {
for (Row row : s) { for (Cell cellI : row) {
for (Cell cellI : row) { HSSFCell cell = (HSSFCell)cellI;
HSSFCell cell = (HSSFCell)cellI; short oldXf = cell.getCellValueRecord().getXFIndex();
short oldXf = cell.getCellValueRecord().getXFIndex(); isUsed[oldXf] = true;
isUsed[oldXf] = true; }
} }
} }
} // Mark any that aren't used as needing zapping
// Mark any that aren't used as needing zapping for (int i=21; i<isUsed.length; i++) {
for (int i=21; i<isUsed.length; i++) { if (! isUsed[i]) {
if (! isUsed[i]) { // Un-used style, can be removed
// Un-used style, can be removed zapRecords[i] = true;
zapRecords[i] = true; newPos[i] = 0;
newPos[i] = 0; }
} }
}
// Update the new positions based on
// Update the new positions based on // deletes that have occurred between
// deletes that have occurred between // the start and them
// the start and them // Only work on user added ones, which come after 20
// Only work on user added ones, which come after 20 for(int i=21; i<newPos.length; i++) {
for(int i=21; i<newPos.length; i++) { // Find the number deleted to that
// Find the number deleted to that // point, and adjust
// point, and adjust short preDeletePos = newPos[i];
short preDeletePos = newPos[i]; short newPosition = preDeletePos;
short newPosition = preDeletePos; for(int j=0; j<preDeletePos; j++) {
for(int j=0; j<preDeletePos; j++) { if(zapRecords[j]) newPosition--;
if(zapRecords[j]) newPosition--; }
}
// Update the new position
// Update the new position newPos[i] = newPosition;
newPos[i] = newPosition; }
}
// Zap the un-needed user style records
// Zap the un-needed user style records // removing by index, because removing by object may delete
// removing by index, because removing by object may delete // styles we did not intend to (the ones that _were_ duplicated and not the duplicates)
// styles we did not intend to (the ones that _were_ duplicated and not the duplicates) int max = newPos.length;
int max = newPos.length; int removed = 0; // to adjust index after deletion
int removed = 0; // to adjust index after deletion for(int i=21; i<max; i++) {
for(int i=21; i<max; i++) { if(zapRecords[i + removed]) {
if(zapRecords[i + removed]) { workbook.getWorkbook().removeExFormatRecord(i);
workbook.getWorkbook().removeExFormatRecord(i); i--;
i--; max--;
max--; removed++;
removed++; }
} }
}
// Finally, update the cells to point at their new extended format records
// Finally, update the cells to point at their new extended format records for(int sheetNum=0; sheetNum<workbook.getNumberOfSheets(); sheetNum++) {
for(int sheetNum=0; sheetNum<workbook.getNumberOfSheets(); sheetNum++) { HSSFSheet s = workbook.getSheetAt(sheetNum);
HSSFSheet s = workbook.getSheetAt(sheetNum); for (Row row : s) {
for (Row row : s) { for (Cell cellI : row) {
for (Cell cellI : row) { HSSFCell cell = (HSSFCell)cellI;
HSSFCell cell = (HSSFCell)cellI; short oldXf = cell.getCellValueRecord().getXFIndex();
short oldXf = cell.getCellValueRecord().getXFIndex();
HSSFCellStyle newStyle = workbook.getCellStyleAt(
HSSFCellStyle newStyle = workbook.getCellStyleAt( newPos[oldXf]
newPos[oldXf] );
); cell.setCellStyle(newStyle);
cell.setCellStyle(newStyle); }
} }
} }
} }
}
} }