Exemplo n.º 1
0
        /// <summary>
        /// 测试 条件公式.
        /// </summary>
        public void TestFormatConditions()
        {
            Console.WriteLine("测试 Excel 条件公式 开始!");

            string fileName =
                System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase
                + @"ExcelFiles\测试条件公式.xls";

            ExcelReport service = new ExcelReport();

            // 打开 Excel.
            service.OpenExcel();

            // 打开 Excel 文件.
            service.OpenExcelFile(fileName);

            // 条件公式
            service.SetFormatConditionsExpression(
                "测试条件公式1",
                "=INDIRECT(CONCATENATE(\"R\",ROW(),\"C2\"),FALSE) < INDIRECT(CONCATENATE(\"R\",ROW(),\"C3\"),FALSE)",
                true,
                true,
                -16776961);

            /*

            关于公式 =INDIRECT(CONCATENATE("R",ROW(),"C2"),FALSE) < INDIRECT(CONCATENATE("R",ROW(),"C3"),FALSE)

            其中 ROW() 是 获得 Excel 表格当前行号

            CONCATENATE 是连接字符串
            CONCATENATE("R",ROW(),"C2")
            CONCATENATE("R",ROW(),"C3")  就是通过 行号,来计算一个 当前行的地址。
            例如当前行是第3行
            那么就返回  R3C2, 意思是 第3行第2列。
            以及返回  R3C3, 意思是 第3行第3列。

            INDIRECT 是通过 地址,获取指定地址的具体数据。
            例如当前行是第3行。
            最后相当于执行的是
            =INDIRECT("R3C2"),FALSE) < INDIRECT("R3C3"),FALSE)
            也就是判断,当前行的第3列的数据,是否大于当前行的第2列的数据。
            如果条件满足了,那么就需要设定格式。

             */

            service.SetFormatConditionsCellValueLessEqual(
                "测试条件公式2",
                "A3",
                "C4",
                0,
                0,
                ExcelFormatConditionOperator.xlLessEqual,
                "=INDIRECT(CONCATENATE(\"R\",ROW(),\"C2\"),FALSE)",
                true,
                false,
                -16776961);

            /*

            关于公式的   =INDIRECT(CONCATENATE("R",ROW(),"C2"),FALSE) 解释

            CONCATENATE 是连接字符串
            CONCATENATE("R",ROW(),"C2")
            CONCATENATE("R",ROW(),"C2")  就是通过 行号,来计算一个 当前行的地址。
            例如当前行是第4行

            那么就返回  R4C2, 意思是 第4行第2列。

            INDIRECT 是通过 地址,获取指定地址的具体数据。

            */

            // 保存 Excel 文件.
            service.SaveExcelFile();

            // 关闭 Excel.
            service.CloseExcel();

            Console.WriteLine("测试 Excel 条件公式 结束!");
        }