use of org.apache.poi.xssf.model.StylesTable in project poi by apache.
the class TestXSSFCellStyle method testBug55650.
/**
* Avoid ArrayIndexOutOfBoundsException when getting cell style
* in a workbook that has an empty xf table.
*/
@Test
public void testBug55650() throws IOException {
XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("52348.xlsx");
StylesTable st = workbook.getStylesSource();
assertEquals(0, st._getStyleXfsSize());
// no exception at this point
XSSFCellStyle style = workbook.getSheetAt(0).getRow(0).getCell(0).getCellStyle();
assertNull(style.getStyleXf());
XSSFWorkbook wb2 = XSSFTestDataSamples.writeOutAndReadBack(workbook);
assertNotNull(wb2);
wb2.close();
workbook.close();
}
use of org.apache.poi.xssf.model.StylesTable in project poi by apache.
the class TestXSSFRichTextString method testApplyFontWithStyles.
public void testApplyFontWithStyles() {
XSSFRichTextString rt = new XSSFRichTextString("Apache POI");
StylesTable tbl = new StylesTable();
rt.setStylesTableReference(tbl);
try {
rt.applyFont(0, 10, (short) 1);
fail("Fails without styles in the table");
} catch (IndexOutOfBoundsException e) {
// expected
}
tbl.putFont(new XSSFFont());
rt.applyFont(0, 10, (short) 1);
rt.applyFont((short) 1);
}
use of org.apache.poi.xssf.model.StylesTable in project tika by apache.
the class XSSFExcelExtractorDecorator method buildXHTML.
/**
* @see org.apache.poi.xssf.extractor.XSSFExcelExtractor#getText()
*/
@Override
protected void buildXHTML(XHTMLContentHandler xhtml) throws SAXException, XmlException, IOException {
OPCPackage container = extractor.getPackage();
ReadOnlySharedStringsTable strings;
XSSFReader.SheetIterator iter;
XSSFReader xssfReader;
StylesTable styles;
try {
xssfReader = new XSSFReader(container);
styles = xssfReader.getStylesTable();
iter = (XSSFReader.SheetIterator) xssfReader.getSheetsData();
strings = new ReadOnlySharedStringsTable(container);
} catch (InvalidFormatException e) {
throw new XmlException(e);
} catch (OpenXML4JException oe) {
throw new XmlException(oe);
}
//temporary workaround for POI-61034
//remove once POI 3.17-beta1 is released
Set<String> seen = new HashSet<>();
while (iter.hasNext()) {
SheetTextAsHTML sheetExtractor = new SheetTextAsHTML(xhtml);
PackagePart sheetPart = null;
try (InputStream stream = iter.next()) {
sheetPart = iter.getSheetPart();
final String partName = sheetPart.getPartName().toString();
if (seen.contains(partName)) {
continue;
}
seen.add(partName);
addDrawingHyperLinks(sheetPart);
sheetParts.add(sheetPart);
CommentsTable comments = iter.getSheetComments();
// Start, and output the sheet name
xhtml.startElement("div");
xhtml.element("h1", iter.getSheetName());
// Extract the main sheet contents
xhtml.startElement("table");
xhtml.startElement("tbody");
processSheet(sheetExtractor, comments, styles, strings, stream);
}
xhtml.endElement("tbody");
xhtml.endElement("table");
// do the headers before the contents)
for (String header : sheetExtractor.headers) {
extractHeaderFooter(header, xhtml);
}
for (String footer : sheetExtractor.footers) {
extractHeaderFooter(footer, xhtml);
}
// Do text held in shapes, if required
if (config.getIncludeShapeBasedContent()) {
List<XSSFShape> shapes = iter.getShapes();
processShapes(shapes, xhtml);
}
//for now dump sheet hyperlinks at bottom of page
//consider a double-pass of the inputstream to reunite hyperlinks with cells/textboxes
//step 1: extract hyperlink info from bottom of page
//step 2: process as we do now, but with cached hyperlink relationship info
extractHyperLinks(sheetPart, xhtml);
// All done with this sheet
xhtml.endElement("div");
}
}
use of org.apache.poi.xssf.model.StylesTable in project tdi-studio-se by Talend.
the class ExcelReader method call.
public Object call() throws Exception {
OPCPackage pkg = null;
try {
if (fileURL != null) {
pkg = OPCPackage.open(fileURL);
} else {
pkg = PackageHelper.open(is);
}
XSSFReader r = new XSSFReader(pkg);
StylesTable styles = r.getStylesTable();
ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(pkg);
sheetContentsHandler = new DefaultTalendSheetContentsHandler(cache);
DataFormatter formatter = new DataFormatter();
boolean formulasNotResults = false;
XMLReader parser = XMLReaderFactory.createXMLReader();
ContentHandler handler = new TalendXSSFSheetXMLHandler(styles, strings, sheetContentsHandler, formatter, formulasNotResults);
parser.setContentHandler(handler);
XSSFReader.SheetIterator sheets = (XSSFReader.SheetIterator) r.getSheetsData();
// List<InputStream> iss = new ArrayList<InputStream>();
LinkedHashMap<String, InputStream> issmap = new LinkedHashMap<String, InputStream>();
while (sheets.hasNext()) {
InputStream sheet = sheets.next();
String sheetName = sheets.getSheetName();
boolean match = false;
for (int i = 0; i < sheetNames.size(); i++) {
if ((asRegexs.get(i) && sheetName.matches(sheetNames.get(i))) || (!asRegexs.get(i) && sheetName.equals(sheetNames.get(i)))) {
match = true;
// iss.add(sheet);
issmap.put(sheetName, sheet);
break;
}
}
if (!match) {
sheet.close();
}
}
if (issmap.size() < 1) {
throw new RuntimeException("No match sheets");
}
for (InputStream is : issmap.values()) {
try {
InputSource sheetSource = new InputSource(is);
sheetSource.setEncoding(charset);
parser.parse(sheetSource);
} finally {
is.close();
}
}
} finally {
if (pkg != null) {
pkg.revert();
}
cache.notifyErrorOccurred();
}
return null;
}
use of org.apache.poi.xssf.model.StylesTable in project poi by apache.
the class TestXSSFSheet method setDefaultColumnStyle.
@Test
public void setDefaultColumnStyle() throws IOException {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet();
CTWorksheet ctWorksheet = sheet.getCTWorksheet();
StylesTable stylesTable = workbook.getStylesSource();
XSSFFont font = new XSSFFont();
font.setFontName("Cambria");
stylesTable.putFont(font);
CTXf cellStyleXf = CTXf.Factory.newInstance();
cellStyleXf.setFontId(1);
cellStyleXf.setFillId(0);
cellStyleXf.setBorderId(0);
cellStyleXf.setNumFmtId(0);
stylesTable.putCellStyleXf(cellStyleXf);
CTXf cellXf = CTXf.Factory.newInstance();
cellXf.setXfId(1);
stylesTable.putCellXf(cellXf);
XSSFCellStyle cellStyle = new XSSFCellStyle(1, 1, stylesTable, null);
assertEquals(1, cellStyle.getFontIndex());
sheet.setDefaultColumnStyle(3, cellStyle);
assertEquals(1, ctWorksheet.getColsArray(0).getColArray(0).getStyle());
workbook.close();
}
Aggregations