Fix some Sonar issues and some IntelliJ warnings

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1746627 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2016-06-02 20:14:28 +00:00
parent 6b6aa56455
commit 1fdbf14e1e
20 changed files with 296 additions and 350 deletions

View File

@ -18,6 +18,7 @@
package org.apache.poi.xssf.usermodel.examples; package org.apache.poi.xssf.usermodel.examples;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.OutputStream;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
@ -25,51 +26,56 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Outlining { public class Outlining {
public static void main(String[]args) throws Exception{ public static void main(String[] args) throws Exception {
Outlining o=new Outlining(); Outlining o=new Outlining();
o.groupRowColumn(); o.groupRowColumn();
o.collapseExpandRowColumn(); o.collapseExpandRowColumn();
} }
private void groupRowColumn() throws Exception{ private void groupRowColumn() throws Exception {
Workbook wb = new XSSFWorkbook(); Workbook wb = new XSSFWorkbook();
Sheet sheet1 = wb.createSheet("new sheet"); Sheet sheet1 = wb.createSheet("new sheet");
sheet1.groupRow( 5, 14 ); sheet1.groupRow( 5, 14 );
sheet1.groupRow( 7, 14 ); sheet1.groupRow( 7, 14 );
sheet1.groupRow( 16, 19 ); sheet1.groupRow( 16, 19 );
sheet1.groupColumn( (short)4, (short)7 ); sheet1.groupColumn( (short)4, (short)7 );
sheet1.groupColumn( (short)9, (short)12 ); sheet1.groupColumn( (short)9, (short)12 );
sheet1.groupColumn( (short)10, (short)11 ); sheet1.groupColumn( (short)10, (short)11 );
FileOutputStream fileOut = new FileOutputStream("outlining.xlsx");
wb.write(fileOut);
fileOut.close();
OutputStream fileOut = new FileOutputStream("outlining.xlsx");
try {
wb.write(fileOut);
} finally {
fileOut.close();
}
} }
private void collapseExpandRowColumn()throws Exception{ private void collapseExpandRowColumn() throws Exception {
Workbook wb2 = new XSSFWorkbook(); Workbook wb2 = new XSSFWorkbook();
Sheet sheet2 = wb2.createSheet("new sheet"); Sheet sheet2 = wb2.createSheet("new sheet");
sheet2.groupRow( 5, 14 ); sheet2.groupRow( 5, 14 );
sheet2.groupRow( 7, 14 ); sheet2.groupRow( 7, 14 );
sheet2.groupRow( 16, 19 ); sheet2.groupRow( 16, 19 );
sheet2.groupColumn( (short)4, (short)7 ); sheet2.groupColumn( (short)4, (short)7 );
sheet2.groupColumn( (short)9, (short)12 ); sheet2.groupColumn( (short)9, (short)12 );
sheet2.groupColumn( (short)10, (short)11 ); sheet2.groupColumn( (short)10, (short)11 );
sheet2.setRowGroupCollapsed( 7, true ); sheet2.setRowGroupCollapsed( 7, true );
//sheet1.setRowGroupCollapsed(7,false); //sheet1.setRowGroupCollapsed(7,false);
sheet2.setColumnGroupCollapsed( (short)4, true ); sheet2.setColumnGroupCollapsed( (short)4, true );
sheet2.setColumnGroupCollapsed( (short)4, false ); sheet2.setColumnGroupCollapsed( (short)4, false );
FileOutputStream fileOut = new FileOutputStream("outlining_collapsed.xlsx"); OutputStream fileOut = new FileOutputStream("outlining_collapsed.xlsx");
wb2.write(fileOut); try {
fileOut.close(); wb2.write(fileOut);
} finally {
fileOut.close();
}
} }
} }

View File

@ -17,6 +17,7 @@
package org.apache.poi.xwpf.usermodel; package org.apache.poi.xwpf.usermodel;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.OutputStream;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.List; import java.util.List;
@ -62,32 +63,37 @@ public class SimpleTable {
public static void createSimpleTable() throws Exception { public static void createSimpleTable() throws Exception {
XWPFDocument doc = new XWPFDocument(); XWPFDocument doc = new XWPFDocument();
XWPFTable table = doc.createTable(3, 3); try {
XWPFTable table = doc.createTable(3, 3);
table.getRow(1).getCell(1).setText("EXAMPLE OF TABLE"); table.getRow(1).getCell(1).setText("EXAMPLE OF TABLE");
// table cells have a list of paragraphs; there is an initial // table cells have a list of paragraphs; there is an initial
// paragraph created when the cell is created. If you create a // paragraph created when the cell is created. If you create a
// paragraph in the document to put in the cell, it will also // paragraph in the document to put in the cell, it will also
// appear in the document following the table, which is probably // appear in the document following the table, which is probably
// not the desired result. // not the desired result.
XWPFParagraph p1 = table.getRow(0).getCell(0).getParagraphs().get(0); XWPFParagraph p1 = table.getRow(0).getCell(0).getParagraphs().get(0);
XWPFRun r1 = p1.createRun(); XWPFRun r1 = p1.createRun();
r1.setBold(true); r1.setBold(true);
r1.setText("The quick brown fox"); r1.setText("The quick brown fox");
r1.setItalic(true); r1.setItalic(true);
r1.setFontFamily("Courier"); r1.setFontFamily("Courier");
r1.setUnderline(UnderlinePatterns.DOT_DOT_DASH); r1.setUnderline(UnderlinePatterns.DOT_DOT_DASH);
r1.setTextPosition(100); r1.setTextPosition(100);
table.getRow(2).getCell(2).setText("only text"); table.getRow(2).getCell(2).setText("only text");
FileOutputStream out = new FileOutputStream("simpleTable.docx"); OutputStream out = new FileOutputStream("simpleTable.docx");
doc.write(out); try {
out.close(); doc.write(out);
} finally {
doc.close(); out.close();
}
} finally {
doc.close();
}
} }
/** /**
@ -107,92 +113,94 @@ public class SimpleTable {
public static void createStyledTable() throws Exception { public static void createStyledTable() throws Exception {
// Create a new document from scratch // Create a new document from scratch
XWPFDocument doc = new XWPFDocument(); XWPFDocument doc = new XWPFDocument();
// -- OR --
// open an existing empty document with styles already defined
//XWPFDocument doc = new XWPFDocument(new FileInputStream("base_document.docx"));
// Create a new table with 6 rows and 3 columns try {
int nRows = 6; // -- OR --
int nCols = 3; // open an existing empty document with styles already defined
XWPFTable table = doc.createTable(nRows, nCols); //XWPFDocument doc = new XWPFDocument(new FileInputStream("base_document.docx"));
// Set the table style. If the style is not defined, the table style // Create a new table with 6 rows and 3 columns
// will become "Normal". int nRows = 6;
CTTblPr tblPr = table.getCTTbl().getTblPr(); int nCols = 3;
CTString styleStr = tblPr.addNewTblStyle(); XWPFTable table = doc.createTable(nRows, nCols);
styleStr.setVal("StyledTable");
// Get a list of the rows in the table // Set the table style. If the style is not defined, the table style
List<XWPFTableRow> rows = table.getRows(); // will become "Normal".
int rowCt = 0; CTTblPr tblPr = table.getCTTbl().getTblPr();
int colCt = 0; CTString styleStr = tblPr.addNewTblStyle();
for (XWPFTableRow row : rows) { styleStr.setVal("StyledTable");
// get table row properties (trPr)
CTTrPr trPr = row.getCtRow().addNewTrPr();
// set row height; units = twentieth of a point, 360 = 0.25"
CTHeight ht = trPr.addNewTrHeight();
ht.setVal(BigInteger.valueOf(360));
// get the cells in this row // Get a list of the rows in the table
List<XWPFTableCell> cells = row.getTableCells(); List<XWPFTableRow> rows = table.getRows();
// add content to each cell int rowCt = 0;
for (XWPFTableCell cell : cells) { int colCt = 0;
// get a table cell properties element (tcPr) for (XWPFTableRow row : rows) {
CTTcPr tcpr = cell.getCTTc().addNewTcPr(); // get table row properties (trPr)
// set vertical alignment to "center" CTTrPr trPr = row.getCtRow().addNewTrPr();
CTVerticalJc va = tcpr.addNewVAlign(); // set row height; units = twentieth of a point, 360 = 0.25"
va.setVal(STVerticalJc.CENTER); CTHeight ht = trPr.addNewTrHeight();
ht.setVal(BigInteger.valueOf(360));
// create cell color element // get the cells in this row
CTShd ctshd = tcpr.addNewShd(); List<XWPFTableCell> cells = row.getTableCells();
ctshd.setColor("auto"); // add content to each cell
ctshd.setVal(STShd.CLEAR); for (XWPFTableCell cell : cells) {
if (rowCt == 0) { // get a table cell properties element (tcPr)
// header row CTTcPr tcpr = cell.getCTTc().addNewTcPr();
ctshd.setFill("A7BFDE"); // set vertical alignment to "center"
} CTVerticalJc va = tcpr.addNewVAlign();
else if (rowCt % 2 == 0) { va.setVal(STVerticalJc.CENTER);
// even row
ctshd.setFill("D3DFEE");
}
else {
// odd row
ctshd.setFill("EDF2F8");
}
// get 1st paragraph in cell's paragraph list // create cell color element
XWPFParagraph para = cell.getParagraphs().get(0); CTShd ctshd = tcpr.addNewShd();
// create a run to contain the content ctshd.setColor("auto");
XWPFRun rh = para.createRun(); ctshd.setVal(STShd.CLEAR);
// style cell as desired if (rowCt == 0) {
if (colCt == nCols - 1) { // header row
// last column is 10pt Courier ctshd.setFill("A7BFDE");
rh.setFontSize(10); } else if (rowCt % 2 == 0) {
rh.setFontFamily("Courier"); // even row
} ctshd.setFill("D3DFEE");
if (rowCt == 0) { } else {
// header row // odd row
rh.setText("header row, col " + colCt); ctshd.setFill("EDF2F8");
rh.setBold(true); }
para.setAlignment(ParagraphAlignment.CENTER);
}
else {
// other rows
rh.setText("row " + rowCt + ", col " + colCt);
para.setAlignment(ParagraphAlignment.LEFT);
}
colCt++;
} // for cell
colCt = 0;
rowCt++;
} // for row
// write the file // get 1st paragraph in cell's paragraph list
FileOutputStream out = new FileOutputStream("styledTable.docx"); XWPFParagraph para = cell.getParagraphs().get(0);
doc.write(out); // create a run to contain the content
out.close(); XWPFRun rh = para.createRun();
// style cell as desired
doc.close(); if (colCt == nCols - 1) {
// last column is 10pt Courier
rh.setFontSize(10);
rh.setFontFamily("Courier");
}
if (rowCt == 0) {
// header row
rh.setText("header row, col " + colCt);
rh.setBold(true);
para.setAlignment(ParagraphAlignment.CENTER);
} else {
// other rows
rh.setText("row " + rowCt + ", col " + colCt);
para.setAlignment(ParagraphAlignment.LEFT);
}
colCt++;
} // for cell
colCt = 0;
rowCt++;
} // for row
// write the file
OutputStream out = new FileOutputStream("styledTable.docx");
try {
doc.write(out);
} finally {
out.close();
}
} finally {
doc.close();
}
} }
} }

View File

@ -125,13 +125,13 @@ public class ExcelAntEvaluateCell extends Task {
} }
result = wbUtil.evaluateCell(cell, expectedValue, precisionToUse ) ; result = wbUtil.evaluateCell(cell, expectedValue, precisionToUse ) ;
StringBuffer sb = new StringBuffer() ; StringBuilder sb = new StringBuilder() ;
sb.append( "evaluation of cell " ) ; sb.append( "evaluation of cell " ) ;
sb.append( cell ) ; sb.append( cell ) ;
sb.append( " resulted in " ) ; sb.append( " resulted in " ) ;
sb.append( result.getReturnValue() ) ; sb.append( result.getReturnValue() ) ;
if( showDelta == true ) { if(showDelta) {
sb.append( " with a delta of " + result.getDelta() ) ; sb.append(" with a delta of ").append(result.getDelta());
} }
log( sb.toString(), Project.MSG_DEBUG) ; log( sb.toString(), Project.MSG_DEBUG) ;
@ -141,6 +141,4 @@ public class ExcelAntEvaluateCell extends Task {
public ExcelAntEvaluationResult getResult() { public ExcelAntEvaluationResult getResult() {
return result ; return result ;
} }
} }

View File

@ -29,15 +29,13 @@ import org.apache.tools.ant.Project;
* *
*/ */
public class ExcelAntSetDoubleCell extends ExcelAntSet { public class ExcelAntSetDoubleCell extends ExcelAntSet {
private double cellValue;
private double cellValue ;
public ExcelAntSetDoubleCell() {} public ExcelAntSetDoubleCell() {}
/** /**
* Set the value of the specified cell as the double passed in. * Set the value of the specified cell as the double passed in.
* @param value * @param value The double-value that should be set when this task is executed.
*/ */
public void setValue( double value ) { public void setValue( double value ) {
cellValue = value ; cellValue = value ;
@ -45,14 +43,14 @@ public class ExcelAntSetDoubleCell extends ExcelAntSet {
/** /**
* Return the cell value as a double. * Return the cell value as a double.
* @return * @return The double-value of the cell as populated via setValue(), null
* if the value was not set yet.
*/ */
public double getCellValue() { public double getCellValue() {
return cellValue; return cellValue;
} }
public void execute() throws BuildException { public void execute() throws BuildException {
wbUtil.setDoubleValue(cellStr, cellValue ) ; wbUtil.setDoubleValue(cellStr, cellValue ) ;
log( "set cell " + cellStr + " to value " + cellValue + " as double.", Project.MSG_DEBUG ) ; log( "set cell " + cellStr + " to value " + cellValue + " as double.", Project.MSG_DEBUG ) ;

View File

@ -29,17 +29,13 @@ import org.apache.tools.ant.Project;
* *
*/ */
public class ExcelAntSetStringCell extends ExcelAntSet { public class ExcelAntSetStringCell extends ExcelAntSet {
private String stringValue ; private String stringValue ;
public ExcelAntSetStringCell() {} public ExcelAntSetStringCell() {}
/** /**
* Set the value of the cell to the String passed in. * Set the value of the cell to the String passed in.
* @param value * @param value The string-value that should be set when this task is executed.
*/ */
public void setValue(String value ) { public void setValue(String value ) {
stringValue = value ; stringValue = value ;
@ -47,14 +43,14 @@ public class ExcelAntSetStringCell extends ExcelAntSet {
/** /**
* Return the value that will be set into the cell. * Return the value that will be set into the cell.
* @return * @return The string-value of the cell as populated via setValue(), null
* if the value was not set yet.
*/ */
public String getCellValue() { public String getCellValue() {
return stringValue; return stringValue;
} }
public void execute() throws BuildException { public void execute() throws BuildException {
wbUtil.setStringValue(cellStr, stringValue ) ; wbUtil.setStringValue(cellStr, stringValue ) ;
log( "set cell " + cellStr + " to value " + stringValue + " as String.", Project.MSG_DEBUG ) ; log( "set cell " + cellStr + " to value " + stringValue + " as String.", Project.MSG_DEBUG ) ;

View File

@ -17,14 +17,6 @@
package org.apache.poi.ss.excelant; package org.apache.poi.ss.excelant;
import java.io.File;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Locale;
import org.apache.poi.ss.excelant.util.ExcelAntWorkbookUtil; import org.apache.poi.ss.excelant.util.ExcelAntWorkbookUtil;
import org.apache.poi.ss.excelant.util.ExcelAntWorkbookUtilFactory; import org.apache.poi.ss.excelant.util.ExcelAntWorkbookUtilFactory;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
@ -33,6 +25,13 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task; import org.apache.tools.ant.Task;
import java.io.File;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.Locale;
/** /**
* Ant task class for testing Excel workbook cells. * Ant task class for testing Excel workbook cells.
* *
@ -85,7 +84,7 @@ public class ExcelAntTask extends Task {
int totalCount = 0 ; int totalCount = 0 ;
int successCount = 0 ; int successCount = 0 ;
StringBuffer versionBffr = new StringBuffer() ; StringBuilder versionBffr = new StringBuilder() ;
versionBffr.append( "ExcelAnt version " ) ; versionBffr.append( "ExcelAnt version " ) ;
versionBffr.append( VERSION ) ; versionBffr.append( VERSION ) ;
versionBffr.append( " Copyright 2011" ) ; versionBffr.append( " Copyright 2011" ) ;
@ -107,43 +106,38 @@ public class ExcelAntTask extends Task {
return ; return ;
} }
if( tests.size() > 0 ) { if( tests.size() > 0 ) {
Iterator<ExcelAntTest> testsIt = tests.iterator() ; for (ExcelAntTest test : tests) {
while( testsIt.hasNext() ) { log("executing test: " + test.getName(), Project.MSG_DEBUG);
ExcelAntTest test = testsIt.next();
workbookUtil = ExcelAntWorkbookUtilFactory.getInstance(excelFileName);
log( "executing test: " + test.getName(), Project.MSG_DEBUG ) ;
for (ExcelAntUserDefinedFunction eaUdf : functions) {
workbookUtil = ExcelAntWorkbookUtilFactory.getInstance( excelFileName ) ;
Iterator<ExcelAntUserDefinedFunction> functionsIt = functions.iterator() ;
while( functionsIt.hasNext() ) {
ExcelAntUserDefinedFunction eaUdf = functionsIt.next() ;
try { try {
workbookUtil.addFunction(eaUdf.getFunctionAlias(), eaUdf.getClassName() ) ; workbookUtil.addFunction(eaUdf.getFunctionAlias(), eaUdf.getClassName());
} catch ( Exception e) { } catch (Exception e) {
throw new BuildException( e.getMessage(), e ); throw new BuildException(e.getMessage(), e);
} }
} }
test.setWorkbookUtil( workbookUtil ) ; test.setWorkbookUtil(workbookUtil);
if( precision != null && precision.getValue() > 0 ) { if (precision != null && precision.getValue() > 0) {
log( "setting precision for the test " + test.getName(), Project.MSG_VERBOSE ) ; log("setting precision for the test " + test.getName(), Project.MSG_VERBOSE);
test.setPrecision( precision.getValue() ) ; test.setPrecision(precision.getValue());
} }
test.execute() ; test.execute();
if( test.didTestPass() ) { if (test.didTestPass()) {
successCount++ ; successCount++;
} else { } else {
if( failOnError == true ) { if (failOnError) {
throw new BuildException( "Test " + test.getName() + " failed." ) ; throw new BuildException("Test " + test.getName() + " failed.");
} }
} }
totalCount++ ; totalCount++;
workbookUtil = null ; workbookUtil = null;
} }
log( successCount + "/" + totalCount + " tests passed.", Project.MSG_INFO ) ; log( successCount + "/" + totalCount + " tests passed.", Project.MSG_INFO ) ;
workbookUtil = null ; workbookUtil = null ;

View File

@ -162,9 +162,9 @@ public class ExcelAntTest extends Task{
try { try {
eval.execute(); eval.execute();
ExcelAntEvaluationResult result = eval.getResult(); ExcelAntEvaluationResult result = eval.getResult();
if( result.didTestPass() && if( result.didTestPass() &&
result.evaluationCompleteWithError() == false ) { !result.evaluationCompleteWithError()) {
if( showSuccessDetails == true ) { if(showSuccessDetails) {
log("Succeeded when evaluating " + log("Succeeded when evaluating " +
result.getCellName() + ". It evaluated to " + result.getCellName() + ". It evaluated to " +
result.getReturnValue() + " when the value of " + result.getReturnValue() + " when the value of " +
@ -172,7 +172,7 @@ public class ExcelAntTest extends Task{
eval.getPrecision(), Project.MSG_INFO ); eval.getPrecision(), Project.MSG_INFO );
} }
} else { } else {
if( showFailureDetail == true ) { if(showFailureDetail) {
failureMessages.add( "\tFailed to evaluate cell " + failureMessages.add( "\tFailed to evaluate cell " +
result.getCellName() + ". It evaluated to " + result.getCellName() + ". It evaluated to " +
result.getReturnValue() + " when the value of " + result.getReturnValue() + " when the value of " +
@ -183,7 +183,7 @@ public class ExcelAntTest extends Task{
passed = false; passed = false;
failureCount++; failureCount++;
if( eval.requiredToPass() == true ) { if(eval.requiredToPass()) {
throw new BuildException( "\tFailed to evaluate cell " + throw new BuildException( "\tFailed to evaluate cell " +
result.getCellName() + ". It evaluated to " + result.getCellName() + ". It evaluated to " +
result.getReturnValue() + " when the value of " + result.getReturnValue() + " when the value of " +
@ -200,15 +200,14 @@ public class ExcelAntTest extends Task{
} }
} }
if( passed == false ) { if(!passed) {
log( "Test named " + name + " failed because " + failureCount + log( "Test named " + name + " failed because " + failureCount +
" of " + testCount + " evaluations failed to " + " of " + testCount + " evaluations failed to " +
"evaluate correctly.", "evaluate correctly.",
Project.MSG_ERR ); Project.MSG_ERR );
if( showFailureDetail == true && failureMessages.size() > 0 ) { if(showFailureDetail && failureMessages.size() > 0 ) {
Iterator<String> failures = failureMessages.iterator(); for (String failureMessage : failureMessages) {
while( failures.hasNext() ) { log(failureMessage, Project.MSG_ERR);
log( failures.next(), Project.MSG_ERR );
} }
} }
} }

View File

@ -36,11 +36,7 @@ import org.apache.poi.ss.usermodel.Workbook;
* *
*/ */
public interface IExcelAntWorkbookHandler { public interface IExcelAntWorkbookHandler {
public void setWorkbook( Workbook workbook ) ; public void setWorkbook( Workbook workbook ) ;
public void execute() ; public void execute() ;
} }

View File

@ -67,7 +67,8 @@ public class ExcelAntWorkbookUtil extends Typedef {
* path of the Excel file. This constructor initializes a Workbook instance * path of the Excel file. This constructor initializes a Workbook instance
* based on that file name. * based on that file name.
* *
* @param fName * @param fName The fully qualified path of the Excel file.
* @throws BuildException If the workbook cannot be loaded.
*/ */
protected ExcelAntWorkbookUtil(String fName) { protected ExcelAntWorkbookUtil(String fName) {
excelFileName = fName; excelFileName = fName;
@ -78,7 +79,7 @@ public class ExcelAntWorkbookUtil extends Typedef {
/** /**
* Constructs an instance based on a Workbook instance. * Constructs an instance based on a Workbook instance.
* *
* @param wb * @param wb The Workbook to use for this instance.
*/ */
protected ExcelAntWorkbookUtil(Workbook wb) { protected ExcelAntWorkbookUtil(Workbook wb) {
workbook = wb; workbook = wb;
@ -86,7 +87,8 @@ public class ExcelAntWorkbookUtil extends Typedef {
/** /**
* Loads the member variable workbook based on the fileName variable. * Loads the member variable workbook based on the fileName variable.
* @return * @return The opened Workbook-instance
* @throws BuildException If the workbook cannot be loaded.
*/ */
private Workbook loadWorkbook() { private Workbook loadWorkbook() {

View File

@ -40,15 +40,16 @@ public final class ExcelAntWorkbookUtilFactory {
* Using the fileName, check the internal map to see if an instance * Using the fileName, check the internal map to see if an instance
* of the WorkbookUtil exists. If not, then add an instance to the map. * of the WorkbookUtil exists. If not, then add an instance to the map.
* *
* @param fileName * @param fileName The filename to use as key to look for the ExcelAntWorkbookUtil.
* @return * @return An instance of ExcelAntWorkbookUtil associated with the filename or
* a freshly instantiated one if none did exist before.
*/ */
public static ExcelAntWorkbookUtil getInstance(String fileName) { public static ExcelAntWorkbookUtil getInstance(String fileName) {
if(workbookUtilMap == null) { if(workbookUtilMap == null) {
workbookUtilMap = new HashMap<String, ExcelAntWorkbookUtil>(); workbookUtilMap = new HashMap<String, ExcelAntWorkbookUtil>();
} }
if(workbookUtilMap != null &&
workbookUtilMap.containsKey(fileName)) { if(workbookUtilMap.containsKey(fileName)) {
return workbookUtilMap.get(fileName); return workbookUtilMap.get(fileName);
} }

View File

@ -61,11 +61,12 @@ public class EscherClientAnchorRecord
int size = 0; int size = 0;
// Always find 4 two byte entries. Sometimes find 9 // Always find 4 two byte entries. Sometimes find 9
if (bytesRemaining == 4) // Word format only 4 bytes /*if (bytesRemaining == 4) // Word format only 4 bytes
{ {
// Not sure exactly what the format is quite yet, likely a reference to a PLC // Not sure exactly what the format is quite yet, likely a reference to a PLC
} }
else else */
if (bytesRemaining != 4) // Word format only 4 bytes
{ {
field_1_flag = LittleEndian.getShort( data, pos + size ); size += 2; field_1_flag = LittleEndian.getShort( data, pos + size ); size += 2;
field_2_col1 = LittleEndian.getShort( data, pos + size ); size += 2; field_2_col1 = LittleEndian.getShort( data, pos + size ); size += 2;
@ -157,20 +158,18 @@ public class EscherClientAnchorRecord
@Override @Override
public String toXml(String tab) { public String toXml(String tab) {
String extraData = HexDump.dump(this.remainingData, 0, 0).trim(); String extraData = HexDump.dump(this.remainingData, 0, 0).trim();
StringBuilder builder = new StringBuilder(); return tab + formatXmlRecordHeader(getClass().getSimpleName(), HexDump.toHex(getRecordId()), HexDump.toHex(getVersion()), HexDump.toHex(getInstance())) +
builder.append(tab).append(formatXmlRecordHeader(getClass().getSimpleName(), HexDump.toHex(getRecordId()), HexDump.toHex(getVersion()), HexDump.toHex(getInstance()))) tab + "\t" + "<Flag>" + field_1_flag + "</Flag>\n" +
.append(tab).append("\t").append("<Flag>").append(field_1_flag).append("</Flag>\n") tab + "\t" + "<Col1>" + field_2_col1 + "</Col1>\n" +
.append(tab).append("\t").append("<Col1>").append(field_2_col1).append("</Col1>\n") tab + "\t" + "<DX1>" + field_3_dx1 + "</DX1>\n" +
.append(tab).append("\t").append("<DX1>").append(field_3_dx1).append("</DX1>\n") tab + "\t" + "<Row1>" + field_4_row1 + "</Row1>\n" +
.append(tab).append("\t").append("<Row1>").append(field_4_row1).append("</Row1>\n") tab + "\t" + "<DY1>" + field_5_dy1 + "</DY1>\n" +
.append(tab).append("\t").append("<DY1>").append(field_5_dy1).append("</DY1>\n") tab + "\t" + "<Col2>" + field_6_col2 + "</Col2>\n" +
.append(tab).append("\t").append("<Col2>").append(field_6_col2).append("</Col2>\n") tab + "\t" + "<DX2>" + field_7_dx2 + "</DX2>\n" +
.append(tab).append("\t").append("<DX2>").append(field_7_dx2).append("</DX2>\n") tab + "\t" + "<Row2>" + field_8_row2 + "</Row2>\n" +
.append(tab).append("\t").append("<Row2>").append(field_8_row2).append("</Row2>\n") tab + "\t" + "<DY2>" + field_9_dy2 + "</DY2>\n" +
.append(tab).append("\t").append("<DY2>").append(field_9_dy2).append("</DY2>\n") tab + "\t" + "<ExtraData>" + extraData + "</ExtraData>\n" +
.append(tab).append("\t").append("<ExtraData>").append(extraData).append("</ExtraData>\n"); tab + "</" + getClass().getSimpleName() + ">\n";
builder.append(tab).append("</").append(getClass().getSimpleName()).append(">\n");
return builder.toString();
} }
/** /**

View File

@ -179,9 +179,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* used internally to set the properties given a Sheet object * used internally to set the properties given a Sheet object
*/ */
private void setPropertiesFromSheet(InternalSheet sheet) { private void setPropertiesFromSheet(InternalSheet sheet) {
RowRecord row = sheet.getNextRow(); RowRecord row = sheet.getNextRow();
boolean rowRecordsAlreadyPresent = row != null;
while (row != null) { while (row != null) {
createRowFromRecord(row); createRowFromRecord(row);
@ -767,7 +765,6 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Verify that none of the merged regions intersect a multi-cell array formula in this sheet * Verify that none of the merged regions intersect a multi-cell array formula in this sheet
* *
* @param region
* @throws IllegalStateException if candidate region intersects an existing array formula in this sheet * @throws IllegalStateException if candidate region intersects an existing array formula in this sheet
*/ */
private void checkForMergedRegionsIntersectingArrayFormulas() { private void checkForMergedRegionsIntersectingArrayFormulas() {
@ -1451,10 +1448,10 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* <p/> * <p/>
* TODO: MODE , this is only row specific * TODO: MODE , this is only row specific
* *
* @param startRow * @param startRow the start-index of the rows to shift, zero-based
* @param endRow * @param endRow the end-index of the rows to shift, zero-based
* @param n * @param n how far to shift, negative to shift up
* @param isRow * @param isRow unused, kept for backwards compatibility
*/ */
protected void shiftMerged(int startRow, int endRow, int n, boolean isRow) { protected void shiftMerged(int startRow, int endRow, int n, boolean isRow) {
List<CellRangeAddress> shiftedRegions = new ArrayList<CellRangeAddress>(); List<CellRangeAddress> shiftedRegions = new ArrayList<CellRangeAddress>();
@ -1483,10 +1480,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
} }
//read so it doesn't get shifted again //read so it doesn't get shifted again
Iterator<CellRangeAddress> iterator = shiftedRegions.iterator(); for (CellRangeAddress region : shiftedRegions) {
while (iterator.hasNext()) {
CellRangeAddress region = iterator.next();
this.addMergedRegion(region); this.addMergedRegion(region);
} }
} }
@ -1942,7 +1936,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Removes a page break at the indicated column * Removes a page break at the indicated column
* *
* @param column * @param column The index of the column for which to remove a page-break, zero-based
*/ */
@Override @Override
public void removeColumnBreak(int column) { public void removeColumnBreak(int column) {
@ -1952,7 +1946,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Runs a bounds check for row numbers * Runs a bounds check for row numbers
* *
* @param row * @param row the index of the row to validate, zero-based
*/ */
protected void validateRow(int row) { protected void validateRow(int row) {
int maxrow = SpreadsheetVersion.EXCEL97.getLastRowIndex(); int maxrow = SpreadsheetVersion.EXCEL97.getLastRowIndex();
@ -1963,7 +1957,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Runs a bounds check for column numbers * Runs a bounds check for column numbers
* *
* @param column * @param column the index of the column to validate, zero-based
*/ */
protected void validateColumn(int column) { protected void validateColumn(int column) {
int maxcol = SpreadsheetVersion.EXCEL97.getLastColumnIndex(); int maxcol = SpreadsheetVersion.EXCEL97.getLastColumnIndex();
@ -1980,8 +1974,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
EscherAggregate r = (EscherAggregate) getSheet().findFirstRecordBySid(EscherAggregate.sid); EscherAggregate r = (EscherAggregate) getSheet().findFirstRecordBySid(EscherAggregate.sid);
List<EscherRecord> escherRecords = r.getEscherRecords(); List<EscherRecord> escherRecords = r.getEscherRecords();
for (Iterator<EscherRecord> iterator = escherRecords.iterator(); iterator.hasNext(); ) { for (EscherRecord escherRecord : escherRecords) {
EscherRecord escherRecord = iterator.next();
if (fat) { if (fat) {
pw.println(escherRecord.toString()); pw.println(escherRecord.toString());
} else { } else {
@ -2013,8 +2006,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
} }
// Grab our aggregate record, and wire it up // Grab our aggregate record, and wire it up
EscherAggregate agg = (EscherAggregate) _sheet.findFirstRecordBySid(EscherAggregate.sid); return (EscherAggregate) _sheet.findFirstRecordBySid(EscherAggregate.sid);
return agg;
} }
/** /**
@ -2043,7 +2035,6 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
} }
private HSSFPatriarch getPatriarch(boolean createIfMissing) { private HSSFPatriarch getPatriarch(boolean createIfMissing) {
HSSFPatriarch patriarch = null;
if (_patriarch != null) { if (_patriarch != null) {
return _patriarch; return _patriarch;
} }
@ -2063,7 +2054,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
if (createIfMissing) { if (createIfMissing) {
pos = _sheet.aggregateDrawingRecords(dm, true); pos = _sheet.aggregateDrawingRecords(dm, true);
agg = (EscherAggregate) _sheet.getRecords().get(pos); agg = (EscherAggregate) _sheet.getRecords().get(pos);
patriarch = new HSSFPatriarch(this, agg); HSSFPatriarch patriarch = new HSSFPatriarch(this, agg);
patriarch.afterCreate(); patriarch.afterCreate();
return patriarch; return patriarch;
} else { } else {
@ -2204,16 +2195,15 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
/** /**
* Get a Hyperlink in this sheet anchored at row, column * Get a Hyperlink in this sheet anchored at row, column
* *
* @param row * @param row The index of the row of the hyperlink, zero-based
* @param column * @param column the index of the column of the hyperlink, zero-based
* @return hyperlink if there is a hyperlink anchored at row, column; otherwise returns null * @return hyperlink if there is a hyperlink anchored at row, column; otherwise returns null
*/ */
@Override @Override
public HSSFHyperlink getHyperlink(int row, int column) { public HSSFHyperlink getHyperlink(int row, int column) {
for (Iterator<RecordBase> it = _sheet.getRecords().iterator(); it.hasNext(); ) { for (RecordBase rec : _sheet.getRecords()) {
RecordBase rec = it.next(); if (rec instanceof HyperlinkRecord) {
if (rec instanceof HyperlinkRecord){ HyperlinkRecord link = (HyperlinkRecord) rec;
HyperlinkRecord link = (HyperlinkRecord)rec;
if (link.getFirstColumn() == column && link.getFirstRow() == row) { if (link.getFirstColumn() == column && link.getFirstRow() == row) {
return new HSSFHyperlink(link); return new HSSFHyperlink(link);
} }
@ -2230,10 +2220,9 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
@Override @Override
public List<HSSFHyperlink> getHyperlinkList() { public List<HSSFHyperlink> getHyperlinkList() {
final List<HSSFHyperlink> hyperlinkList = new ArrayList<HSSFHyperlink>(); final List<HSSFHyperlink> hyperlinkList = new ArrayList<HSSFHyperlink>();
for (Iterator<RecordBase> it = _sheet.getRecords().iterator(); it.hasNext(); ) { for (RecordBase rec : _sheet.getRecords()) {
RecordBase rec = it.next(); if (rec instanceof HyperlinkRecord) {
if (rec instanceof HyperlinkRecord){ HyperlinkRecord link = (HyperlinkRecord) rec;
HyperlinkRecord link = (HyperlinkRecord)rec;
hyperlinkList.add(new HSSFHyperlink(link)); hyperlinkList.add(new HSSFHyperlink(link));
} }
} }
@ -2586,16 +2575,14 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
if (areaPtg.getFirstColumn() == 0 if (areaPtg.getFirstColumn() == 0
&& areaPtg.getLastColumn() == maxColIndex) { && areaPtg.getLastColumn() == maxColIndex) {
if (rows) { if (rows) {
CellRangeAddress rowRange = new CellRangeAddress( return new CellRangeAddress(
areaPtg.getFirstRow(), areaPtg.getLastRow(), -1, -1); areaPtg.getFirstRow(), areaPtg.getLastRow(), -1, -1);
return rowRange;
} }
} else if (areaPtg.getFirstRow() == 0 } else if (areaPtg.getFirstRow() == 0
&& areaPtg.getLastRow() == maxRowIndex) { && areaPtg.getLastRow() == maxRowIndex) {
if (!rows) { if (!rows) {
CellRangeAddress columnRange = new CellRangeAddress(-1, -1, return new CellRangeAddress(-1, -1,
areaPtg.getFirstColumn(), areaPtg.getLastColumn()); areaPtg.getFirstColumn(), areaPtg.getLastColumn());
return columnRange;
} }
} }

View File

@ -19,7 +19,6 @@ package org.apache.poi.ss.usermodel;
import java.util.Locale; import java.util.Locale;
import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.Color;
/** /**
* Represents a XSSF-style color (based on either a * Represents a XSSF-style color (based on either a
@ -80,26 +79,23 @@ public abstract class ExtendedColor implements Color {
* Sets the Red Green Blue or Alpha Red Green Blue * Sets the Red Green Blue or Alpha Red Green Blue
*/ */
public abstract void setRGB(byte[] rgb); public abstract void setRGB(byte[] rgb);
protected byte[] getRGBOrARGB() {
byte[] rgb = null;
protected byte[] getRGBOrARGB() {
if (isIndexed() && getIndex() > 0) { if (isIndexed() && getIndex() > 0) {
int indexNum = getIndex(); int indexNum = getIndex();
HSSFColor indexed = HSSFColor.getIndexHash().get(indexNum); HSSFColor indexed = HSSFColor.getIndexHash().get(indexNum);
if (indexed != null) { if (indexed != null) {
rgb = new byte[3]; byte[] rgb = new byte[3];
rgb[0] = (byte) indexed.getTriplet()[0]; rgb[0] = (byte) indexed.getTriplet()[0];
rgb[1] = (byte) indexed.getTriplet()[1]; rgb[1] = (byte) indexed.getTriplet()[1];
rgb[2] = (byte) indexed.getTriplet()[2]; rgb[2] = (byte) indexed.getTriplet()[2];
return rgb; return rgb;
} }
} }
// Grab the colour // Grab the colour
rgb = getStoredRBG(); return getStoredRBG();
return rgb; }
}
/** /**
* Standard Red Green Blue ctColor value (RGB) with applied tint. * Standard Red Green Blue ctColor value (RGB) with applied tint.
@ -125,12 +121,13 @@ public abstract class ExtendedColor implements Color {
* Works for both regular and indexed colours. * Works for both regular and indexed colours.
*/ */
public String getARGBHex() { public String getARGBHex() {
StringBuffer sb = new StringBuffer();
byte[] rgb = getARGB(); byte[] rgb = getARGB();
if(rgb == null) { if(rgb == null) {
return null; return null;
} }
for(byte c : rgb) {
StringBuilder sb = new StringBuilder();
for(byte c : rgb) {
int i = c & 0xff; int i = c & 0xff;
String cs = Integer.toHexString(i); String cs = Integer.toHexString(i);
if(cs.length() == 1) { if(cs.length() == 1) {

View File

@ -16,30 +16,15 @@
==================================================================== */ ==================================================================== */
package org.apache.poi; package org.apache.poi;
import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PushbackInputStream;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.*;
import org.apache.poi.openxml4j.opc.PackageAccess;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackageRelationship;
import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
import org.apache.poi.poifs.common.POIFSConstants;
import org.apache.poi.poifs.filesystem.DocumentFactoryHelper; import org.apache.poi.poifs.filesystem.DocumentFactoryHelper;
import org.apache.poi.util.IOUtils;
import org.apache.xmlbeans.impl.common.SystemCache; import org.apache.xmlbeans.impl.common.SystemCache;
import java.io.*;
import java.util.*;
public abstract class POIXMLDocument extends POIXMLDocumentPart implements Closeable { public abstract class POIXMLDocument extends POIXMLDocumentPart implements Closeable {
public static final String DOCUMENT_CREATOR = "Apache POI"; public static final String DOCUMENT_CREATOR = "Apache POI";

View File

@ -229,7 +229,7 @@ public class POIXMLPropertiesTextExtractor extends POIXMLTextExtractor {
} }
} }
else if (property.isSetArray()) { /*else if (property.isSetArray()) {
// TODO Fetch the array values and output // TODO Fetch the array values and output
} }
else if (property.isSetVector()) { else if (property.isSetVector()) {
@ -245,12 +245,9 @@ public class POIXMLPropertiesTextExtractor extends POIXMLTextExtractor {
} }
else if (property.isSetStorage() || property.isSetOstorage()) { else if (property.isSetStorage() || property.isSetOstorage()) {
// TODO Decode, if possible // TODO Decode, if possible
} }*/
text.append( text.append(property.getName()).append(" = ").append(val).append("\n");
property.getName() +
" = " + val + "\n"
);
} }
return text.toString(); return text.toString();

View File

@ -355,12 +355,12 @@ public class ExtractorFactory {
* {@link POITextExtractor} for each embedded file. * {@link POITextExtractor} for each embedded file.
*/ */
public static POITextExtractor[] getEmbededDocsTextExtractors(POIOLE2TextExtractor ext) throws IOException, OpenXML4JException, XmlException { public static POITextExtractor[] getEmbededDocsTextExtractors(POIOLE2TextExtractor ext) throws IOException, OpenXML4JException, XmlException {
// All the embded directories we spotted // All the embedded directories we spotted
ArrayList<Entry> dirs = new ArrayList<Entry>(); ArrayList<Entry> dirs = new ArrayList<Entry>();
// For anything else not directly held in as a POIFS directory // For anything else not directly held in as a POIFS directory
ArrayList<InputStream> nonPOIFS = new ArrayList<InputStream>(); ArrayList<InputStream> nonPOIFS = new ArrayList<InputStream>();
// Find all the embeded directories // Find all the embedded directories
DirectoryEntry root = ext.getRoot(); DirectoryEntry root = ext.getRoot();
if(root == null) { if(root == null) {
throw new IllegalStateException("The extractor didn't know which POIFS it came from!"); throw new IllegalStateException("The extractor didn't know which POIFS it came from!");
@ -390,7 +390,7 @@ public class ExtractorFactory {
} catch(FileNotFoundException e) { } catch(FileNotFoundException e) {
// ignored here // ignored here
} }
} else if(ext instanceof PowerPointExtractor) { //} else if(ext instanceof PowerPointExtractor) {
// Tricky, not stored directly in poifs // Tricky, not stored directly in poifs
// TODO // TODO
} else if(ext instanceof OutlookTextExtactor) { } else if(ext instanceof OutlookTextExtactor) {
@ -434,12 +434,12 @@ public class ExtractorFactory {
/** /**
* Returns an array of text extractors, one for each of * Returns an array of text extractors, one for each of
* the embeded documents in the file (if there are any). * the embedded documents in the file (if there are any).
* If there are no embeded documents, you'll get back an * If there are no embedded documents, you'll get back an
* empty array. Otherwise, you'll get one open * empty array. Otherwise, you'll get one open
* {@link POITextExtractor} for each embeded file. * {@link POITextExtractor} for each embedded file.
*/ */
public static POITextExtractor[] getEmbededDocsTextExtractors(POIXMLTextExtractor ext) { public static POITextExtractor[] getEmbededDocsTextExtractors(@SuppressWarnings("UnusedParameters") POIXMLTextExtractor ext) {
throw new IllegalStateException("Not yet supported"); throw new IllegalStateException("Not yet supported");
} }
} }

View File

@ -77,10 +77,6 @@ public final class TestPOIXMLProperties {
ctProps.setApplication(application); ctProps.setApplication(application);
ctProps.setAppVersion(appVersion); ctProps.setAppVersion(appVersion);
ctProps = null;
properties = null;
props = null;
XSSFWorkbook newWorkbook = XSSFWorkbook newWorkbook =
XSSFTestDataSamples.writeOutAndReadBack(workbook); XSSFTestDataSamples.writeOutAndReadBack(workbook);
workbook.close(); workbook.close();

View File

@ -134,7 +134,7 @@ public abstract class BitMaskTextProp extends TextProp implements Cloneable {
int i=0; int i=0;
for (int mask : subPropMasks) { for (int mask : subPropMasks) {
if (!subPropMatches[i] && (val & mask) != 0) { if (!subPropMatches[i] && (val & mask) != 0) {
sb.append(subPropNames[i]+","); sb.append(subPropNames[i]).append(",");
} }
i++; i++;
} }

View File

@ -110,12 +110,6 @@ public class HwmfGraphics {
} }
protected BasicStroke getStroke() { protected BasicStroke getStroke() {
Rectangle2D view = prop.getViewport();
Rectangle2D win = prop.getWindow();
if (view == null) {
view = win;
}
// TODO: fix line width calculation // TODO: fix line width calculation
float width = (float)prop.getPenWidth(); float width = (float)prop.getPenWidth();
if (width == 0) { if (width == 0) {
@ -335,10 +329,10 @@ public class HwmfGraphics {
int len = text.length(); int len = text.length();
AttributedString as = new AttributedString(text); AttributedString as = new AttributedString(text);
if (dx == null || dx.length == 0) { if (dx == null || dx.length == 0) {
addAttributes(as, font, 0, len); addAttributes(as, font);
} else { } else {
for (int i=0; i<len; i++) { for (int i=0; i<len; i++) {
addAttributes(as, font, i, i+1); addAttributes(as, font);
// Tracking works as a prefix/advance space on characters whereas // Tracking works as a prefix/advance space on characters whereas
// dx[...] is the complete width of the current char // dx[...] is the complete width of the current char
// therefore we need to add the additional/suffix width to the next char // therefore we need to add the additional/suffix width to the next char
@ -368,7 +362,7 @@ public class HwmfGraphics {
} }
} }
private void addAttributes(AttributedString as, HwmfFont font, int start, int end) { private void addAttributes(AttributedString as, HwmfFont font) {
DrawFontManager fontHandler = (DrawFontManager)graphicsCtx.getRenderingHint(Drawable.FONT_HANDLER); DrawFontManager fontHandler = (DrawFontManager)graphicsCtx.getRenderingHint(Drawable.FONT_HANDLER);
String fontFamily = null; String fontFamily = null;
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")

View File

@ -17,26 +17,8 @@
package org.apache.poi.ss.usermodel; package org.apache.poi.ss.usermodel;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.awt.font.FontRenderContext;
import java.awt.font.TextAttribute;
import java.awt.font.TextLayout;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.AttributedString;
import java.util.HashMap;
import java.util.Map;
import java.awt.geom.Rectangle2D;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.PaneInformation; import org.apache.poi.hssf.util.PaneInformation;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.ITestDataProvider; import org.apache.poi.ss.ITestDataProvider;
import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddress;
@ -47,6 +29,17 @@ import org.junit.Assume;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import java.awt.font.FontRenderContext;
import java.awt.font.TextAttribute;
import java.awt.font.TextLayout;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
import java.text.AttributedString;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.*;
/** /**
* A base class for bugzilla issues that can be described in terms of common ss interfaces. * A base class for bugzilla issues that can be described in terms of common ss interfaces.
* *