Add flag for Excel 4 macros in composite documents

This commit is contained in:
M. P. Halpin 2023-03-02 16:58:37 -05:00
parent 59b06fc126
commit 6340182c9e
3 changed files with 41 additions and 0 deletions

View File

@ -39,6 +39,7 @@ public final class BoundSheetRecord extends StandardRecord {
public static final short sid = 0x0085;
private static final BitField hiddenFlag = BitFieldFactory.getInstance(0x01);
private static final BitField veryHiddenFlag = BitFieldFactory.getInstance(0x02);
private static final BitField xl4Flag = BitFieldFactory.getInstance(0x100);
private int field_1_position_of_BOF;
private int field_2_option_flags;
@ -186,6 +187,24 @@ public final class BoundSheetRecord extends StandardRecord {
field_2_option_flags = veryHiddenFlag.setBoolean(field_2_option_flags, veryHidden);
}
/**
* Is the sheet an Excel 4 macro sheet?
*
* @return {@code true} if very hidden
*/
public boolean isExcel4Macro() {
return xl4Flag.isSet(field_2_option_flags);
}
/**
* Is the sheet an Excel 4 macro sheet?
*
* @param xl4flag {@code true} if an excel 4 macro sheet
*/
public void setExcel4Macro(boolean xl4flag) {
field_2_option_flags = xl4Flag.setBoolean(field_2_option_flags, xl4flag);
}
/**
* Converts a List of {@link BoundSheetRecord}s to an array and sorts by the position of their
* BOFs.

View File

@ -166,4 +166,26 @@ final class TestHSSFEventFactory {
Biff8EncryptionKey.setCurrentUserPassword(null);
}
}
@Test
void testXL4Workbook() throws Exception {
// This document has a single Excel 4 macro in it
openSample("66503.xls");
assertEquals(records.stream()
.filter(r -> r instanceof BoundSheetRecord)
.map(r -> (BoundSheetRecord)r)
.filter(BoundSheetRecord::isExcel4Macro)
.count(), 1);
}
@Test
void testXL4Workbook_false() throws Exception {
// This document does not have an Excel 4 macro in it
openSample("42844.xls");
assertEquals(records.stream()
.filter(r -> r instanceof BoundSheetRecord)
.map(r -> (BoundSheetRecord)r)
.filter(BoundSheetRecord::isExcel4Macro)
.count(), 0);
}
}

Binary file not shown.