Added Christian's Centre Across Selection code.

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@948709 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Mark Beardsley 2010-05-27 08:06:47 +00:00
parent f6bda6f28a
commit 185a5cc95f

View File

@ -14,25 +14,33 @@
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
==================================================================== */ ==================================================================== */
package org.apache.poi.xssf.usermodel.examples; package org.apache.poi.xssf.usermodel.examples;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*; import org.apache.poi.xssf.usermodel.*;
import org.openxmlformats.schemas.spreadsheetml.x2006.main.impl.CTRowImpl;
/** /**
* Shows how various alignment options work. * 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 class AligningCells {
public static void main(String[] args) throws IOException { public static void main(String[] args) throws IOException {
Workbook wb = new XSSFWorkbook(); //or new HSSFWorkbook(); XSSFWorkbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet(); XSSFSheet sheet = wb.createSheet();
Row row = sheet.createRow((short) 2); XSSFRow row = sheet.createRow((short) 2);
row.setHeightInPoints(30); row.setHeightInPoints(30);
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
//column width is set in units of 1/256th of a character width //column width is set in units of 1/256th of a character width
@ -47,6 +55,10 @@ public class AligningCells {
createCell(wb, row, (short) 5, XSSFCellStyle.ALIGN_LEFT, XSSFCellStyle.VERTICAL_TOP); createCell(wb, row, (short) 5, XSSFCellStyle.ALIGN_LEFT, XSSFCellStyle.VERTICAL_TOP);
createCell(wb, row, (short) 6, XSSFCellStyle.ALIGN_RIGHT, 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 // Write the output to a file
FileOutputStream fileOut = new FileOutputStream("xssf-align.xlsx"); FileOutputStream fileOut = new FileOutputStream("xssf-align.xlsx");
wb.write(fileOut); wb.write(fileOut);
@ -61,12 +73,57 @@ public class AligningCells {
* @param column the column number to create the cell in * @param column the column number to create the cell in
* @param halign the horizontal alignment for the cell. * @param halign the horizontal alignment for the cell.
*/ */
private static void createCell(Workbook wb, Row row, short column, short halign, short valign) { private static void createCell(XSSFWorkbook wb, XSSFRow row, short column,
Cell cell = row.createCell(column); short halign, short valign) {
XSSFCell cell = row.createCell(column);
cell.setCellValue(new XSSFRichTextString("Align It")); cell.setCellValue(new XSSFRichTextString("Align It"));
CellStyle cellStyle = wb.createCellStyle(); CellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(halign); cellStyle.setAlignment(halign);
cellStyle.setVerticalAlignment(valign); cellStyle.setVerticalAlignment(valign);
cell.setCellStyle(cellStyle); 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);
}
} }