Auto Fill - Drag Fill"
m (correct highlight (via JWB)) |
|||
(24 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{ZKSpreadsheetEssentialsPageHeader}} | {{ZKSpreadsheetEssentialsPageHeader}} | ||
+ | |||
+ | |||
+ | {{Deprecated|url=http://books.zkoss.org/wiki/ZK_Spreadsheet_Essentials}} | ||
__TOC__ | __TOC__ | ||
===Purpose=== | ===Purpose=== | ||
− | ZK Spreadsheet | + | ZK Spreadsheet supports drag fill and auto fill cell's value. |
===Drag Fill=== | ===Drag Fill=== | ||
− | The drag fill is | + | The drag fill is based on <javadoc directory="zss" method="autofill(org.zkoss.zss.model.Range, java.lang.Integer)">org.zkoss.zss.model.Range</javadoc> |
+ | ====Copy==== | ||
1. Select a range<br/> | 1. Select a range<br/> | ||
[[File:ZKSsEss_Spreadsheet_DragFill_Select.png]]<br/><br/> | [[File:ZKSsEss_Spreadsheet_DragFill_Select.png]]<br/><br/> | ||
− | 2. Mouse over right bottom border, mouse cursor will change to cross, drag to expend selection range<br/> | + | 2. Mouse over the right bottom border, the mouse cursor will change to cross, drag to expend the selection range<br/> |
[[File:ZKSsEss_Spreadsheet_DragFill_Drag.png]]<br/><br/> | [[File:ZKSsEss_Spreadsheet_DragFill_Drag.png]]<br/><br/> | ||
− | 3. Release mouse to perform auto fill<br/> | + | 3. Release the mouse to perform auto fill<br/> |
[[File:ZKSsEss_Spreadsheet_DragFill_AutoFill.png]]<br/><br/> | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill.png]]<br/><br/> | ||
+ | |||
+ | ====Auto Linear Increase==== | ||
+ | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill_Linear1.png]]<br/><br/> | ||
+ | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill_Linear2.png]]<br/><br/> | ||
+ | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill_Linear3.png]]<br/><br/> | ||
+ | ====Month Auto Increase==== | ||
+ | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill_Month1.png]]<br/><br/> | ||
+ | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill_Month2.png]]<br/><br/> | ||
+ | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill_Month3.png]]<br/><br/> | ||
+ | ====Week Auto Increase==== | ||
+ | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill_Week1.png]]<br/><br/> | ||
+ | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill_Week2.png]]<br/><br/> | ||
+ | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill_Week3.png]]<br/><br/> | ||
+ | ====Date Auto Increase==== | ||
+ | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill_Date1.png]]<br/><br/> | ||
+ | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill_Date2.png]]<br/><br/> | ||
+ | [[File:ZKSsEss_Spreadsheet_DragFill_AutoFill_Date3.png]]<br/><br/> | ||
===ZUML=== | ===ZUML=== | ||
− | <source lang="xml" | + | <source lang="xml" highlight="14,24,27"> |
<zk> | <zk> | ||
− | <div height="100%" width="100%" apply=" | + | <div height="100%" width="100%" apply="org.zkoss.zssessentials.config.AutofillComposer"> |
<div height="3px"></div> | <div height="3px"></div> | ||
− | <div> | + | <hlayout> |
− | + | <vlayout> | |
− | + | <div> | |
− | + | 1. Fill cells <intbox id="fillCells" value="2"/> | |
− | + | <combobox id="fillOrientation" > | |
− | + | <comboitem label="Fill Down" value="down"/> | |
− | < | + | <comboitem label="Fill Right" value="right"/> |
− | + | <comboitem label="Fill Left" value="left"/> | |
− | + | <comboitem label="Fill Up" value="up"/> | |
− | </ | + | </combobox> |
− | <spreadsheet id="spreadsheet" src="/ | + | <button id="fill" label="Fill" mold="trendy"></button> |
+ | </div> | ||
+ | </vlayout> | ||
+ | <div> | ||
+ | 2. AutoFill | ||
+ | <intbox id="autoFillCells" value="6"/> | ||
+ | <combobox id="autofillType"> | ||
+ | <comboitem label="Default" value="default"/> | ||
+ | <comboitem label="Copy" value="copy"/> | ||
+ | </combobox> | ||
+ | <button id="autofill" label="Auto fill" mold="trendy"></button> | ||
+ | </div> | ||
+ | </hlayout> | ||
+ | <spreadsheet id="spreadsheet" src="/WEB-INF/excel/config/autofill.xlsx" | ||
maxrows="200" | maxrows="200" | ||
maxcolumns="40" | maxcolumns="40" | ||
Line 42: | Line 76: | ||
===Composer=== | ===Composer=== | ||
====Source Cell==== | ====Source Cell==== | ||
− | + | Use onCellFocused event to get the current cell. Use onCellSelection event to get the current selection range. | |
− | <source lang="java" | + | <source lang="java" highlight="4,7"> |
Spreadsheet spreadsheet; | Spreadsheet spreadsheet; | ||
Cell currentCell; | Cell currentCell; | ||
+ | Rect selection; | ||
public void onCellFocused$spreadsheet(CellEvent event) { | public void onCellFocused$spreadsheet(CellEvent event) { | ||
currentCell = Utils.getCell(event.getSheet(), event.getRow(), event.getColumn()); | currentCell = Utils.getCell(event.getSheet(), event.getRow(), event.getColumn()); | ||
+ | } | ||
+ | public void onCellSelection$spreadsheet() { | ||
+ | selection = spreadsheet.getSelection(); | ||
} | } | ||
</source> | </source> | ||
− | ====Fill | + | ====Fill cells==== |
− | + | <source lang="java" highlight="10,16,22,28"> | |
− | <source lang="java" | + | Intbox fillCells; |
− | Intbox | + | Combobox fillOrientation; |
− | + | public void onClick$fill() { | |
− | + | String orientation = (String)fillOrientation.getSelectedItem().getValue(); | |
− | public void onClick$ | + | if ("down".equals(orientation)) { |
− | + | int leftCol = currentCell.getColumnIndex(); | |
− | if (currentCell == | + | int topRow = currentCell.getRowIndex(); |
− | + | int rightCol = leftCol; | |
− | + | int btmRow = topRow + fillCells.getValue(); | |
− | + | Ranges.range(spreadsheet.getSelectedSheet(), topRow, leftCol, btmRow, rightCol).fillDown(); | |
− | int | + | } else if ("right".equals(orientation)) { |
− | + | int leftCol = currentCell.getColumnIndex(); | |
− | + | int topRow = currentCell.getRowIndex(); | |
− | + | int rightCol = leftCol + fillCells.getValue(); | |
+ | int btmRow = topRow; | ||
+ | Ranges.range(spreadsheet.getSelectedSheet(), topRow, leftCol, btmRow, rightCol).fillRight(); | ||
+ | } else if ("left".equals(orientation)) { | ||
+ | int rightCol = currentCell.getColumnIndex(); | ||
+ | int leftCol = rightCol - fillCells.getValue(); | ||
+ | int topRow = currentCell.getRowIndex(); | ||
+ | int btmRow = topRow; | ||
+ | Ranges.range(spreadsheet.getSelectedSheet(), topRow, leftCol, btmRow, rightCol).fillLeft(); | ||
+ | } else if ("up".equals(orientation)) { | ||
+ | int btmRow = currentCell.getRowIndex(); | ||
+ | int topRow = btmRow - fillCells.getValue(); | ||
+ | int leftCol = currentCell.getColumnIndex(); | ||
+ | int rightCol = leftCol; | ||
+ | Ranges.range(spreadsheet.getSelectedSheet(), topRow, leftCol, btmRow, rightCol).fillUp(); | ||
+ | } | ||
} | } | ||
</source> | </source> | ||
− | + | ====AutoFill==== | |
− | + | AutoFill can specify the fill type and destination range to fill. | |
− | <source lang="java" | + | <source lang="java" highlight="13,16,24,27"> |
− | + | public void onClick$autofill() { | |
− | public void onClick$ | + | if (selection == null) { |
− | + | alert("Selection can not be empty"); | |
− | if ( | ||
return; | return; | ||
+ | } | ||
− | + | final Worksheet worksheet = spreadsheet.getSelectedSheet(); | |
− | int | + | final int topRow = selection.getTop(); |
− | int | + | final int leftCol = selection.getLeft(); |
− | + | final int btmRow = selection.getBottom(); | |
− | + | final int rightCol = selection.getRight(); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | final int fillCells = autoFillCells.getValue(); | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | //fill down | |
− | + | Range autofillRange = | |
− | int | + | Ranges.range(worksheet, topRow, leftCol, btmRow + fillCells, leftCol); |
− | + | int type = Range.FILL_DEFAULT; | |
− | + | String fillType = (String) autofillType.getSelectedItem().getValue(); | |
− | + | if ("copy".equals(fillType)) { | |
− | + | type = Range.FILL_COPY; | |
− | |||
− | |||
} | } | ||
+ | |||
+ | final Range srcRange = | ||
+ | Ranges.range(worksheet, topRow, leftCol, btmRow, rightCol); | ||
+ | |||
+ | srcRange.autoFill(autofillRange, type); | ||
+ | } | ||
</source> | </source> | ||
− | View complete source of ZUML [https://code.google.com/p/zkbooks/source/browse/trunk/zssessentials/examples/WebContent/config/autoFill.zul autoFill.zul] | + | View the complete source of ZUML [https://code.google.com/p/zkbooks/source/browse/trunk/zssessentials/examples/WebContent/config/autoFill.zul autoFill.zul] |
− | View complete source of composer [https://code.google.com/p/zkbooks/source/browse/trunk/zssessentials/examples/src/org/zkoss/zssessentials/config/AutofillComposer.java AutofillComposer.java] | + | View the complete source of composer [https://code.google.com/p/zkbooks/source/browse/trunk/zssessentials/examples/src/org/zkoss/zssessentials/config/AutofillComposer.java AutofillComposer.java] |
=Version History= | =Version History= |
Latest revision as of 12:54, 19 January 2022
This article is out of date, please refer to http://books.zkoss.org/wiki/ZK_Spreadsheet_Essentials for more up to date information.
Purpose
ZK Spreadsheet supports drag fill and auto fill cell's value.
Drag Fill
The drag fill is based on Range.autofill(Range, Integer)
Copy
1. Select a range
2. Mouse over the right bottom border, the mouse cursor will change to cross, drag to expend the selection range
3. Release the mouse to perform auto fill
Auto Linear Increase
Month Auto Increase
Week Auto Increase
Date Auto Increase
ZUML
<zk>
<div height="100%" width="100%" apply="org.zkoss.zssessentials.config.AutofillComposer">
<div height="3px"></div>
<hlayout>
<vlayout>
<div>
1. Fill cells <intbox id="fillCells" value="2"/>
<combobox id="fillOrientation" >
<comboitem label="Fill Down" value="down"/>
<comboitem label="Fill Right" value="right"/>
<comboitem label="Fill Left" value="left"/>
<comboitem label="Fill Up" value="up"/>
</combobox>
<button id="fill" label="Fill" mold="trendy"></button>
</div>
</vlayout>
<div>
2. AutoFill
<intbox id="autoFillCells" value="6"/>
<combobox id="autofillType">
<comboitem label="Default" value="default"/>
<comboitem label="Copy" value="copy"/>
</combobox>
<button id="autofill" label="Auto fill" mold="trendy"></button>
</div>
</hlayout>
<spreadsheet id="spreadsheet" src="/WEB-INF/excel/config/autofill.xlsx"
maxrows="200"
maxcolumns="40"
width="100%"
height="450px"></spreadsheet>
</div>
</zk>
Composer
Source Cell
Use onCellFocused event to get the current cell. Use onCellSelection event to get the current selection range.
Spreadsheet spreadsheet;
Cell currentCell;
Rect selection;
public void onCellFocused$spreadsheet(CellEvent event) {
currentCell = Utils.getCell(event.getSheet(), event.getRow(), event.getColumn());
}
public void onCellSelection$spreadsheet() {
selection = spreadsheet.getSelection();
}
Fill cells
Intbox fillCells;
Combobox fillOrientation;
public void onClick$fill() {
String orientation = (String)fillOrientation.getSelectedItem().getValue();
if ("down".equals(orientation)) {
int leftCol = currentCell.getColumnIndex();
int topRow = currentCell.getRowIndex();
int rightCol = leftCol;
int btmRow = topRow + fillCells.getValue();
Ranges.range(spreadsheet.getSelectedSheet(), topRow, leftCol, btmRow, rightCol).fillDown();
} else if ("right".equals(orientation)) {
int leftCol = currentCell.getColumnIndex();
int topRow = currentCell.getRowIndex();
int rightCol = leftCol + fillCells.getValue();
int btmRow = topRow;
Ranges.range(spreadsheet.getSelectedSheet(), topRow, leftCol, btmRow, rightCol).fillRight();
} else if ("left".equals(orientation)) {
int rightCol = currentCell.getColumnIndex();
int leftCol = rightCol - fillCells.getValue();
int topRow = currentCell.getRowIndex();
int btmRow = topRow;
Ranges.range(spreadsheet.getSelectedSheet(), topRow, leftCol, btmRow, rightCol).fillLeft();
} else if ("up".equals(orientation)) {
int btmRow = currentCell.getRowIndex();
int topRow = btmRow - fillCells.getValue();
int leftCol = currentCell.getColumnIndex();
int rightCol = leftCol;
Ranges.range(spreadsheet.getSelectedSheet(), topRow, leftCol, btmRow, rightCol).fillUp();
}
}
AutoFill
AutoFill can specify the fill type and destination range to fill.
public void onClick$autofill() {
if (selection == null) {
alert("Selection can not be empty");
return;
}
final Worksheet worksheet = spreadsheet.getSelectedSheet();
final int topRow = selection.getTop();
final int leftCol = selection.getLeft();
final int btmRow = selection.getBottom();
final int rightCol = selection.getRight();
final int fillCells = autoFillCells.getValue();
//fill down
Range autofillRange =
Ranges.range(worksheet, topRow, leftCol, btmRow + fillCells, leftCol);
int type = Range.FILL_DEFAULT;
String fillType = (String) autofillType.getSelectedItem().getValue();
if ("copy".equals(fillType)) {
type = Range.FILL_COPY;
}
final Range srcRange =
Ranges.range(worksheet, topRow, leftCol, btmRow, rightCol);
srcRange.autoFill(autofillRange, type);
}
View the complete source of ZUML autoFill.zul
View the complete source of composer AutofillComposer.java
Version History
Version | Date | Content |
---|---|---|
All source code listed in this book is at Github.