testsheet.java
来自「EXCEL read and write」· Java 代码 · 共 586 行 · 第 1/2 页
JAVA
586 行
public void testColPageBreaks() { short rowFrom = 0; short rowTo = (short)65535; Sheet worksheet = Sheet.createSheet(); PageSettingsBlock sheet = worksheet.getPageSettings(); sheet.setColumnBreak((short)0, rowFrom, rowTo); assertTrue("no col break at 0", sheet.isColumnBroken(0)); assertEquals("1 col break available", 1, sheet.getNumColumnBreaks()); sheet.setColumnBreak((short)0, rowFrom, rowTo); assertTrue("no col break at 0", sheet.isColumnBroken(0)); assertEquals("1 col break available", 1, sheet.getNumColumnBreaks()); sheet.setColumnBreak((short)1, rowFrom, rowTo); sheet.setColumnBreak((short)10, rowFrom, rowTo); sheet.setColumnBreak((short)15, rowFrom, rowTo); assertTrue("no col break at 1", sheet.isColumnBroken(1)); assertTrue("no col break at 10", sheet.isColumnBroken(10)); assertTrue("no col break at 15", sheet.isColumnBroken(15)); assertEquals("4 col break available", 4, sheet.getNumColumnBreaks()); boolean is10 = false; boolean is0 = false; boolean is1 = false; boolean is15 = false; int[] colBreaks = sheet.getColumnBreaks(); for (int i = 0; i < colBreaks.length; i++) { int main = colBreaks[i]; if (main != 0 && main != 1 && main != 10 && main != 15) fail("Invalid page break"); if (main == 0) is0 = true; if (main == 1) is1 = true; if (main == 10) is10= true; if (main == 15) is15 = true; } assertTrue("one of the breaks didnt make it", is0 && is1 && is10 && is15); sheet.removeColumnBreak(15); assertFalse("column break should not be there", sheet.isColumnBroken(15)); sheet.removeColumnBreak(0); assertFalse("column break should not be there", sheet.isColumnBroken(0)); sheet.removeColumnBreak(1); assertFalse("column break should not be there", sheet.isColumnBroken(1)); sheet.removeColumnBreak(10); assertFalse("column break should not be there", sheet.isColumnBroken(10)); assertEquals("no more breaks", 0, sheet.getNumColumnBreaks()); } /** * test newly added method Sheet.getXFIndexForColAt(..) * works as designed. */ public void testXFIndexForColumn() { final short TEST_IDX = 10; final short DEFAULT_IDX = 0xF; // 15 short xfindex = Short.MIN_VALUE; Sheet sheet = Sheet.createSheet(); // without ColumnInfoRecord xfindex = sheet.getXFIndexForColAt((short) 0); assertEquals(DEFAULT_IDX, xfindex); xfindex = sheet.getXFIndexForColAt((short) 1); assertEquals(DEFAULT_IDX, xfindex); ColumnInfoRecord nci = new ColumnInfoRecord(); sheet._columnInfos.insertColumn(nci); // single column ColumnInfoRecord nci.setFirstColumn((short) 2); nci.setLastColumn((short) 2); nci.setXFIndex(TEST_IDX); xfindex = sheet.getXFIndexForColAt((short) 0); assertEquals(DEFAULT_IDX, xfindex); xfindex = sheet.getXFIndexForColAt((short) 1); assertEquals(DEFAULT_IDX, xfindex); xfindex = sheet.getXFIndexForColAt((short) 2); assertEquals(TEST_IDX, xfindex); xfindex = sheet.getXFIndexForColAt((short) 3); assertEquals(DEFAULT_IDX, xfindex); // ten column ColumnInfoRecord nci.setFirstColumn((short) 2); nci.setLastColumn((short) 11); nci.setXFIndex(TEST_IDX); xfindex = sheet.getXFIndexForColAt((short) 1); assertEquals(DEFAULT_IDX, xfindex); xfindex = sheet.getXFIndexForColAt((short) 2); assertEquals(TEST_IDX, xfindex); xfindex = sheet.getXFIndexForColAt((short) 6); assertEquals(TEST_IDX, xfindex); xfindex = sheet.getXFIndexForColAt((short) 11); assertEquals(TEST_IDX, xfindex); xfindex = sheet.getXFIndexForColAt((short) 12); assertEquals(DEFAULT_IDX, xfindex); // single column ColumnInfoRecord starting at index 0 nci.setFirstColumn((short) 0); nci.setLastColumn((short) 0); nci.setXFIndex(TEST_IDX); xfindex = sheet.getXFIndexForColAt((short) 0); assertEquals(TEST_IDX, xfindex); xfindex = sheet.getXFIndexForColAt((short) 1); assertEquals(DEFAULT_IDX, xfindex); // ten column ColumnInfoRecord starting at index 0 nci.setFirstColumn((short) 0); nci.setLastColumn((short) 9); nci.setXFIndex(TEST_IDX); xfindex = sheet.getXFIndexForColAt((short) 0); assertEquals(TEST_IDX, xfindex); xfindex = sheet.getXFIndexForColAt((short) 7); assertEquals(TEST_IDX, xfindex); xfindex = sheet.getXFIndexForColAt((short) 9); assertEquals(TEST_IDX, xfindex); xfindex = sheet.getXFIndexForColAt((short) 10); assertEquals(DEFAULT_IDX, xfindex); } private static final class SizeCheckingRecordVisitor implements RecordVisitor { private int _totalSize; public SizeCheckingRecordVisitor() { _totalSize = 0; } public void visitRecord(Record r) { int estimatedSize=r.getRecordSize(); byte[] buf = new byte[estimatedSize]; int serializedSize = r.serialize(0, buf); if (estimatedSize != serializedSize) { throw new AssertionFailedError("serialized size mismatch for record (" + r.getClass().getName() + ")"); } _totalSize += estimatedSize; } public int getTotalSize() { return _totalSize; } } /** * Prior to bug 45066, POI would get the estimated sheet size wrong * when an <tt>UncalcedRecord</tt> was present.<p/> */ public void testUncalcSize_bug45066() { List records = new ArrayList(); records.add(new BOFRecord()); records.add(new UncalcedRecord()); records.add(new DimensionsRecord()); records.add(createWindow2Record()); records.add(EOFRecord.instance); Sheet sheet = createSheet(records); // The original bug was due to different logic for collecting records for sizing and // serialization. The code has since been refactored into a single method for visiting // all contained records. Now this test is much less interesting SizeCheckingRecordVisitor scrv = new SizeCheckingRecordVisitor(); sheet.visitContainedRecords(scrv, 0); assertEquals(90, scrv.getTotalSize()); } /** * Prior to bug 45145 <tt>RowRecordsAggregate</tt> and <tt>ValueRecordsAggregate</tt> could * sometimes occur in reverse order. This test reproduces one of those situations and makes * sure that RRA comes before VRA.<br/> * * The code here represents a normal POI use case where a spreadsheet is created from scratch. */ public void testRowValueAggregatesOrder_bug45145() { Sheet sheet = Sheet.createSheet(); RowRecord rr = new RowRecord(5); sheet.addRow(rr); CellValueRecordInterface cvr = new BlankRecord(); cvr.setColumn((short)0); cvr.setRow(5); sheet.addValueRecord(5, cvr); int dbCellRecordPos = getDbCellRecordPos(sheet); if (dbCellRecordPos == 252) { // The overt symptom of the bug // DBCELL record pos is calculated wrong if VRA comes before RRA throw new AssertionFailedError("Identified bug 45145"); } if (false) { // make sure that RRA and VRA are in the right place // (Aug 2008) since the VRA is now part of the RRA, there is much less chance that // they could get out of order. Still, one could write serialize the sheet here, // and read back with EventRecordFactory to make sure... } assertEquals(242, dbCellRecordPos); } /** * @return the value calculated for the position of the first DBCELL record for this sheet. * That value is found on the IndexRecord. */ private static int getDbCellRecordPos(Sheet sheet) { MyIndexRecordListener myIndexListener = new MyIndexRecordListener(); sheet.visitContainedRecords(myIndexListener, 0); IndexRecord indexRecord = myIndexListener.getIndexRecord(); int dbCellRecordPos = indexRecord.getDbcellAt(0); return dbCellRecordPos; } private static final class MyIndexRecordListener implements RecordVisitor { private IndexRecord _indexRecord; public MyIndexRecordListener() { // no-arg constructor } public IndexRecord getIndexRecord() { return _indexRecord; } public void visitRecord(Record r) { if (r instanceof IndexRecord) { if (_indexRecord != null) { throw new RuntimeException("too many index records"); } _indexRecord = (IndexRecord)r; } } } /** * Checks for bug introduced around r682282-r683880 that caused a second GUTS records * which in turn got the dimensions record out of alignment */ public void testGutsRecord_bug45640() { Sheet sheet = Sheet.createSheet(); sheet.addRow(new RowRecord(0)); sheet.addRow(new RowRecord(1)); sheet.groupRowRange( 0, 1, true ); sheet.toString(); List recs = sheet.getRecords(); int count=0; for(int i=0; i< recs.size(); i++) { if (recs.get(i) instanceof GutsRecord) { count++; } } if (count == 2) { throw new AssertionFailedError("Identified bug 45640"); } assertEquals(1, count); } public void testMisplacedMergedCellsRecords_bug45699() { HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("ex45698-22488.xls"); HSSFSheet sheet = wb.getSheetAt(0); HSSFRow row = sheet.getRow(3); HSSFCell cell = row.getCell(4); if (cell == null) { throw new AssertionFailedError("Identified bug 45699"); } assertEquals("Informations", cell.getRichStringCellValue().getString()); } /** * In 3.1, setting margins between creating first row and first cell caused an exception. */ public void testSetMargins_bug45717() { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("Vorschauliste"); HSSFRow row = sheet.createRow(0); sheet.setMargin(HSSFSheet.LeftMargin, 0.3); try { row.createCell(0); } catch (IllegalStateException e) { if (e.getMessage().equals("Cannot create value records before row records exist")) { throw new AssertionFailedError("Identified bug 45717"); } throw e; } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?