package api;
import java.awt.Color;
import java.io.File;
import javax.imageio.ImageIO;
import com.fr.base.Formula;
import com.fr.base.Parameter;
import com.fr.base.Style;
import com.fr.base.core.KV;
import com.fr.data.DataConstants;
import com.fr.data.condition.CommonCondition;
import com.fr.data.condition.FormulaCondition;
import com.fr.data.condition.JoinCondition;
import com.fr.data.condition.ListCondition;
import com.fr.data.core.Compare;
import com.fr.data.impl.DBTableData;
import com.fr.data.impl.NameDatabaseConnection;
import com.fr.data.util.SortOrder;
import com.fr.general.FRFont;
import com.fr.general.data.TableDataColumn;
import com.fr.io.TemplateWorkBookIO;
import com.fr.main.impl.WorkBook;
import com.fr.report.cell.DefaultTemplateCellElement;
import com.fr.report.cell.cellattr.CellExpandAttr;
import com.fr.report.cell.cellattr.CellGUIAttr;
import com.fr.report.cell.cellattr.core.RichChar;
import com.fr.report.cell.cellattr.core.RichText;
import com.fr.report.cell.cellattr.core.SubReport;
import com.fr.report.cell.cellattr.core.group.ConditionGroup;
import com.fr.report.cell.cellattr.core.group.CustomGrouper;
import com.fr.report.cell.cellattr.core.group.DSColumn;
import com.fr.report.cell.cellattr.core.group.FilterTypeEnum;
import com.fr.report.cell.cellattr.core.group.MonoGrouper;
import com.fr.report.cell.cellattr.core.group.SelectCount;
import com.fr.report.cell.painter.BiasTextPainter;
import com.fr.report.stable.ReportConstants;
import com.fr.report.worksheet.WorkSheet;
import com.fr.stable.Constants;
import com.fr.stable.unit.OLDPIX;
/**
* 单元格元素
*
* @author Administrator
*/
public class CellElement {
public static void main(String[] args) {
try {
ServerConnector.remote();
WorkBook workbook = new WorkBook();
workbook.addReport(0, "单元格值", new CellElement().element(workbook));
TemplateWorkBookIO.writeTemplateWorkBook(workbook, "单元格元素.cpt");
} catch (Exception e) {
e.printStackTrace();
}
ServerConnector.disconnect();
}
/**
* 单元格元素
*
* @param workbook
* @return
* @throws Exception
*/
public WorkSheet element(WorkBook workbook) throws Exception {
WorkSheet sheet = new WorkSheet();
DefaultTemplateCellElement cell = null;
int row = 0;
FRFont font = FRFont.getInstance().applySize(12);
/*
* 普通文本
*/
cell = new DefaultTemplateCellElement(0, row, "普通文本");
sheet.addCellElement(cell);
row ++;
/*
* 富文本
*/
Style style = Style.getInstance();
RichText richText = new RichText();
richText.addContent(new RichChar("黑体字", style.deriveFRFont(font.applyName("黑体"))));
richText.addContent(new RichChar(" "));
richText.addContent(new RichChar("30号字", style.deriveFRFont(font.applySize(30))));
richText.addContent(new RichChar(" "));
richText.addContent(new RichChar("加粗", style.deriveFRFont(font.applyStyle(FRFont.BOLD))));
richText.addContent(new RichChar(" "));
richText.addContent(new RichChar("斜体", style.deriveFRFont(font.applyStyle(FRFont.ITALIC))));
richText.addContent(new RichChar(" "));
richText.addContent(new RichChar("下划线", style.deriveFRFont(font.applyUnderline(Constants.LINE_THIN))));
richText.addContent(new RichChar(" "));
richText.addContent(new RichChar("绿色字", style.deriveFRFont(font.applyForeground(Color.green))));
richText.addContent(new RichChar(" "));
richText.addContent(new RichChar("上标", style.deriveFRFont(font.applySuperscript(true))));
richText.addContent(new RichChar(" "));
richText.addContent(new RichChar("下标", style.deriveFRFont(font.applySubscript(true))));
richText.addContent(new RichChar(" "));
richText.addContent(new RichChar("公式:${now()}", style.deriveFRFont(font)));
cell = new DefaultTemplateCellElement(0, row, 7, 1, richText);
CellGUIAttr attr = new CellGUIAttr();
// 用HTML显示内容
attr.setShowAsHTML(true);
cell.setCellGUIAttr(attr);
sheet.addCellElement(cell);
row ++;
/*
* 公式
*/
Formula f = new Formula("NOW()");
// 设置导出编辑结果时是否保留公式
f.setReserveInResult(false);
// 设置填报时计算后是否保留公式
f.setReserveOnWriteOrAnaly(true);
cell = new DefaultTemplateCellElement(0, row, 2, 1, f);
sheet.addCellElement(cell);
row ++;
/*
* 图片
*/
cell = new DefaultTemplateCellElement(0, row, 5, 5, ImageIO.read(new File("d:/系统.bmp")));
// 图片布局 平铺-IMAGE_TILED;居中-IMAGE_CENTER;拉伸-IMAGE_EXTEND;默认-IMAGE_DEFAULT;适应-IMAGE_ADJUST
cell.setStyle(Style.getInstance().deriveImageLayout(Constants.IMAGE_TILED));
sheet.addCellElement(cell);
row += 5;
/*
* 斜线
*/
BiasTextPainter t1 = new BiasTextPainter("123|324|345");
// 斜线方向 true:从左下到右上发散;false:从左上到右下发散
t1.setIsBackSlash(true);
cell = new DefaultTemplateCellElement(0, row, t1);
sheet.addCellElement(cell);
sheet.setRowHeight(row, new OLDPIX(50));
row ++;
/*
* 子报表
*/
SubReport sr = new SubReport(TemplateWorkBookIO.readTemplateWorkBook("/WorkBook2.cpt"));
// 模板参数
KV[] kvs = new KV[] {
new KV("p1", "string"),
new KV("p2", new Integer(123)),
new KV("p3", new Double(1.23)),
new KV("p4", new java.util.Date()),
new KV("p5", new Boolean(true)),
new KV("p6", new Formula("now()"))
};
sr.setParameterKVS(kvs);
// 是否继承报表参数
sr.setExtendOwnerParameters(true);
cell = new DefaultTemplateCellElement(0, row, 4, 8, sr);
sheet.addCellElement(cell);
row += 8;
// 添加模板数据集
DBTableData ds1 = new DBTableData(new NameDatabaseConnection("FRDemo"), "select * from 销量");
workbook.putTableData("ds1", ds1);
DBTableData ds2 = new DBTableData(new NameDatabaseConnection("FRDemo"), "select * from 销量 where 销售员='孙林'");
workbook.putTableData("ds2", ds2);
// 数据列
DSColumn dsc = new DSColumn();
// 数据集
dsc.setDSName("ds1");
// 动态参数
dsc.setParameters(new Parameter[] { new Parameter("p1", "123") });
// 数据列
dsc.setColumn(TableDataColumn.createColumn("销量"));
/*
* // 分组&普通
* FunctionGrouper grouper = new FunctionGrouper();
* grouper.setDivideMode(FunctionGrouper.GROUPING_MODE);
*/
/*
* // 分组&相邻连续
* FunctionGrouper grouper = new FunctionGrouper();
* grouper.setDivideMode(FunctionGrouper.CONTINUUM_MODE);
*/
// 分组&高级 - 自定义分组 - 条件分组
CustomGrouper grouper = new CustomGrouper();
// 是否强制分组
grouper.setForce(true);
// 一个记录可以存在于多个分组中
grouper.setMore(true);
// 其他处理方式
// 留在各自组内
// grouper.setOther(CustomGrouper.LEAVE);
// 丢弃其他所有的
// grouper.setOther(CustomGrouper.DISCARD);
// 把其他所有的合并
grouper.setOther(CustomGrouper.TOGETHER);
// 其他组的名字
grouper.setOdisplay("其他");
// 一个条件组
ConditionGroup group = new ConditionGroup();
// 组名
group.setDisplay("组一");
// 条件列表,多个条件时使用
ListCondition list = new ListCondition();
// 普通条件
CommonCondition cCond = new CommonCondition();
Compare compare = new Compare();
// 比较操作符
compare.setOp(Compare.EQUALS);
// 比较值
compare.setValue(100);
// compare.setValue(new Formula("seq()")); // 公式
// compare.setValue(new Parameter("p")); // 参数
// compare.setValue(new ColumnRow(col, row)); // 单元格
// 数据列
// SimpleDSColumn s = new SimpleDSColumn();
// s.setDsName("ds2");
// s.setColumn(TableDataColumn.createColumn(5));
// compare.setValue(s);
// 设置比较列
cCond.setColumnName("销量");
// cond.setColumnNumber(5);
// 设置比较方法
cCond.setCompare(compare);
list.addCondition(cCond);
// 条件列表,相当于括号
ListCondition subList = new ListCondition();
// 公式条件
subList.addCondition(new FormulaCondition("$$$ > 300"));
// 条件连接方式:与、或
JoinCondition jCond = new JoinCondition(DataConstants.AND, new FormulaCondition("$$$ < 500"));
subList.addJoinCondition(jCond);
list.addJoinCondition(new JoinCondition(DataConstants.OR, subList));
group.setCondition(list);
ConditionGroup group1 = new ConditionGroup();
group1.setDisplay("组二");
group1.setCondition(new FormulaCondition("$$$ < 200"));
grouper.setConditionGroups(new ConditionGroup[] { group, group1 });
/*
* // 分组&高级 - 自定义分组 - 公式分组
* FunctionGrouper grouper = new FunctionGrouper();
* // 设置公式
* grouper.setFormulaContent("$$$+1");
* grouper.setCustom(true);
* // 普通分组
* grouper.setDivideMode(FunctionGrouper.GROUPING_MODE);
* // 列表
* grouper.setDivideMode(FunctionGrouper.LIST_MODE);
* // 相邻连续分组
* grouper.setDivideMode(FunctionGrouper.CONTINUUM_MODE);
*/
/*
* // 列表
* FunctionGrouper grouper = new FunctionGrouper();
* grouper.setDivideMode(FunctionGrouper.LIST_MODE);
*/
/*
* // 汇总
* SummaryGrouper grouper = new SummaryGrouper();
* grouper.setFunction(new SumFunction()); // 求和
* grouper.setFunction(new AverageFunction()); // 平均
* grouper.setFunction(new MaxFunction()); // 最大值
* grouper.setFunction(new MinFunction()); // 最小值
* grouper.setFunction(new CountFunction()); // 个数
* grouper.setFunction(new NoneFunction()); // 无
*/
dsc.setGrouper(grouper);
// 单元格属性 - 扩展
CellExpandAttr expandAttr = new CellExpandAttr();
// 扩展方向
expandAttr.setDirection((byte) ReportConstants.PORTRAIT);
// 左父格默认
expandAttr.setLeftParentDefault(true);
// 无左父格
// expandAttr.setLeftParentDefault(false);
// 设置左父格
// expandAttr.setLeftParentColumnRow(new com.fr.stable.ColumnRow(col, row));
// 上父格默认
expandAttr.setUpParentDefault(true);
// 无上父格默认
// expandAttr.setUpParentDefault(false);
// 设置上父格
// expandAttr.setUpParentColumnRow(new com.fr.stable.ColumnRow(col, row));
// 补充空白数据
// expandAttr.setMultipleNumber(8);
cell = new DefaultTemplateCellElement(0, row, dsc);
cell.setCellExpandAttr(expandAttr);
sheet.addCellElement(cell);
dsc = new DSColumn();
dsc.setGrouper(new MonoGrouper());
dsc.setDSName("ds1");
dsc.setColumn(TableDataColumn.createColumn("销量"));
dsc.setReselect(false);
// 过滤条件
// 将父格子作为过滤条件(适用于父格子来自于同一个数据集)
dsc.setReselect(false);
dsc.setCondition(new FormulaCondition("$$$ > 300"));
// 排列顺序
dsc.setOrder(SortOrder.DESC);
// 排序公式
dsc.setSortFormula("$$$");
// 结果集筛选
// 筛选类型
SelectCount sc = new SelectCount();
sc.setType(FilterTypeEnum.TOP.getValue());
// 筛选数量公式
sc.setFormulaCount("5");
// 筛选系列公式
// sc.setSerial("1-3");
dsc.setSelectCount(sc);
// 显示值
dsc.setResult("concatenate($$$, '*')");
expandAttr = new CellExpandAttr();
cell = new DefaultTemplateCellElement(1, row, dsc);
expandAttr.setDirection((byte) ReportConstants.PORTRAIT);
cell.setCellExpandAttr(expandAttr);
sheet.addCellElement(cell);
return sheet;
}
}
10-25
7974
07-16
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交