单元格元素

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;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值