==================================================================== */\r
package org.apache.poi.stress;\r
\r
+import static org.junit.Assert.assertEquals;\r
import static org.junit.Assert.assertFalse;\r
import static org.junit.Assert.assertNotNull;\r
\r
import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileNotFoundException;\r
+import java.io.IOException;\r
+import java.io.InputStream;\r
import java.util.HashSet;\r
import java.util.Set;\r
\r
import org.apache.poi.POITextExtractor;\r
import org.apache.poi.extractor.ExtractorFactory;\r
+import org.apache.poi.openxml4j.exceptions.InvalidFormatException;\r
+import org.apache.poi.openxml4j.exceptions.OpenXML4JException;\r
+import org.apache.xmlbeans.XmlException;\r
\r
public abstract class AbstractFileHandler implements FileHandler {\r
public static final Set<String> EXPECTED_EXTRACTOR_FAILURES = new HashSet<String>();\r
}\r
\r
public void handleExtracting(File file) throws Exception {\r
+ boolean before = ExtractorFactory.getThreadPrefersEventExtractors();\r
+ try {\r
+ ExtractorFactory.setThreadPrefersEventExtractors(true);\r
+ handleExtractingInternal(file);\r
+\r
+ ExtractorFactory.setThreadPrefersEventExtractors(false);\r
+ handleExtractingInternal(file);\r
+ } finally {\r
+ ExtractorFactory.setThreadPrefersEventExtractors(before);\r
+ }\r
+ }\r
+\r
+ private void handleExtractingInternal(File file) throws Exception {\r
+ long length = file.length();\r
+ long modified = file.lastModified();\r
+ \r
POITextExtractor extractor = ExtractorFactory.createExtractor(file);\r
try {\r
assertNotNull(extractor);\r
\r
assertFalse("Expected Extraction to fail for file " + file + " and handler " + this + ", but did not fail!", \r
EXPECTED_EXTRACTOR_FAILURES.contains(file));\r
+ \r
+ assertEquals("File should not be modified by extractor", length, file.length());\r
+ assertEquals("File should not be modified by extractor", modified, file.lastModified());\r
+ \r
+ handleExtractingAsStream(file);\r
} catch (IllegalArgumentException e) {\r
if(!EXPECTED_EXTRACTOR_FAILURES.contains(file)) {\r
throw new Exception("While handling " + file, e);\r
extractor.close();\r
}\r
}\r
+\r
+ private void handleExtractingAsStream(File file) throws FileNotFoundException,\r
+ IOException, InvalidFormatException, OpenXML4JException,\r
+ XmlException {\r
+ InputStream stream = new FileInputStream(file);\r
+ try {\r
+ POITextExtractor streamExtractor = ExtractorFactory.createExtractor(stream);\r
+ try {\r
+ assertNotNull(streamExtractor);\r
+ \r
+ assertNotNull(streamExtractor.getText());\r
+ } finally {\r
+ streamExtractor.close();\r
+ }\r
+ } finally {\r
+ stream.close();\r
+ }\r
+ }\r
}\r
import static org.junit.Assert.assertNotNull;
+import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
stream.close();
}
}
+
+ // a test-case to test this locally without executing the full TestAllFiles
+ @Test
+ public void testExtractor() throws Exception {
+ handleExtracting(new File("test-data/hpsf/TestBug44375.xls"));
+ }
}
package org.apache.poi.stress;
import java.io.ByteArrayOutputStream;
+import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
stream.close();
}
}
+
+ // a test-case to test this locally without executing the full TestAllFiles
+ @Test
+ public void testExtractor() throws Exception {
+ handleExtracting(new File("test-data/spreadsheet/56278.xlsx"));
+ }
}
\ No newline at end of file
}
public String getDocumentSummaryInformationText() {
+ if(document == null) { // event based extractor does not have a document
+ return "";
+ }
+
DocumentSummaryInformation dsi = document.getDocumentSummaryInformation();
StringBuffer text = new StringBuffer();
return text.toString();
}
public String getSummaryInformationText() {
+ if(document == null) { // event based extractor does not have a document
+ return "";
+ }
+
SummaryInformation si = document.getSummaryInformation();
// Just normal properties
import java.io.InputStream;
import java.io.IOException;
+import java.util.Set;
import org.apache.poi.hssf.eventusermodel.HSSFUserException;
import org.apache.poi.hssf.record.*;
* @param req an Instance of HSSFRequest which has your registered listeners
* @param dir a DirectoryNode containing your workbook
*/
- public void processWorkbookEvents(HSSFRequest req, DirectoryNode dir) throws IOException {
- InputStream in = dir.createDocumentInputStream("Workbook");
-
- processEvents(req, in);
- }
+ public void processWorkbookEvents(HSSFRequest req, DirectoryNode dir) throws IOException {
+ // some old documents have "WORKBOOK" or "BOOK"
+ final String name;
+ Set<String> entryNames = dir.getEntryNames();
+ if (entryNames.contains("Workbook")) {
+ name = "Workbook";
+ } else if (entryNames.contains("WORKBOOK")) {
+ name = "WORKBOOK";
+ } else if (entryNames.contains("BOOK")) {
+ name = "BOOK";
+ } else {
+ name = "Workbook";
+ }
+
+ InputStream in = dir.createDocumentInputStream(name);
+
+ processEvents(req, in);
+ }
/**
* Processes a file into essentially record events.
* Returns the core document properties, eg author
*/
public String getCorePropertiesText() {
+ POIXMLDocument document = getDocument();
+ if(document == null) { // event based extractor does not have a document
+ return "";
+ }
+
StringBuffer text = new StringBuffer();
- PackagePropertiesPart props =
- getDocument().getProperties().getCoreProperties().getUnderlyingProperties();
+ PackagePropertiesPart props =
+ document.getProperties().getCoreProperties().getUnderlyingProperties();
appendIfPresent(text, "Category", props.getCategoryProperty().getValue());
appendIfPresent(text, "Category", props.getCategoryProperty().getValue());
* application
*/
public String getExtendedPropertiesText() {
+ POIXMLDocument document = getDocument();
+ if(document == null) { // event based extractor does not have a document
+ return "";
+ }
+
StringBuffer text = new StringBuffer();
org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.CTProperties
- props = getDocument().getProperties().getExtendedProperties().getUnderlyingProperties();
+ props = document.getProperties().getExtendedProperties().getUnderlyingProperties();
appendIfPresent(text, "Application", props.getApplication());
appendIfPresent(text, "AppVersion", props.getAppVersion());
*/
@SuppressWarnings("deprecation")
public String getCustomPropertiesText() {
+ POIXMLDocument document = getDocument();
+ if(document == null) { // event based extractor does not have a document
+ return "";
+ }
+
StringBuilder text = new StringBuilder();
org.openxmlformats.schemas.officeDocument.x2006.customProperties.CTProperties
- props = getDocument().getProperties().getCustomProperties().getUnderlyingProperties();
+ props = document.getProperties().getCustomProperties().getUnderlyingProperties();
for(CTProperty property : props.getPropertyArray()) {
String val = "(not implemented!)";
/**
* Returns an array of text extractors, one for each of
- * the embeded documents in the file (if there are any).
- * If there are no embeded documents, you'll get back an
+ * the embedded documents in the file (if there are any).
+ * If there are no embedded documents, you'll get back an
* empty array. Otherwise, you'll get one open
- * {@link POITextExtractor} for each embeded file.
+ * {@link POITextExtractor} for each embedded file.
*/
public static POITextExtractor[] getEmbededDocsTextExtractors(POIOLE2TextExtractor ext) throws IOException, InvalidFormatException, OpenXML4JException, XmlException {
// All the embded directories we spotted
private String formatString;
private final DataFormatter formatter;
private int rowNum;
+ private int nextRowNum; // some sheets do not have rowNums, Excel can read them so we should try to handle them correctly as well
private String cellRef;
private boolean formulasNotResults;
headerFooter.setLength(0);
}
else if("row".equals(name)) {
- rowNum = Integer.parseInt(attributes.getValue("r")) - 1;
+ String rowNumStr = attributes.getValue("r");
+ if(rowNumStr != null) {
+ rowNum = Integer.parseInt(rowNumStr) - 1;
+ } else {
+ rowNum = nextRowNum;
+ }
output.startRow(rowNum);
}
// c => cell
case NUMBER:
String n = value.toString();
- if (this.formatString != null)
+ if (this.formatString != null && n.length() > 0)
thisStr = formatter.formatRawCellContents(Double.parseDouble(n), this.formatIndex, this.formatString);
else
thisStr = n;
// Finish up the row
output.endRow(rowNum);
+
+ // some sheets do not have rowNum set in the XML, Excel can read them so we should try to read them as well
+ nextRowNum = rowNum + 1;
} else if ("sheetData".equals(name)) {
// Handle any "missing" cells which had comments attached
checkForEmptyCellComments(EmptyCellCommentsCheckType.END_OF_SHEET_DATA);
import junit.framework.TestCase;
import org.apache.poi.POITextExtractor;
+import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.extractor.ExcelExtractor;
import org.apache.poi.xssf.XSSFTestDataSamples;
POITextExtractor[] extractors =
new POITextExtractor[] { ooxmlExtractor, ole2Extractor };
for (int i = 0; i < extractors.length; i++) {
- @SuppressWarnings("resource")
POITextExtractor extractor = extractors[i];
String text = extractor.getText().replaceAll("[\r\t]", "");
fixture.close();
}
}
+
+ public void testFile56278_normal() throws Exception {
+ // first with normal Text Extractor
+ POIXMLTextExtractor extractor = new XSSFExcelExtractor(
+ XSSFTestDataSamples.openSampleWorkbook("56278.xlsx"));
+ try {
+ assertNotNull(extractor.getText());
+ } finally {
+ extractor.close();
+ }
+ }
+
+ public void testFile56278_event() throws Exception {
+ // then with event based one
+ POIXMLTextExtractor extractor = getExtractor("56278.xlsx");
+ try {
+ assertNotNull(extractor.getText());
+ } finally {
+ extractor.close();
+ }
+ }
}
import junit.framework.TestCase;
import org.apache.poi.POIDataSamples;
+import org.apache.poi.POITextExtractor;
import org.apache.poi.hpsf.Thumbnail;
import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.hssf.extractor.ExcelExtractor;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.hwpf.extractor.Word6Extractor;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public final class TestHPSFPropertiesExtractor extends TestCase {
public void testNormalProperties() throws Exception {
POIFSFileSystem fs = new POIFSFileSystem(_samples.openResourceAsStream("TestMickey.doc"));
HPSFPropertiesExtractor ext = new HPSFPropertiesExtractor(fs);
- ext.getText();
-
- // Check each bit in turn
- String sinfText = ext.getSummaryInformationText();
- String dinfText = ext.getDocumentSummaryInformationText();
-
- assertTrue(sinfText.indexOf("TEMPLATE = Normal") > -1);
- assertTrue(sinfText.indexOf("SUBJECT = sample subject") > -1);
- assertTrue(dinfText.indexOf("MANAGER = sample manager") > -1);
- assertTrue(dinfText.indexOf("COMPANY = sample company") > -1);
-
- // Now overall
- String text = ext.getText();
- assertTrue(text.indexOf("TEMPLATE = Normal") > -1);
- assertTrue(text.indexOf("SUBJECT = sample subject") > -1);
- assertTrue(text.indexOf("MANAGER = sample manager") > -1);
- assertTrue(text.indexOf("COMPANY = sample company") > -1);
+ try {
+ ext.getText();
+
+ // Check each bit in turn
+ String sinfText = ext.getSummaryInformationText();
+ String dinfText = ext.getDocumentSummaryInformationText();
+
+ assertTrue(sinfText.indexOf("TEMPLATE = Normal") > -1);
+ assertTrue(sinfText.indexOf("SUBJECT = sample subject") > -1);
+ assertTrue(dinfText.indexOf("MANAGER = sample manager") > -1);
+ assertTrue(dinfText.indexOf("COMPANY = sample company") > -1);
+
+ // Now overall
+ String text = ext.getText();
+ assertTrue(text.indexOf("TEMPLATE = Normal") > -1);
+ assertTrue(text.indexOf("SUBJECT = sample subject") > -1);
+ assertTrue(text.indexOf("MANAGER = sample manager") > -1);
+ assertTrue(text.indexOf("COMPANY = sample company") > -1);
+ } finally {
+ ext.close();
+ }
}
public void testNormalUnicodeProperties() throws Exception {
POIFSFileSystem fs = new POIFSFileSystem(_samples.openResourceAsStream("TestUnicode.xls"));
HPSFPropertiesExtractor ext = new HPSFPropertiesExtractor(fs);
- ext.getText();
-
- // Check each bit in turn
- String sinfText = ext.getSummaryInformationText();
- String dinfText = ext.getDocumentSummaryInformationText();
-
- assertTrue(sinfText.indexOf("AUTHOR = marshall") > -1);
- assertTrue(sinfText.indexOf("TITLE = Titel: \u00c4h") > -1);
- assertTrue(dinfText.indexOf("COMPANY = Schreiner") > -1);
- assertTrue(dinfText.indexOf("SCALE = false") > -1);
-
- // Now overall
- String text = ext.getText();
- assertTrue(text.indexOf("AUTHOR = marshall") > -1);
- assertTrue(text.indexOf("TITLE = Titel: \u00c4h") > -1);
- assertTrue(text.indexOf("COMPANY = Schreiner") > -1);
- assertTrue(text.indexOf("SCALE = false") > -1);
+ try {
+ ext.getText();
+
+ // Check each bit in turn
+ String sinfText = ext.getSummaryInformationText();
+ String dinfText = ext.getDocumentSummaryInformationText();
+
+ assertTrue(sinfText.indexOf("AUTHOR = marshall") > -1);
+ assertTrue(sinfText.indexOf("TITLE = Titel: \u00c4h") > -1);
+ assertTrue(dinfText.indexOf("COMPANY = Schreiner") > -1);
+ assertTrue(dinfText.indexOf("SCALE = false") > -1);
+
+ // Now overall
+ String text = ext.getText();
+ assertTrue(text.indexOf("AUTHOR = marshall") > -1);
+ assertTrue(text.indexOf("TITLE = Titel: \u00c4h") > -1);
+ assertTrue(text.indexOf("COMPANY = Schreiner") > -1);
+ assertTrue(text.indexOf("SCALE = false") > -1);
+ } finally {
+ ext.close();
+ }
}
public void testCustomProperties() throws Exception {
_samples.openResourceAsStream("TestMickey.doc")
);
HPSFPropertiesExtractor ext = new HPSFPropertiesExtractor(fs);
-
- // Custom properties are part of the document info stream
- String dinfText = ext.getDocumentSummaryInformationText();
- assertTrue(dinfText.indexOf("Client = sample client") > -1);
- assertTrue(dinfText.indexOf("Division = sample division") > -1);
-
- String text = ext.getText();
- assertTrue(text.indexOf("Client = sample client") > -1);
- assertTrue(text.indexOf("Division = sample division") > -1);
+ try {
+ // Custom properties are part of the document info stream
+ String dinfText = ext.getDocumentSummaryInformationText();
+ assertTrue(dinfText.indexOf("Client = sample client") > -1);
+ assertTrue(dinfText.indexOf("Division = sample division") > -1);
+
+ String text = ext.getText();
+ assertTrue(text.indexOf("Client = sample client") > -1);
+ assertTrue(text.indexOf("Division = sample division") > -1);
+ } finally {
+ ext.close();
+ }
}
- public void testConstructors() {
+ public void testConstructors() throws IOException {
POIFSFileSystem fs;
HSSFWorkbook wb;
try {
}
ExcelExtractor excelExt = new ExcelExtractor(wb);
- String fsText = (new HPSFPropertiesExtractor(fs)).getText();
- String hwText = (new HPSFPropertiesExtractor(wb)).getText();
- String eeText = (new HPSFPropertiesExtractor(excelExt)).getText();
+ final String fsText;
+ HPSFPropertiesExtractor fsExt = new HPSFPropertiesExtractor(fs);
+ try {
+ fsText = fsExt.getText();
+ } finally {
+ fsExt.close();
+ }
+
+ final String hwText;
+ HPSFPropertiesExtractor hwExt = new HPSFPropertiesExtractor(wb);
+ try {
+ hwText = hwExt.getText();
+ } finally {
+ hwExt.close();
+ }
+
+ final String eeText;
+ HPSFPropertiesExtractor eeExt = new HPSFPropertiesExtractor(excelExt);
+ try {
+ eeText = eeExt.getText();
+ } finally {
+ eeExt.close();
+ }
assertEquals(fsText, hwText);
assertEquals(fsText, eeText);
assertTrue(fsText.indexOf("TITLE = Titel: \u00c4h") > -1);
}
- public void test42726() {
- HPSFPropertiesExtractor ex = new HPSFPropertiesExtractor(HSSFTestDataSamples.openSampleWorkbook("42726.xls"));
- String txt = ex.getText();
- assertTrue(txt.indexOf("PID_AUTHOR") != -1);
- assertTrue(txt.indexOf("PID_EDITTIME") != -1);
- assertTrue(txt.indexOf("PID_REVNUMBER") != -1);
- assertTrue(txt.indexOf("PID_THUMBNAIL") != -1);
+ public void test42726() throws IOException {
+ HPSFPropertiesExtractor ext = new HPSFPropertiesExtractor(HSSFTestDataSamples.openSampleWorkbook("42726.xls"));
+ try {
+ String txt = ext.getText();
+ assertTrue(txt.indexOf("PID_AUTHOR") != -1);
+ assertTrue(txt.indexOf("PID_EDITTIME") != -1);
+ assertTrue(txt.indexOf("PID_REVNUMBER") != -1);
+ assertTrue(txt.indexOf("PID_THUMBNAIL") != -1);
+ } finally {
+ ext.close();
+ }
}
public void testThumbnail() throws Exception {
assertNotNull(thumbnail.getThumbnailAsWMF());
wb.close();
}
+
+ public void testExtractorFromWord6Extractor() throws Exception {
+ POIFSFileSystem fs = new POIFSFileSystem(_samples.openResourceAsStream("TestMickey.doc"));
+ Word6Extractor wExt = new Word6Extractor(fs);
+ try {
+ POITextExtractor ext = wExt.getMetadataTextExtractor();
+ try {
+ // Now overall
+ String text = ext.getText();
+ assertTrue(text.indexOf("TEMPLATE = Normal") > -1);
+ assertTrue(text.indexOf("SUBJECT = sample subject") > -1);
+ assertTrue(text.indexOf("MANAGER = sample manager") > -1);
+ assertTrue(text.indexOf("COMPANY = sample company") > -1);
+ } finally {
+ ext.close();
+ }
+ } finally {
+ wExt.close();
+ }
+ }
}
POIFSFileSystem fs = new POIFSFileSystem(openSample("42844.xls"));
HSSFEventFactory factory = new HSSFEventFactory();
factory.processWorkbookEvents(req, fs);
-
- assertTrue("no errors while processing the file", true);
}
private static class MockHSSFListener implements HSSFListener {
records.add(record);
}
}
+
+ public void testWithDifferentWorkbookName() throws Exception {
+ HSSFRequest req = new HSSFRequest();
+ MockHSSFListener mockListen = new MockHSSFListener();
+ req.addListenerForAllRecords(mockListen);
+
+ POIFSFileSystem fs = new POIFSFileSystem(openSample("BOOK_in_capitals.xls"));
+ HSSFEventFactory factory = new HSSFEventFactory();
+ factory.processWorkbookEvents(req, fs);
+
+ fs = new POIFSFileSystem(openSample("WORKBOOK_in_capitals.xls"));
+ factory = new HSSFEventFactory();
+ factory.processWorkbookEvents(req, fs);
+ }
}
}
- public void testSimple() {
-
+ public void testSimple() throws IOException {
ExcelExtractor extractor = createExtractor("Simple.xls");
- assertEquals("Sheet1\nreplaceMe\nSheet2\nSheet3\n", extractor.getText());
-
- // Now turn off sheet names
- extractor.setIncludeSheetNames(false);
- assertEquals("replaceMe\n", extractor.getText());
+ try {
+ assertEquals("Sheet1\nreplaceMe\nSheet2\nSheet3\n", extractor.getText());
+
+ // Now turn off sheet names
+ extractor.setIncludeSheetNames(false);
+ assertEquals("replaceMe\n", extractor.getText());
+ } finally {
+ extractor.close();
+ }
}
public void testNumericFormula() {
public void testEventExtractor() throws Exception {
- EventBasedExcelExtractor extractor;
-
// First up, a simple file with string
// based formulas in it
- extractor = new EventBasedExcelExtractor(
+ EventBasedExcelExtractor extractor = new EventBasedExcelExtractor(
new POIFSFileSystem(
HSSFTestDataSamples.openSampleFileStream("SimpleWithFormula.xls")
)
);
- extractor.setIncludeSheetNames(true);
-
- String text = extractor.getText();
- assertEquals("Sheet1\nreplaceme\nreplaceme\nreplacemereplaceme\nSheet2\nSheet3\n", text);
-
- extractor.setIncludeSheetNames(false);
- extractor.setFormulasNotResults(true);
-
- text = extractor.getText();
- assertEquals("replaceme\nreplaceme\nCONCATENATE(A1,A2)\n", text);
-
-
- // Now, a slightly longer file with numeric formulas
- extractor = new EventBasedExcelExtractor(
- new POIFSFileSystem(
- HSSFTestDataSamples.openSampleFileStream("sumifformula.xls")
- )
- );
- extractor.setIncludeSheetNames(false);
- extractor.setFormulasNotResults(true);
-
- text = extractor.getText();
- assertEquals(
- "1000\t1\tSUMIF(A1:A5,\">4000\",B1:B5)\n" +
- "2000\t2\n" +
- "3000\t3\n" +
- "4000\t4\n" +
- "5000\t5\n",
- text
- );
+ try {
+ extractor.setIncludeSheetNames(true);
+
+ String text = extractor.getText();
+ assertEquals("Sheet1\nreplaceme\nreplaceme\nreplacemereplaceme\nSheet2\nSheet3\n", text);
+
+ extractor.setIncludeSheetNames(false);
+ extractor.setFormulasNotResults(true);
+
+ text = extractor.getText();
+ assertEquals("replaceme\nreplaceme\nCONCATENATE(A1,A2)\n", text);
+
+
+ // Now, a slightly longer file with numeric formulas
+ extractor = new EventBasedExcelExtractor(
+ new POIFSFileSystem(
+ HSSFTestDataSamples.openSampleFileStream("sumifformula.xls")
+ )
+ );
+ extractor.setIncludeSheetNames(false);
+ extractor.setFormulasNotResults(true);
+
+ text = extractor.getText();
+ assertEquals(
+ "1000\t1\tSUMIF(A1:A5,\">4000\",B1:B5)\n" +
+ "2000\t2\n" +
+ "3000\t3\n" +
+ "4000\t4\n" +
+ "5000\t5\n",
+ text
+ );
+ } finally {
+ extractor.close();
+ }
}
public void testWithComments() {
HSSFWorkbook wbB = new HSSFWorkbook(dirB, fs, true);
ExcelExtractor exA = new ExcelExtractor(wbA);
- ExcelExtractor exB = new ExcelExtractor(wbB);
-
- assertEquals("Sheet1\nTest excel file\nThis is the first file\nSheet2\nSheet3\n",
- exA.getText());
- assertEquals("Sample Excel", exA.getSummaryInformation().getTitle());
-
- assertEquals("Sheet1\nAnother excel file\nThis is the second file\nSheet2\nSheet3\n",
- exB.getText());
- assertEquals("Sample Excel 2", exB.getSummaryInformation().getTitle());
+ try {
+ ExcelExtractor exB = new ExcelExtractor(wbB);
+ try {
+ assertEquals("Sheet1\nTest excel file\nThis is the first file\nSheet2\nSheet3\n",
+ exA.getText());
+ assertEquals("Sample Excel", exA.getSummaryInformation().getTitle());
+
+ assertEquals("Sheet1\nAnother excel file\nThis is the second file\nSheet2\nSheet3\n",
+ exB.getText());
+ assertEquals("Sample Excel 2", exB.getSummaryInformation().getTitle());
+ } finally {
+ exB.close();
+ }
+ } finally {
+ exA.close();
+ }
}
/**
HSSFWorkbook wbB = new HSSFWorkbook(dirB, fs, true);
ExcelExtractor exA = new ExcelExtractor(wbA);
- ExcelExtractor exB = new ExcelExtractor(wbB);
-
- assertEquals("Sheet1\nTest excel file\nThis is the first file\nSheet2\nSheet3\n",
- exA.getText());
- assertEquals("Sample Excel", exA.getSummaryInformation().getTitle());
-
- assertEquals("Sheet1\nAnother excel file\nThis is the second file\nSheet2\nSheet3\n",
- exB.getText());
- assertEquals("Sample Excel 2", exB.getSummaryInformation().getTitle());
-
- // And the base file too
- ExcelExtractor ex = new ExcelExtractor(fs);
- assertEquals("Sheet1\nI have lots of embeded files in me\nSheet2\nSheet3\n",
- ex.getText());
- assertEquals("Excel With Embeded", ex.getSummaryInformation().getTitle());
+ try {
+ ExcelExtractor exB = new ExcelExtractor(wbB);
+ try {
+ assertEquals("Sheet1\nTest excel file\nThis is the first file\nSheet2\nSheet3\n",
+ exA.getText());
+ assertEquals("Sample Excel", exA.getSummaryInformation().getTitle());
+
+ assertEquals("Sheet1\nAnother excel file\nThis is the second file\nSheet2\nSheet3\n",
+ exB.getText());
+ assertEquals("Sample Excel 2", exB.getSummaryInformation().getTitle());
+
+ // And the base file too
+ ExcelExtractor ex = new ExcelExtractor(fs);
+ try {
+ assertEquals("Sheet1\nI have lots of embeded files in me\nSheet2\nSheet3\n",
+ ex.getText());
+ assertEquals("Excel With Embeded", ex.getSummaryInformation().getTitle());
+ } finally {
+ ex.close();
+ }
+ } finally {
+ exB.close();
+ }
+ } finally {
+ exA.close();
+ }
}
/**