/** * @작성자 : KYJ * @작성일 : 2016. 9. 9. * @param sheet * @throws Exception */ final static void createDefaultLogo(Sheet sheet) throws Exception { Workbook workbook = sheet.getWorkbook(); byte[] defaultLogoImage = getDefaultLogoImage(); if(defaultLogoImage == null) return; int pictureIdx = workbook.addPicture(defaultLogoImage, Workbook.PICTURE_TYPE_PNG); CreationHelper creationHelper = workbook.getCreationHelper(); ClientAnchor anchor = creationHelper.createClientAnchor(); //new XSSFClientAnchor(); // anchor.setAnchorType(AnchorType.MOVE_DONT_RESIZE); Drawing createDrawingPatriarch = sheet.createDrawingPatriarch(); anchor.setDx1(0); anchor.setCol1(0); anchor.setRow1(0); //#1 테이블 셀의 너비에 의존적이지않게 사이즈조절. anchor.setAnchorType(AnchorType.MOVE_DONT_RESIZE); Picture createPicture = createDrawingPatriarch.createPicture(anchor, pictureIdx); //#2 테이블 셀의 너비에 의존적이지않게 사이즈조절. createPicture.resize(); }
/** * See the comment for the given cell * * @param cell * the cell * @param message * the comment message */ public static void setComment(HSSFCell cell, String message) { Drawing drawing = cell.getSheet().createDrawingPatriarch(); CreationHelper factory = cell.getSheet().getWorkbook().getCreationHelper(); // When the comment box is visible, have it show in a 1x3 space ClientAnchor anchor = factory.createClientAnchor(); anchor.setCol1(cell.getColumnIndex()); anchor.setCol2(cell.getColumnIndex() + 1); anchor.setRow1(cell.getRowIndex()); anchor.setRow2(cell.getRowIndex() + 1); anchor.setDx1(100); anchor.setDx2(1000); anchor.setDy1(100); anchor.setDy2(1000); // Create the comment and set the text+author Comment comment = drawing.createCellComment(anchor); RichTextString str = factory.createRichTextString(message); comment.setString(str); comment.setAuthor("TURNUS"); // Assign the comment to the cell cell.setCellComment(comment); }
/** * 构建多个图形对象 * @param dataSourceSheet * @param tragetSheet * @param graphList */ private static void buildExcelChart(Sheet dataSourceSheet, Sheet tragetSheet, List<ExcelGraph> graphList) { int len = graphList.size(); if (len == 1) { buildExcelChart(dataSourceSheet, tragetSheet, graphList.get(0)); } else { int drawStart = 0; int drawEnd = 20; Drawing drawing = tragetSheet.createDrawingPatriarch(); for (int i = 0; i < len; i++) { ExcelGraph graph = graphList.get(i); ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, drawStart, 15, drawEnd); buildExcelChart(drawing, anchor, dataSourceSheet, graph); drawStart = drawStart + drawEnd; drawEnd = drawEnd + drawEnd; } } }
/** * 创建List之后的各个Cells * * @param styles */ public void createListCells(Drawing patriarch, int index, int cellNum, Object obj, List<ExcelExportEntity> excelParams, Sheet sheet, Workbook workbook) throws Exception { ExcelExportEntity entity; Row row; if (sheet.getRow(index) == null) { row = sheet.createRow(index); row.setHeight(getRowHeight(excelParams)); } else { row = sheet.getRow(index); } for (int k = 0, paramSize = excelParams.size(); k < paramSize; k++) { entity = excelParams.get(k); Object value = getCellValue(entity, obj); if (entity.getType() == 1) { createStringCell(row, cellNum++, value == null ? "" : value.toString(), row.getRowNum() % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity); } else { createImageCell(patriarch, entity, row, cellNum++, value == null ? "" : value.toString(), obj); } } }
private Comment createCellComment(String author, String comment) { // comments only supported for XLSX if (data.sheet instanceof XSSFSheet) { CreationHelper factory = data.wb.getCreationHelper(); Drawing drawing = data.sheet.createDrawingPatriarch(); ClientAnchor anchor = factory.createClientAnchor(); Comment cmt = drawing.createCellComment(anchor); RichTextString str = factory.createRichTextString(comment); cmt.setString(str); cmt.setAuthor(author); return cmt; } return null; }
private Comment createCellComment( String author, String comment ) { // comments only supported for XLSX if ( data.sheet instanceof XSSFSheet ) { CreationHelper factory = data.wb.getCreationHelper(); Drawing drawing = data.sheet.createDrawingPatriarch(); ClientAnchor anchor = factory.createClientAnchor(); Comment cmt = drawing.createCellComment( anchor ); RichTextString str = factory.createRichTextString( comment ); cmt.setString( str ); cmt.setAuthor( author ); return cmt; } return null; }
/** * 抽象出图片生成业务代码 * * @throws IOException */ private void extractPicturePortion(String svgString, XSSFWorkbook wb, XSSFSheet sheet, int startCol, int endCol, int startRow, int endRow) throws IOException { // 图片 if (org.apache.commons.lang3.StringUtils.isNotBlank(svgString)) { byte[] safeDataBytes = new BASE64Decoder().decodeBuffer(svgString); int pictureIdx = wb.addPicture(safeDataBytes, Workbook.PICTURE_TYPE_JPEG); CreationHelper helper = wb.getCreationHelper(); // Create the drawing patriarch. This is the top level container for // all shapes. Drawing drawing = sheet.createDrawingPatriarch(); // add a picture shape ClientAnchor anchor = helper.createClientAnchor(); // set top-left corner of the picture, // subsequent call of Picture#resize() will operate relative to it anchor.setCol1(startCol); anchor.setCol2(endCol); anchor.setRow1(startRow); anchor.setRow2(endRow); anchor.setDx1(0); anchor.setDy1(0); anchor.setDx2(0); anchor.setDy2(0); anchor.setAnchorType(ClientAnchor.MOVE_DONT_RESIZE); Picture pict = drawing.createPicture(anchor, pictureIdx); pict.resize(1); } }
/** * 创建List之后的各个Cells * @param patriarch * @param index * @param cellNum * @param obj * @param excelParams * @param sheet * @param workbook * @throws Exception */ public void createListCells(Drawing patriarch, int index, int cellNum, Object obj, List<ExcelExportEntity> excelParams, Sheet sheet, Workbook workbook) throws Exception { ExcelExportEntity entity; Row row; if (sheet.getRow(index) == null) { row = sheet.createRow(index); row.setHeight(getRowHeight(excelParams)); } else { row = sheet.getRow(index); } for (int k = 0, paramSize = excelParams.size(); k < paramSize; k++) { entity = excelParams.get(k); Object value = getCellValue(entity, obj); if (entity.getType() == BaseEntityTypeConstants.StringType) { createStringCell(row, cellNum++, value == null ? "" : value.toString(), row.getRowNum() % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity); if (entity.isHyperlink()) { row.getCell(cellNum - 1) .setHyperlink(dataHanlder.getHyperlink( row.getSheet().getWorkbook().getCreationHelper(), obj, entity.getName(), value)); } } else if (entity.getType() == BaseEntityTypeConstants.DoubleType) { createDoubleCell(row, cellNum++, value == null ? "" : value.toString(), index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity); if (entity.isHyperlink()) { row.getCell(cellNum - 1) .setHyperlink(dataHanlder.getHyperlink( row.getSheet().getWorkbook().getCreationHelper(), obj, entity.getName(), value)); } } else { createImageCell(patriarch, entity, row, cellNum++, value == null ? "" : value.toString(), obj); } } }
/** * 往Sheet 填充正常数据,根据表头信息 使用导入的部分逻辑,坐对象映射 * * @param sheet * @param pojoClass * @param dataSet * @param workbook */ private void addDataToSheet(Class<?> pojoClass, Collection<?> dataSet, Sheet sheet, Workbook workbook) throws Exception { if (workbook instanceof XSSFWorkbook) { super.type = ExcelType.XSSF; } // 获取表头数据 Map<String, Integer> titlemap = getTitleMap(sheet); Drawing patriarch = sheet.createDrawingPatriarch(); // 得到所有字段 Field[] fileds = PoiPublicUtil.getClassFields(pojoClass); ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); String targetId = null; if (etarget != null) { targetId = etarget.value(); } // 获取实体对象的导出数据 List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>(); getAllExcelField(null, targetId, fileds, excelParams, pojoClass, null); // 根据表头进行筛选排序 sortAndFilterExportField(excelParams, titlemap); short rowHeight = getRowHeight(excelParams); int index = teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), titleHeight = index; //下移数据,模拟插入 sheet.shiftRows(teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), sheet.getLastRowNum(), getShiftRows(dataSet, excelParams), true, true); if (excelParams.size() == 0) { return; } Iterator<?> its = dataSet.iterator(); while (its.hasNext()) { Object t = its.next(); index += createCells(patriarch, index, t, excelParams, sheet, workbook, rowHeight); } // 合并同类项 mergeCells(sheet, excelParams, titleHeight); }
/** * 构建图形对象 * @param dataSourceSheet * @param tragetSheet * @param graph */ private static void buildExcelChart(Sheet dataSourceSheet, Sheet tragetSheet, ExcelGraph graph) { Drawing drawing = tragetSheet.createDrawingPatriarch(); ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 0, 15, 20); buildExcelChart(drawing, anchor, dataSourceSheet, graph); }
/** * 往Sheet 填充正常数据,根据表头信息 使用导入的部分逻辑,坐对象映射 * * @param teplateParams * @param pojoClass * @param dataSet * @param workbook */ private void addDataToSheet(Class<?> pojoClass, Collection<?> dataSet, Sheet sheet, Workbook workbook) throws Exception { if (workbook instanceof XSSFWorkbook) { super.type = ExcelType.XSSF; } // 获取表头数据 Map<String, Integer> titlemap = getTitleMap(sheet); Drawing patriarch = sheet.createDrawingPatriarch(); // 得到所有字段 Field[] fileds = PoiPublicUtil.getClassFields(pojoClass); ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); String targetId = null; if (etarget != null) { targetId = etarget.value(); } // 获取实体对象的导出数据 List<ExcelExportEntity> excelParams = new ArrayList<ExcelExportEntity>(); getAllExcelField(null, targetId, fileds, excelParams, pojoClass, null); // 根据表头进行筛选排序 sortAndFilterExportField(excelParams, titlemap); short rowHeight = getRowHeight(excelParams); int index = teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), titleHeight = index; //下移数据,模拟插入 sheet.shiftRows(teplateParams.getHeadingRows() + teplateParams.getHeadingStartRow(), sheet.getLastRowNum(), getShiftRows(dataSet, excelParams), true, true); if (excelParams.size() == 0) { return; } Iterator<?> its = dataSet.iterator(); while (its.hasNext()) { Object t = its.next(); index += createCells(patriarch, index, t, excelParams, sheet, workbook, rowHeight); } // 合并同类项 mergeCells(sheet, excelParams, titleHeight); }
protected void addChart(HSSFWorkbook workbook, byte[] chart, String name) { int pictureIndex = workbook.addPicture(chart, HSSFWorkbook.PICTURE_TYPE_PNG); HSSFSheet sheet = workbook.createSheet(name); addTitle(sheet, name, 0); Drawing drawing = sheet.createDrawingPatriarch(); CreationHelper helper = workbook.getCreationHelper(); ClientAnchor anchor = helper.createClientAnchor(); anchor.setRow1(1); anchor.setCol1(0); Picture picture = drawing.createPicture(anchor, pictureIndex); picture.resize(); }
public static void main(String[] args) throws Exception { String dataPath = "src/featurescomparison/workingwithworkbook/addimages/data/"; //create a new workbook Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); //add picture data to this workbook. InputStream is = new FileInputStream(dataPath + "aspose.jpg"); byte[] bytes = IOUtils.toByteArray(is); int pictureIdx = wb.addPicture(bytes, Workbook.PICTURE_TYPE_JPEG); is.close(); CreationHelper helper = wb.getCreationHelper(); //create sheet Sheet sheet = wb.createSheet(); // Create the drawing patriarch. This is the top level container for all shapes. Drawing drawing = sheet.createDrawingPatriarch(); //add a picture shape ClientAnchor anchor = helper.createClientAnchor(); //set top-left corner of the picture, //subsequent call of Picture#resize() will operate relative to it anchor.setCol1(3); anchor.setRow1(2); Picture pict = drawing.createPicture(anchor, pictureIdx); //auto-size picture relative to its top-left corner pict.resize(); //save workbook String file = dataPath + "ApacheImage.xls"; if(wb instanceof XSSFWorkbook) file += "x"; FileOutputStream fileOut = new FileOutputStream(file); wb.write(fileOut); fileOut.close(); System.out.println("Done..."); }
/** * Returns the <code>Sheet's</code> <code>Drawing</code> object, creating it * if it doesn't exist. It is hoped that this would be replaced by a call * to <code>getDrawingPatriarch</code> in the POI "ss" package, and that * that call would NOT corrupt drawings, charts, etc. * @return A <code>Drawing</code>. * @since 0.2.0 */ public Drawing createDrawing() { if (myDrawing == null) { myDrawing = mySheet.createDrawingPatriarch(); } return myDrawing; }
protected void writeHeader(Sheet sheet, Drawing drawing, Row nameRow, Row labelRow, int i, ExcelColumn column, CellStyle boldStyle) { CreationHelper helper = sheet.getWorkbook().getCreationHelper(); // Notify the listeners for (ExcelExportListener listener : listeners) { listener.preHeader(column); } nameRow.createCell(i).setCellValue(helper.createRichTextString(column.getAttributeName())); Cell cell = labelRow.createCell(i); cell.setCellValue(helper.createRichTextString(column.getDisplayLabel())); if (column.isRequired() && boldStyle != null) { cell.setCellStyle(boldStyle); } if (column.getDescription() != null && column.getDescription().length() > 0) { ClientAnchor anchor = helper.createClientAnchor(); anchor.setDx1(0); anchor.setDy1(0); anchor.setDx2(0); anchor.setDy2(0); anchor.setCol1(0); anchor.setRow1(0); anchor.setCol2(0); anchor.setRow2(4); Comment comment = drawing.createCellComment(anchor); comment.setString(helper.createRichTextString(column.getDescription())); cell.setCellComment(comment); } sheet.autoSizeColumn((short) i); }
/** * 创建 最主要的 Cells * * @param styles * @param rowHeight * @throws Exception */ public int createCells(Drawing patriarch, int index, Object t, List<ExcelExportEntity> excelParams, Sheet sheet, Workbook workbook, short rowHeight) throws Exception { ExcelExportEntity entity; Row row = sheet.createRow(index); row.setHeight(rowHeight); int maxHeight = 1, cellNum = 0; int indexKey = createIndexCell(row, index, excelParams.get(0)); cellNum += indexKey; for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) { entity = excelParams.get(k); if (entity.getList() != null) { Collection<?> list = getListCellValue(entity, t); int listC = 0; for (Object obj : list) { createListCells(patriarch, index + listC, cellNum, obj, entity.getList(), sheet, workbook); listC++; } cellNum += entity.getList().size(); if (list != null && list.size() > maxHeight) { maxHeight = list.size(); } } else { Object value = getCellValue(entity, t); if (entity.getType() == 1) { createStringCell(row, cellNum++, value == null ? "" : value.toString(), index % 2 == 0 ? getStyles(false, entity) : getStyles(true, entity), entity); } else { createImageCell(patriarch, entity, row, cellNum++, value == null ? "" : value.toString(), t); } } } // 合并需要合并的单元格 cellNum = 0; for (int k = indexKey, paramSize = excelParams.size(); k < paramSize; k++) { entity = excelParams.get(k); if (entity.getList() != null) { cellNum += entity.getList().size(); } else if (entity.isNeedMerge()) { for (int i = index + 1; i < index + maxHeight; i++) { sheet.getRow(i).createCell(cellNum); sheet.getRow(i).getCell(cellNum).setCellStyle(getStyles(false, entity)); } sheet.addMergedRegion(new CellRangeAddress(index, index + maxHeight - 1, cellNum, cellNum)); cellNum++; } } return maxHeight; }
public Drawing createDrawingPatriarch() { return sheet.createDrawingPatriarch(); }
@Override public void endPage(HandlerState state, IPageContent page) throws BirtException { if( EmitterServices.booleanOption( state.getRenderOptions(), page, ExcelEmitter.SINGLE_SHEET, false ) && ! state.reportEnding ) { return ; } if( EmitterServices.booleanOption( state.getRenderOptions(), page, ExcelEmitter.STRUCTURED_HEADER, false ) ) { outputStructuredHeaderFooter(state, page.getFooter()); } String sheetName = prepareSheetName( state ); if( sheetName != null ) { log.debug("Attempting to name sheet ", ( state.getWb().getNumberOfSheets() - 1 ), " \"", sheetName, "\" "); int existingSheetIndex = -1; for( int i = 0; i < state.getWb().getNumberOfSheets() - 1; ++i ) { if( state.getWb().getSheetName(i).equals(sheetName)) { log.debug("Found matching sheet at ", i, " \"", state.getWb().getSheetName(i), "\"" ); existingSheetIndex = i; break; } } if (existingSheetIndex >= 0) { log.debug("Deleting sheet at ", existingSheetIndex, " \"", state.getWb().getSheetName(existingSheetIndex), "\"" ); state.getWb().removeSheetAt(existingSheetIndex); } state.getWb().setSheetName(state.getWb().getNumberOfSheets() - 1, sheetName); if (existingSheetIndex >= 0) { state.getWb().setSheetOrder(sheetName,existingSheetIndex); } state.sheetName = null; } if( state.sheetPassword != null ) { log.debug("Attempting to protect sheet ", ( state.getWb().getNumberOfSheets() - 1 ) ); state.currentSheet.protectSheet( state.sheetPassword ); state.sheetPassword = null; } Drawing drawing = null; if( ! state.images.isEmpty() ) { drawing = state.currentSheet.createDrawingPatriarch(); } for( CellImage cellImage : state.images ) { processCellImage(state,drawing,cellImage); } state.images.clear(); state.rowNum = 0; state.colNum = 0; state.clearRowSpans(); state.areaBorders.clear(); state.currentSheet = null; }
/** * <p> * Process a CellImage from the images list and place the image on the sheet. * </p><p> * This involves changing the row height as necesssary and determining the column spread of the image. * </p> * @param cellImage * The image to be placed on the sheet. */ private void processCellImage( HandlerState state, Drawing drawing, CellImage cellImage ) { Coordinate location = cellImage.location; Cell cell = state.currentSheet.getRow( location.getRow() ).getCell( location.getCol() ); IImageContent image = cellImage.image; StyleManagerUtils smu = state.getSmu(); float ptHeight = cell.getRow().getHeightInPoints(); if( image.getHeight() != null ) { ptHeight = smu.fontSizeInPoints( image.getHeight().toString() ); } // Get image width int endCol = cell.getColumnIndex(); double lastColWidth = ClientAnchorConversions.widthUnits2Millimetres( (short)state.currentSheet.getColumnWidth( endCol ) ) + 2.0; int dx = smu.anchorDxFromMM( lastColWidth, lastColWidth ); double mmWidth = 0.0; if( smu.isAbsolute(image.getWidth())) { mmWidth = image.getWidth().convertTo(DimensionType.UNITS_MM); } else if(smu.isPixels(image.getWidth())) { mmWidth = ClientAnchorConversions.pixels2Millimetres( image.getWidth().getMeasure() ); } // Allow image to span multiple columns CellRangeAddress mergedRegion = getMergedRegionBegunBy( state.currentSheet, location.getRow(), location.getCol() ); if( (cellImage.spanColumns) || ( mergedRegion != null ) ) { log.debug( "Image size: ", image.getWidth(), " translates as mmWidth = ", mmWidth ); if( mmWidth > 0) { double mmAccumulatedWidth = 0; int endColLimit = cellImage.spanColumns ? 256 : mergedRegion.getLastColumn(); for( endCol = cell.getColumnIndex(); mmAccumulatedWidth < mmWidth && endCol < endColLimit; ++ endCol ) { lastColWidth = ClientAnchorConversions.widthUnits2Millimetres( (short)state.currentSheet.getColumnWidth( endCol ) ) + 2.0; mmAccumulatedWidth += lastColWidth; log.debug( "lastColWidth = ", lastColWidth, "; mmAccumulatedWidth = ", mmAccumulatedWidth); } if( mmAccumulatedWidth > mmWidth ) { mmAccumulatedWidth -= lastColWidth; --endCol; double mmShort = mmWidth - mmAccumulatedWidth; dx = smu.anchorDxFromMM( mmShort, lastColWidth ); } } } else { float widthRatio = (float)(mmWidth / lastColWidth); ptHeight = ptHeight / widthRatio; } int rowsSpanned = state.findRowsSpanned( cell.getRowIndex(), cell.getColumnIndex() ); float neededRowHeightPoints = ptHeight; for( int i = 0; i < rowsSpanned; ++i ) { int rowIndex = cell.getRowIndex() + 1 + i; neededRowHeightPoints -= state.currentSheet.getRow(rowIndex).getHeightInPoints(); } if( neededRowHeightPoints > cell.getRow().getHeightInPoints()) { cell.getRow().setHeightInPoints( neededRowHeightPoints ); } // ClientAnchor anchor = wb.getCreationHelper().createClientAnchor(); ClientAnchor anchor = state.getWb().getCreationHelper().createClientAnchor(); anchor.setCol1(cell.getColumnIndex()); anchor.setRow1(cell.getRowIndex()); anchor.setCol2(endCol); anchor.setRow2(cell.getRowIndex() + rowsSpanned); anchor.setDx2(dx); anchor.setDy2( smu.anchorDyFromPoints( ptHeight, cell.getRow().getHeightInPoints() ) ); anchor.setAnchorType(ClientAnchor.MOVE_DONT_RESIZE); drawing.createPicture(anchor, cellImage.imageIdx); }
/** * Not supported */ @Override public Drawing getDrawingPatriarch() { throw new UnsupportedOperationException(); }
/** * Not supported */ @Override public Drawing createDrawingPatriarch() { throw new UnsupportedOperationException(); }
/** * 保持している情報を元に、シートのセルにコメントを設定する。 * @param sheet * @return POIの設定したコメントオブジェクト。 * @throws IllegalArgumentException sheet is null. */ public Comment set(final Sheet sheet) { ArgUtils.notNull(sheet, "sheet"); final CreationHelper helper = sheet.getWorkbook().getCreationHelper(); final Drawing drawing = sheet.createDrawingPatriarch(); // コメントの位置、サイズの指定 int col1 = column + 1; int row1 = row; if(sheet instanceof HSSFSheet) { // 2003形式の場合は、行の位置をずらす。 row1--; } int col2 = col1 + anchor.columnSize; int row2 = row1 + anchor.rowSize; final ClientAnchor clientAnchor = drawing.createAnchor( anchor.dx1, anchor.dy1, anchor.dx2, anchor.dy2, col1, row1, col2, row2 ); POIUtils.setClientAnchorType(clientAnchor, anchor.type); final Comment comment = drawing.createCellComment(clientAnchor); comment.setColumn(column); comment.setRow(row); comment.setAuthor(author); comment.setVisible(visible); // 装飾を適用する。 final RichTextString richText = helper.createRichTextString(text.text); if(text.fonts != null) { for(TextFontStore fontStore : text.fonts) { if(fontStore.font != null) { richText.applyFont(fontStore.startIndex, fontStore.endIndex, fontStore.font); } else { richText.applyFont(fontStore.startIndex, fontStore.endIndex, fontStore.fontIndex); } } } comment.setString(richText); return comment; }
/** * 描画オブジェクトを取得します。 * @return 描画オブジェクト。 */ protected Drawing getDrawing() { return drawing; }
/** * 描画オブジェクトを設定します。 * @param drawing 描画オブジェクト。 */ protected void setDrawing(final Drawing drawing) { this.drawing = drawing; }
/** * Returns the <code>Sheet's</code> <code>Drawing</code> object, if it * exists yet. * @return A <code>Drawing</code>, or <code>null</code> if it doesn't exist * yet. * @since 0.2.0 */ public Drawing getDrawing() { return myDrawing; }
/** * Sets the <code>Sheet's</code> <code>Drawing</code> object. This is * usually used to initialize a <code>TagContext</code> from another * <code>TagContext</code>, copying the <code>Drawing</code> object. * @param drawing A <code>Drawing</code>. * @since 0.2.0 */ public void setDrawing(Drawing drawing) { myDrawing = drawing; }