Change Cell's Style and Text Format"
Line 40: | Line 40: | ||
public void setCellColor(String color) { | public void setCellColor(String color) { | ||
Rect rect = getSelection(); | Rect rect = getSelection(); | ||
− | + | Worksheet sheet = spreadsheet.getSelectedSheet(); | |
Book book = spreadsheet.getBook(); | Book book = spreadsheet.getBook(); | ||
short colorIndex = BookHelper.rgbToIndex(book, color); | short colorIndex = BookHelper.rgbToIndex(book, color); | ||
Line 68: | Line 68: | ||
public void setAlignment(short alignment) { | public void setAlignment(short alignment) { | ||
Rect rect = getSelection(); | Rect rect = getSelection(); | ||
− | + | Worksheet sheet = spreadsheet.getSelectedSheet(); | |
Book book = spreadsheet.getBook(); | Book book = spreadsheet.getBook(); | ||
for (int row = rect.getTop(); row <= rect.getBottom(); row++) { | for (int row = rect.getTop(); row <= rect.getBottom(); row++) { | ||
Line 97: | Line 97: | ||
Rect rect = getSelection(); | Rect rect = getSelection(); | ||
− | + | Worksheet sheet = spreadsheet.getSelectedSheet(); | |
int lCol = rect.getLeft(); | int lCol = rect.getLeft(); | ||
int rCol = rect.getRight(); | int rCol = rect.getRight(); | ||
Line 134: | Line 134: | ||
void setFontFamily(String fontName) { | void setFontFamily(String fontName) { | ||
Rect rect = getSelection(); | Rect rect = getSelection(); | ||
− | + | Worksheet sheet = spreadsheet.getSelectedSheet(); | |
Book book = spreadsheet.getBook(); | Book book = spreadsheet.getBook(); | ||
for (int row = rect.getTop(); row <= rect.getBottom(); row++) { | for (int row = rect.getTop(); row <= rect.getBottom(); row++) { | ||
Line 170: | Line 170: | ||
void setFontSize(short fontHeight) { | void setFontSize(short fontHeight) { | ||
Rect rect = getSelection(); | Rect rect = getSelection(); | ||
− | + | Worksheet sheet = spreadsheet.getSelectedSheet(); | |
Book book = spreadsheet.getBook(); | Book book = spreadsheet.getBook(); | ||
for (int row = rect.getTop(); row <= rect.getBottom(); row++) { | for (int row = rect.getTop(); row <= rect.getBottom(); row++) { | ||
Line 197: | Line 197: | ||
void setFontBold(boolean isBold) { | void setFontBold(boolean isBold) { | ||
Rect rect = getSelection(); | Rect rect = getSelection(); | ||
− | + | Worksheet sheet = spreadsheet.getSelectedSheet(); | |
Book book = spreadsheet.getBook(); | Book book = spreadsheet.getBook(); | ||
for (int row = rect.getTop(); row <= rect.getBottom(); row++) { | for (int row = rect.getTop(); row <= rect.getBottom(); row++) { | ||
Line 228: | Line 228: | ||
void setItalic(boolean isItalic) { | void setItalic(boolean isItalic) { | ||
Rect rect = getSelection(); | Rect rect = getSelection(); | ||
− | + | Worksheet sheet = spreadsheet.getSelectedSheet(); | |
Book book = spreadsheet.getBook(); | Book book = spreadsheet.getBook(); | ||
for (int row = rect.getTop(); row <= rect.getBottom(); row++) { | for (int row = rect.getTop(); row <= rect.getBottom(); row++) { | ||
Line 259: | Line 259: | ||
void setUnderline(boolean isUnderline){ | void setUnderline(boolean isUnderline){ | ||
Rect rect = getSelection(); | Rect rect = getSelection(); | ||
− | + | Worksheet sheet = spreadsheet.getSelectedSheet(); | |
Book book = spreadsheet.getBook(); | Book book = spreadsheet.getBook(); | ||
Line 290: | Line 290: | ||
void setStrikethrough(boolean isStrikethrough) { | void setStrikethrough(boolean isStrikethrough) { | ||
Rect rect = getSelection(); | Rect rect = getSelection(); | ||
− | + | Worksheet sheet = spreadsheet.getSelectedSheet(); | |
Book book = spreadsheet.getBook(); | Book book = spreadsheet.getBook(); | ||
Revision as of 04:48, 20 December 2010
Purpose
ZK Spreadsheet support various cell style and font style.
Style Supported | Notes |
---|---|
Font / Font Color / Fill Color | Cause of browser limitation, font also depends on installed font on client side |
Border / Border Color | Cause of browser limitation, only solid/dashed/dotted border are supported now. |
Horizontal Alignment | Vertical Alignment has not implemented yet |
Text Wrap & Overflow | |
Horizontal Merged Cell | Vertical Merged Cell has not implemented yet |
Clone Cell Style
To keep original cell style and only modify part of style, we can use the CellStyle.cloneStyleFrom(CellStyle) to clone a cell style.
CellStyle cloneStyle(CellStyle srcStyle, Book book) {
CellStyle newStyle = book.createCellStyle();
newStyle.cloneStyleFrom(srcStyle);
return newStyle;
}
Cell Style
Color
We get color index fromCellStyle.getFillForegroundColor(). Usually we use color in #RRGGBB format. We can translate string to index BookHelper.rgbToIndex(Book, String)
After we clone cell style, we can modify color by CellStyle.setFillForegroundColor(Short), and use Range.setStyle(CellStyle)to set new style
public void setCellColor(String color) {
Rect rect = getSelection();
Worksheet sheet = spreadsheet.getSelectedSheet();
Book book = spreadsheet.getBook();
short colorIndex = BookHelper.rgbToIndex(book, color);
for (int row = rect.getTop(); row <= rect.getBottom(); row++) {
for (int col = rect.getLeft(); col <= rect.getRight(); col++) {
Cell cell = Utils.getOrCreateCell(sheet, row, col);
CellStyle cellStyle = cell.getCellStyle();
final short srcColor = cellStyle.getFillForegroundColor();
if (srcColor != colorIndex) {
CellStyle newStyle = cloneStyle(cellStyle, book);
newStyle.cloneStyleFrom(cellStyle);
newStyle.setFillForegroundColor(colorIndex);
Ranges.range(sheet, row, col).setStyle(newStyle);
}
}
}
}
Alignment
We can get cell's alignment information by CellStyle.getAlignment(), and use CellStyle.setAlignment(Short) to set alignment.
public void setAlignment(short alignment) {
Rect rect = getSelection();
Worksheet sheet = spreadsheet.getSelectedSheet();
Book book = spreadsheet.getBook();
for (int row = rect.getTop(); row <= rect.getBottom(); row++) {
for (int col = rect.getLeft(); col <= rect.getRight(); col++) {
Cell cell = Utils.getOrCreateCell(sheet, row, col);
short srcAlign = cell.getCellStyle().getAlignment();
if (srcAlign != alignment) {
CellStyle newStyle = cloneStyle(cell.getCellStyle(), book);
newStyle.setAlignment(alignment);
Ranges.range(sheet, row, col).setStyle(newStyle);
}
}
}
}
Border
We can set border by Range.setBorders(Short, BorderStyle, String)
void setBorder(String border) {
//Border color
String color = "#000000";
//Border style
BorderStyle style = "none".equals(border) ? BorderStyle.NONE : BorderStyle.MEDIUM;
Rect rect = getSelection();
Worksheet sheet = spreadsheet.getSelectedSheet();
int lCol = rect.getLeft();
int rCol = rect.getRight();
int tRow = rect.getTop();
int bRow = rect.getBottom();
if ("bottom".equals(border)) {
Ranges.range(sheet, tRow, lCol, bRow, rCol).
setBorders(BookHelper.BORDER_EDGE_BOTTOM, style, color);
} else if ("top".equals(border)) {
Ranges.range(sheet, tRow, lCol, tRow, rCol).
setBorders(BookHelper.BORDER_EDGE_TOP, style, color);
} else if ("left".equals(border)) {
Ranges.range(sheet, tRow, lCol, bRow, lCol).
setBorders(BookHelper.BORDER_EDGE_LEFT, style, color);
} else if ("right".equals(border)) {
Ranges.range(sheet, tRow, rCol, bRow, rCol).
setBorders(BookHelper.BORDER_EDGE_RIGHT, style, color);
} else if ("none".equals(border)) {
Ranges.range(sheet, tRow, lCol, bRow, rCol).
setBorders(BookHelper.BORDER_FULL, style, color);
} else if ("full".equals(border)) {
Ranges.range(sheet, tRow, lCol, bRow, rCol).
setBorders(BookHelper.BORDER_FULL, style, color);
}
}
Font Style
From CellStyle.getFontIndex(), we get font index in the book, then we can get Font from Book.getFontAt() Book.getFontAt(String) We can get or create Font by BookHelper.getOrCreateFont(Book, Sort, Color, Short, String, Boolean, Boolean, Short, Byte)
Font family
void setFontFamily(String fontName) {
Rect rect = getSelection();
Worksheet sheet = spreadsheet.getSelectedSheet();
Book book = spreadsheet.getBook();
for (int row = rect.getTop(); row <= rect.getBottom(); row++) {
for (int col = rect.getLeft(); col <= rect.getRight(); col++) {
Cell cell = Utils.getOrCreateCell(sheet, row, col);
Font srcFont = book.getFontAt(cell.getCellStyle().getFontIndex());
if (srcFont.getFontName() != fontName) {
Font newFont = BookHelper.getOrCreateFont(book,
srcFont.getBoldweight(), BookHelper.getFontColor(book, srcFont),
Font.getFontHeight(), fontName, srcFont.getItalic(), srcFont.getStrikeout(),
srcFont.getTypeOffset(), srcFont.getUnderline());
CellStyle newStyle = cloneStyle(cell.getCellStyle(), book);
newStyle.setFont(newFont);
Ranges.range(sheet, row, col).setStyle(newStyle);
}
}
}
}
Font size
We can get font height by Font.getFontHeight() , however font size is different from font height. Font height in unit's of 1/20th of a point, so we can transform font size to font height by
short getFontHeight(int fontSize) {
return (short) (fontSize * 20);
}
After we get the font height to set, we can use BookHelper.getOrCreateFont(Book, Sort, Color, Short, String, Boolean, Boolean, Short, Byte).
void setFontSize(short fontHeight) {
Rect rect = getSelection();
Worksheet sheet = spreadsheet.getSelectedSheet();
Book book = spreadsheet.getBook();
for (int row = rect.getTop(); row <= rect.getBottom(); row++) {
for (int col = rect.getLeft(); col <= rect.getRight(); col++) {
Cell cell = Utils.getOrCreateCell(sheet, row, col);
Font srcFont = book.getFontAt(cell.getCellStyle().getFontIndex());
if (srcFont.getFontHeight() != fontHeight) {
Font newFont = BookHelper.getOrCreateFont(book, srcFont.getBoldweight(),
BookHelper.getFontColor(book, srcFont), fontHeight, srcFont.getFontName(),
srcFont.getItalic(), srcFont.getStrikeout(), srcFont.getTypeOffset(), srcFont.getUnderline());
CellStyle newStyle = cloneStyle(cell.getCellStyle(), book);
newStyle.setFont(newFont);
Ranges.range(sheet, row, col).setStyle(newStyle);
}
}
}
}
Bold
We can get font bold weight by Font.getBoldweight()
void setFontBold(boolean isBold) {
Rect rect = getSelection();
Worksheet sheet = spreadsheet.getSelectedSheet();
Book book = spreadsheet.getBook();
for (int row = rect.getTop(); row <= rect.getBottom(); row++) {
for (int col = rect.getLeft(); col <= rect.getRight(); col++) {
Cell cell = Utils.getOrCreateCell(sheet, row, col);
Font srcFont = book.getFontAt(
cell.getCellStyle().getFontIndex());
boolean srcBold = srcFont.getBoldweight() == Font.BOLDWEIGHT_BOLD;
if (srcBold != isBold) {
Font newFont = BookHelper.getOrCreateFont(book,
isBold ? Font.BOLDWEIGHT_BOLD : Font.BOLDWEIGHT_NORMAL,
BookHelper.getFontColor(book, srcFont), srcFont.getFontHeight(),
srcFont.getFontName(), srcFont.getItalic(), srcFont.getStrikeout(),
srcFont.getTypeOffset(), srcFont.getUnderline());
CellStyle newStyle = cloneStyle(cell.getCellStyle(), book);
newStyle.setFont(newFont);
Ranges.range(sheet, row, col).setStyle(newStyle);
}
}
}
}
Italic
We can know whether font use italic or not by Font.getItalic()
void setItalic(boolean isItalic) {
Rect rect = getSelection();
Worksheet sheet = spreadsheet.getSelectedSheet();
Book book = spreadsheet.getBook();
for (int row = rect.getTop(); row <= rect.getBottom(); row++) {
for (int col = rect.getLeft(); col <= rect.getRight(); col++) {
Cell cell = Utils.getOrCreateCell(sheet, row, col);
Font srcFont = book.getFontAt(
cell.getCellStyle().getFontIndex());
boolean srcItalic = srcFont.getItalic();
if (srcItalic != isItalic) {
Font newFont = BookHelper.getOrCreateFont(book,
srcFont.getBoldweight(), BookHelper.getFontColor(book, srcFont),
srcFont.getFontHeight(), srcFont.getFontName(), isItalic,
srcFont.getStrikeout(), srcFont.getTypeOffset(), srcFont.getUnderline());
CellStyle newStyle = cloneStyle(cell.getCellStyle(), book);
newStyle.setFont(newFont);
Ranges.range(sheet, row, col).setStyle(newStyle);
}
}
}
}
Underline
We can get font underline information by Font.getUnderline()
void setUnderline(boolean isUnderline){
Rect rect = getSelection();
Worksheet sheet = spreadsheet.getSelectedSheet();
Book book = spreadsheet.getBook();
for (int row = rect.getTop(); row <= rect.getBottom(); row++) {
for (int col = rect.getLeft(); col <= rect.getRight(); col++) {
Cell cell = Utils.getOrCreateCell(sheet, row, col);
Font srcFont = book.getFontAt(
cell.getCellStyle().getFontIndex());
boolean srcUnderline = srcFont.getUnderline() == Font.U_SINGLE;
if (srcUnderline != isUnderline) {
Font newFont = BookHelper.getOrCreateFont(book, srcFont.getBoldweight(),
BookHelper.getFontColor(book, srcFont), srcFont.getFontHeight(),
srcFont.getFontName(), srcFont.getItalic(), srcFont.getStrikeout(),
srcFont.getTypeOffset(), isUnderline ? Font.U_SINGLE : Font.U_NONE);
CellStyle newStyle = cloneStyle(cell.getCellStyle(), book);
newStyle.setFont(newFont);
Ranges.range(sheet, row, col).setStyle(newStyle);
}
}
}
}
Strikethrough
We can know whether font use strikethrough or not by Font.getStrikeout()
void setStrikethrough(boolean isStrikethrough) {
Rect rect = getSelection();
Worksheet sheet = spreadsheet.getSelectedSheet();
Book book = spreadsheet.getBook();
for (int row = rect.getTop(); row <= rect.getBottom(); row++) {
for (int col = rect.getLeft(); col <= rect.getRight(); col++) {
Cell cell = Utils.getOrCreateCell(sheet, row, col);
Font srcFont = book.getFontAt(
cell.getCellStyle().getFontIndex());
boolean srcStrikethrough = srcFont.getStrikeout();
if (srcStrikethrough != isStrikethrough) {
Font newFont = BookHelper.getOrCreateFont(book, srcFont.getBoldweight(),
BookHelper.getFontColor(book, srcFont), srcFont.getFontHeight(),
srcFont.getFontName(), srcFont.getItalic(), isStrikethrough,
srcFont.getTypeOffset(), srcFont.getUnderline());
CellStyle newStyle = cloneStyle(cell.getCellStyle(), book);
newStyle.setFont(newFont);
Ranges.range(sheet, row, col).setStyle(newStyle);
}
}
}
}
Composer
Current Selection
Rect selection;
public void onCellSelection$spreadsheet(CellSelectionEvent event) {
selection = spreadsheet.getSelection();
}
Select Font Family
Combobox fontFamily;
public void onSelect$fontFamily() {
String fontName = fontFamily.getText();
setFontFamily(fontName);
}
Select Font Size
Combobox fontSize
public void onSelect$fontSize() {
short fontHeight = getFontHeight(Integer.parseInt(fontSize.getText()));
setFontSize(fontHeight);
}
Select Font Color
Colorbox fontColor;
public void onChange$fontColor() {
String color = fontColor.getColor();
setFontColor(color);
}
Set Font Bold
boolean isBold;
Toolbarbutton boldBtn;
public void onClick$boldBtn() {
isBold = !isBold;
setFontBold(isBold);
}
Set Font Italic
boolean isItalic;
Toolbarbutton italicBtn;
public void onClick$italicBtn() {
isItalic = !isItalic;
setItalic(isItalic);
}
Set Font Underline
boolean isUnderline;
Toolbarbutton underlineBtn;
public void onClick$underlineBtn() {
isUnderline = !isUnderline;
setUnderline(isUnderline);
}
Set Font Strikethrough
boolean isStrikethrough;
Toolbarbutton strikethroughBtn;
public void onClick$strikethroughBtn() {
isStrikethrough = !isStrikethrough;
setStrikethrough(isStrikethrough);
}
Select Cell Color
Colorbox cellColor;
public void onChange$cellColor() {
String color = cellColor.getColor();
setCellColor(color);
}
Set Cell Alignment
Toolbarbutton alignLeftBtn;
Toolbarbutton alignCenterBtn;
Toolbarbutton alignRightBtn;
public void onAlignHorizontalClick(ForwardEvent event) {
String alignStr = (String) event.getData();
short align = CellStyle.ALIGN_GENERAL;
if (alignStr.equals("left")) {
align = CellStyle.ALIGN_LEFT;
}
if (alignStr.equals("center")) {
align = CellStyle.ALIGN_CENTER;
}
if (alignStr.equals("right")) {
align = CellStyle.ALIGN_RIGHT;
}
setAlignment(align);
}
View complete source of ZUML cellStyle.zul
View complete source of composer CellStyleComposer.java
Version History
Version | Date | Content |
---|---|---|
All source code listed in this book is at Github.