From 185a5cc95fdd76d4b8a25b4f687dcad66e28ca85 Mon Sep 17 00:00:00 2001 From: Mark Beardsley Date: Thu, 27 May 2010 08:06:47 +0000 Subject: [PATCH] Added Christian's Centre Across Selection code. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@948709 13f79535-47bb-0310-9956-ffa450edef68 --- .../usermodel/examples/AligningCells.java | 99 +++++++++++++++---- 1 file changed, 78 insertions(+), 21 deletions(-) diff --git a/src/examples/src/org/apache/poi/xssf/usermodel/examples/AligningCells.java b/src/examples/src/org/apache/poi/xssf/usermodel/examples/AligningCells.java index bfffa6cda..6ed76081b 100644 --- a/src/examples/src/org/apache/poi/xssf/usermodel/examples/AligningCells.java +++ b/src/examples/src/org/apache/poi/xssf/usermodel/examples/AligningCells.java @@ -1,42 +1,50 @@ /* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 +http://www.apache.org/licenses/LICENSE-2.0 - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. ==================================================================== */ - package org.apache.poi.xssf.usermodel.examples; import java.io.FileOutputStream; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.*; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTRowImpl; /** * Shows how various alignment options work. + * + * Modified by Cristian Petrula, Romania on May 26, 2010 + * New method was added centerAcrossSelection to center a column content over + * one selection using ALIGN_CENTER_SELECTION + * To create this method example was change for XSSF only and the previous + * AligningCells.java example has been moved into the SS examples folder. */ public class AligningCells { - public static void main(String[] args) throws IOException { - Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); + public static void main(String[] args) throws IOException { + XSSFWorkbook wb = new XSSFWorkbook(); - Sheet sheet = wb.createSheet(); - Row row = sheet.createRow((short) 2); + XSSFSheet sheet = wb.createSheet(); + XSSFRow row = sheet.createRow((short) 2); row.setHeightInPoints(30); for (int i = 0; i < 8; i++) { //column width is set in units of 1/256th of a character width - sheet.setColumnWidth(i, 256*15); + sheet.setColumnWidth(i, 256 * 15); } createCell(wb, row, (short) 0, XSSFCellStyle.ALIGN_CENTER, XSSFCellStyle.VERTICAL_BOTTOM); @@ -47,6 +55,10 @@ public class AligningCells { createCell(wb, row, (short) 5, XSSFCellStyle.ALIGN_LEFT, XSSFCellStyle.VERTICAL_TOP); createCell(wb, row, (short) 6, XSSFCellStyle.ALIGN_RIGHT, XSSFCellStyle.VERTICAL_TOP); + //center text over B4, C4, D4 + row = sheet.createRow((short) 3); + centerAcrossSelection(wb, row, (short) 1, (short) 3, XSSFCellStyle.VERTICAL_CENTER); + // Write the output to a file FileOutputStream fileOut = new FileOutputStream("xssf-align.xlsx"); wb.write(fileOut); @@ -61,12 +73,57 @@ public class AligningCells { * @param column the column number to create the cell in * @param halign the horizontal alignment for the cell. */ - private static void createCell(Workbook wb, Row row, short column, short halign, short valign) { - Cell cell = row.createCell(column); + private static void createCell(XSSFWorkbook wb, XSSFRow row, short column, + short halign, short valign) { + XSSFCell cell = row.createCell(column); cell.setCellValue(new XSSFRichTextString("Align It")); CellStyle cellStyle = wb.createCellStyle(); cellStyle.setAlignment(halign); cellStyle.setVerticalAlignment(valign); cell.setCellStyle(cellStyle); } -} + + /** + * Center a text over multiple columns using ALIGN_CENTER_SELECTION + * + * @param wb the workbook + * @param row the row to create the cell in + * @param start_column the column number to create the cell in and where the selection starts + * @param end_column the column number where the selection ends + * @param valign the horizontal alignment for the cell. + * + * @author Cristian Petrula, Romania + */ + private static void centerAcrossSelection(XSSFWorkbook wb, XSSFRow row, + short start_column, short end_column, short valign) { + + // Create cell style with ALIGN_CENTER_SELECTION + XSSFCellStyle cellStyle = wb.createCellStyle(); + cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER_SELECTION); + cellStyle.setVerticalAlignment(valign); + + // Create cells over the selected area + for (int i = start_column; i <= end_column; i++) { + XSSFCell cell = row.createCell(i); + cell.setCellStyle(cellStyle); + } + + // Set value to the first cell + XSSFCell cell = row.getCell(start_column); + cell.setCellValue(new XSSFRichTextString("Align It")); + + // Make the selection + CTRowImpl ctRow = (CTRowImpl) row.getCTRow(); + List spanList = new ArrayList(); + + // Add object with format start_coll:end_coll. For example 1:3 will span from + // cell 1 to cell 3, where the column index starts with 0 + // + // You can add multiple spans for one row + Object span = start_column + ":" + end_column; + spanList.add(span); + + //add spns to the row + ctRow.setSpans(spanList); + } +} \ No newline at end of file