📄 basereportwriter.java
字号:
/***********************************************************************
* Module: BaseWriter.java
* Author: juny
* Created: 2006年7月14日 9:23:22
* Purpose: Defines the Class BaseWriter
***********************************************************************/
package net.excel.report.base;
import java.util.Map;
import net.excel.report.Logger;
import net.excel.report.base.element.Templet;
import net.excel.report.config.ReportConfig.SheetConfig;
import jxl.Range;
import jxl.write.WritableImage;
import jxl.write.WritableSheet;
public abstract class BaseReportWriter implements IReportWriter {
private static Logger log = Logger.getLogger(BaseReportWriter.class);
/*
* @see excel.report.util.IWriter#analysisTemplet(jxl.write.WritableSheet)
*/
public abstract void analysisTemplet(WritableSheet sheet) throws Exception;
/*
* @see excel.report.util.IWriter#writeData(excel.report.util.Parameter)
*/
public abstract void writeData(Parameter param) throws Exception ;
public void setReportConfig(SheetConfig sheetConfig){
this.sheetConfig = sheetConfig;
}
protected SheetConfig sheetConfig = null;
private ITempletContainer container = null;
/* (non-Javadoc)
* @see excel.report.util.IWriter#setDataSources(java.util.Map)
*/
public void setDataSources(Map dataSources) {
this.dataSources = dataSources;
}
/* (non-Javadoc)
* @see excel.report.util.IWriter#setParameters(java.util.Map)
*/
public void setParameters(Map params) {
this.params = params;
}
/**
* 读取模板组内的其他信息,如组内包含的图片信息,超链接信息,
* 合并单元格信息等,因为这些信息不能通过单个单元格的拷贝操作
* 来拷贝,只能标识出来一个一个手动拷贝.
* @param sheet
*/
protected void getMergedCells(WritableSheet sheet){
Range[] mergedCells = sheet.getMergedCells();
//不存在合并单元格则退出.
if(mergedCells.length <= 0) return;
for(int i=0; i<mergedCells.length; i++){
container.addMergedCell(mergedCells[i]);
}
}
/**
* 读取模板组内图片信息,并将图片信息装入到相应的容器中去。
* @param sheet 模板sheet
*/
protected void getImages(WritableSheet sheet){
//拷贝图象
int images = sheet.getNumberOfImages();
for(int i=0; i<images; i++){
WritableImage img = sheet.getImage(i);
container.addImage(img);
}
}
/**
* 取得报表的顶层模板容器对象。
* @return ITempletContainer
*/
protected ITempletContainer getContainer(){
if(null == container){
//在报表中的顶层container容器未null
container = new Templet(null);
}
return container;
}
/**
* 删除模板数据
* @param param
*/
protected void deleteTemplet(Parameter param){
int beginRow = this.container.getBeginRow() + 1;
int endRow = this.container.getEndRow();
//此处不能从结束行开始删除,否则保存数据时会出现合并错误的单元格.
for (int i = beginRow; i < endRow; i++) {
param.sheet.removeRow(beginRow);
}
}
/**
* 删除报表中包含的模板图片对象。
* @param param
*/
protected void deleteAllTempletImages(Parameter param){
this.container.removeAllTempletImages(param.sheet);
}
/**
* 取得指定行列是否存在合并的单元格,如果存在则返回合并单元格的区域。
* @param sheet 模板文件
* @param col 指定列
* @param row 指定行
* @return null 在指定行列位置没有合并单元格
* 非null 返回Range对象
*/
protected Range getCellRange(WritableSheet sheet, int col, int row){
Range[] mergedCells = sheet.getMergedCells();
//不存在合并单元格则退出.
if(mergedCells.length <= 0) return null;
for(int i=0; i<mergedCells.length; i++){
if(mergedCells[i].getTopLeft().getColumn() == col &&
mergedCells[i].getTopLeft().getRow() == row){
return mergedCells[i];
}
}
return null;
}
protected Map params = null;
protected Map dataSources = null;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -