Hi,
We have a project with quite a big codebase and I'm looking for a way to
implement a security-feature, where the "setQuotePrefixed(true);" style-flag is
automatically applied to cells with content that starts with a "=" (as these
contents would be interpreted as formulars once excel is opened and the cell
value is changed or pressed enter on unchanged).
We already have a class that produces "clean" instances of XSSFWorkbook (with
some core properties nilled out). There I've implemented a method to create
autofixing workbooks - but this is not working for streaming workbooks
(SXSSFWorkbook), because these are already streamed out before the "commit"
method is called.
Do you know how I could implement such a behaviour for SXSSFWorkbooks ?
Thank you and best regards,
Tobias
Heres my code for XSSFWorkbooks:
public static XSSFWorkbook createCleanXSSFWorkbook(InputStream is) throws
IOException
{
XSSFWorkbook wb=new XSSFWorkbook(is){
@Override
protected void commit() throws IOException
{
applySafeCellStyles(this);
super.commit();
}
};
cleanXSSFMetaInformation(wb);
return wb;
}
private static void applySafeCellStyles(Workbook wb)
{
int sheets = wb.getNumberOfSheets();
Map<CellStyle, CellStyle> styleToSafeStyleMap = new HashMap<>();
for (int sheetNumber = 0; sheetNumber < sheets; sheetNumber++)
{
Sheet sheet = wb.getSheetAt(sheetNumber);
for (Row row : sheet)
{
for (Cell cell : row)
{
if
(cell.getCellType() == CellType.STRING)
{
String cellValue = cell.getStringCellValue();
if (cellValue.startsWith("="))
{
CellStyle thisCellStyle = cell.getCellStyle();
CellStyle safeCellStyle = styleToSafeStyleMap.get(thisCellStyle);
if (safeCellStyle == null)
{
safeCellStyle = wb.createCellStyle();
safeCellStyle.cloneStyleFrom(thisCellStyle);
safeCellStyle.setQuotePrefixed(true);
styleToSafeStyleMap.put(thisCellStyle,
safeCellStyle);
}
cell.setCellStyle(safeCellStyle);
}
}
}
}
}
}
Freundliche Grüße
Tobias Fink
Software Development
Tel.: +49(0)621 - 520078 - 0 -- Fax: +49(0)621 - 520078 - 20
E-Mail: [email protected]<mailto:[email protected]>
Fasihi GmbH - Ludwig-Reichling-Straße 6 - 67059 Ludwigshafen
Geschäftsführer Saeid Fasihi, Rolf Lutzer - Firmensitz Ludwigshafen a. Rh.
Amtsgericht Ludwigshafen - HRB 60601
-----------------------------------------------------
Preisträger Großer Preis des Mittelstandes 2014
Innovationspreisträger Rheinland-Pfalz 2011
-----------------------------------------------------
Besuchen Sie uns auch unter
Das Digitale Assistenzsystem: https://das-assistenzsystem.de/
Fasihi eXperience Platform: https://fxp.fasihi.net/
Homepage: http://www.fasihi.net<http://www.fasihi.net/>
Unsere Hinweise zum Datenschutz finden Sie hier: Datenschutzerklärung Fasihi
GmbH<https://fasihi.net/portal/fep/de/dt.jsp?setCursor=1_551471>