Free cookie consent management tool by TermsFeed Policy Generator

source: branches/RemoveBackwardsCompatibility/HeuristicLab.ExtLibs/HeuristicLab.EPPlus/4.0.3/EPPlus-4.0.3/FormulaParsing/ExpressionGraph/CompileResult.cs @ 18242

Last change on this file since 18242 was 12074, checked in by sraggl, 9 years ago

#2341: Added EPPlus-4.0.3 to ExtLibs

File size: 5.1 KB
Line 
1/*******************************************************************************
2 * You may amend and distribute as you like, but don't remove this header!
3 *
4 * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
5 * See http://www.codeplex.com/EPPlus for details.
6 *
7 * Copyright (C) 2011  Jan Källman
8 *
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public
11 * License as published by the Free Software Foundation; either
12 * version 2.1 of the License, or (at your option) any later version.
13
14 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
17 * See the GNU Lesser General Public License for more details.
18 *
19 * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
20 * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
21 *
22 * All code and executables are provided "as is" with no warranty either express or implied.
23 * The author accepts no liability for any damage or loss of business that this product may cause.
24 *
25 * Code change notes:
26 *
27 * Author             Change            Date
28 * ******************************************************************************
29 * Mats Alm                       Added                   2013-03-01 (Prior file history on https://github.com/swmal/ExcelFormulaParser)
30 *******************************************************************************/
31using System;
32using System.Collections.Generic;
33using System.Globalization;
34using System.Linq;
35using System.Text;
36using System.Text.RegularExpressions;
37using OfficeOpenXml.Utils;
38
39namespace OfficeOpenXml.FormulaParsing.ExpressionGraph
40{
41    public class CompileResult
42    {
43        private static CompileResult _empty = new CompileResult(null, DataType.Empty);
44        public static CompileResult Empty
45        {
46            get { return _empty; }
47        }
48
49        public CompileResult(object result, DataType dataType)
50        {
51            Result = result;
52            DataType = dataType;
53        }
54
55        public CompileResult(eErrorType errorType)
56        {
57            Result = ExcelErrorValue.Create(errorType);
58            DataType = DataType.ExcelError;
59        }
60
61        public CompileResult(ExcelErrorValue errorValue)
62        {
63            Require.Argument(errorValue).IsNotNull("errorValue");
64            Result = errorValue;
65            DataType = DataType.ExcelError;
66        }
67        public object Result
68        {
69            get;
70            private set;
71        }
72        public object ResultValue
73        {
74            get
75            {
76                var r = Result as ExcelDataProvider.IRangeInfo;
77                if (r == null)
78                {
79                    return Result;
80                }
81                else
82                {
83                    return r.GetValue(r.Address._fromRow, r.Address._fromCol);
84                }
85            }
86        }
87        public double ResultNumeric
88        {
89            get
90            {
91                if (IsNumeric)
92                {
93                    return Result == null ? 0 :  Convert.ToDouble(Result);
94                }
95                else if(Result is DateTime)
96                {
97                    return ((DateTime)Result).ToOADate();
98                }
99                else if(Result is TimeSpan)
100                {
101                    return new DateTime(((TimeSpan)Result).Ticks).ToOADate();
102                }
103                else if (IsNumericString)
104                {
105                    return double.Parse(Result.ToString(), NumberStyles.Float, CultureInfo.InvariantCulture);
106                }
107                else if (Result is ExcelDataProvider.IRangeInfo)
108                {
109                    var c = ((ExcelDataProvider.IRangeInfo)Result).FirstOrDefault();
110                    if (c == null)
111                    {
112                        return 0;
113                    }
114                    else
115                    {
116                        return c.ValueDoubleLogical;
117                    }
118                }
119                else
120                {
121                    return 0;
122                }
123            }
124        }
125
126        public DataType DataType
127        {
128            get;
129            private set;
130        }
131       
132        public bool IsNumeric
133        {
134            get
135            {
136                return DataType == DataType.Decimal || DataType == DataType.Integer || DataType == DataType.Empty || DataType == DataType.Boolean || DataType == DataType.Date;
137            }
138        }
139
140        public bool IsNumericString
141        {
142            get
143            {
144                return DataType == DataType.String && ConvertUtil.IsNumericString(Result);
145            }
146        }
147
148        public bool IsResultOfSubtotal { get; set; }
149
150        public bool IsHiddenCell { get; set; }
151    }
152}
Note: See TracBrowser for help on using the repository browser.