<?xml version="1.0" encoding="UTF-8"?> <?taglib uri="http://www.zkoss.org/zss/function" prefix="ss" ?> <zk> <window title="差旅费计算" use="org.zkoss.zss.demo.MainWindow" border="normal" style="heigth:300px;width:700px"> <hbox> <label style="font-weight:bold" id="lbpos" value="A1"/> <textbox id="tbxval" width="600px" /> </hbox> <spreadsheet id="ss1" url="/WEB-INF/travel.xls" maxrow="20" maxcolumn="20" height="300px" width="690px" style="border:1px solid #8AA3C1" /> <vbox> <hbox>退还 (合计 * 0.5) : <label id="lb" value="${ss:formula(ss1.book, '=Sheet1!B5 * 0.5')}"/></hbox> </vbox> <zscript> ss1.book.addFormulaListener(new SimpleFormulaListener(lb, "value", "=Sheet1!B5 * 0.5")); </zscript> </window> </zk>java代码:MainWindow.java
package org.zkoss.zss.demo;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.ext.AfterCompose;
import org.zkoss.zss.engine.xel.Indexes;
import org.zkoss.zss.model.Book;
import org.zkoss.zss.model.Cell;
import org.zkoss.zss.model.Sheet;
import org.zkoss.zss.ui.CellEvent;
import org.zkoss.zss.ui.Events;
import org.zkoss.zss.ui.Spreadsheet;
import org.zkoss.zul.Label;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;
public class MainWindow extends Window implements AfterCompose{
int lastRow=0;
int lastCol=0;
Book book;
Spreadsheet spreadsheet;
public void afterCompose() {
spreadsheet = (Spreadsheet)getFellow("ss1");
//设置要读取的xls文件
book = spreadsheet.getBook();
spreadsheet.addEventListener(Events.ON_CELL_FOUCSED,new EventListener(){
public void onEvent(Event event) throws Exception {
onCellEvent((CellEvent)event);
}
});
spreadsheet.addEventListener(Events.ON_START_EDITING,new EventListener(){
public void onEvent(Event event) throws Exception {
onCellEvent((CellEvent)event);
}
});
final Textbox tbxval = (Textbox)getFellow("tbxval");
tbxval.addEventListener("onChange",new EventListener(){
public void onEvent(Event event) throws Exception {
doCellChange(tbxval.getValue());
}
});
}
void onCellEvent(CellEvent event){
Sheet sheet = (Sheet)book.getSheets().get(event.getSheetIndex());
lastRow = event.getRow();
lastCol = event.getColumn();
Label lbpos = (Label)getFellow("lbpos");
Textbox tbxval = (Textbox)getFellow("tbxval");
Cell cell = sheet.getCell(lastRow, lastCol);
lbpos.setValue(Indexes.toA1(lastRow,lastCol,false,false));
tbxval.setValue(cell == null ? "" : cell.getEditText());
}
void doCellChange(String value){
if(lastRow == -1){
return;
}
Sheet sheet = (Sheet)book.getSheets().get(0);
Cell cell = sheet.getCell(lastRow, lastCol);
if(cell==null){
sheet.setCellValue(lastRow, lastCol, "");
cell = (Cell)sheet.getCell(lastRow,lastCol);
}
cell.setEditText(value);
}
}
使用说明:
1、双击单元格或者按F2键可以编辑单元格。
2、可以按上下左右键,HOME、END键来移动焦点。
3、编辑的时候,你可以输入文本,数字或者公式,比如=SUM(B1:B4)
4、按ENTER完成编辑,按ESC退出编辑
效果图: