/*******************************************************************************
* You may amend and distribute as you like, but don't remove this header!
*
* EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
* See http://www.codeplex.com/EPPlus for details.
*
* Copyright (C) 2011 Jan Källman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
* If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
*
* All code and executables are provided "as is" with no warranty either express or implied.
* The author accepts no liability for any damage or loss of business that this product may cause.
*
* Code change notes:
*
* Author Change Date
* ******************************************************************************
* Eyal Seagull Added 2012-04-03
*******************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using OfficeOpenXml.Utils;
using System.Drawing;
using System.Globalization;
using System.Xml;
namespace OfficeOpenXml.ConditionalFormatting
{
///
/// Conditional formatting helper
///
internal static class ExcelConditionalFormattingHelper
{
///
/// Check and fix an address (string address)
///
///
///
public static string CheckAndFixRangeAddress(
string address)
{
if (address.Contains(','))
{
throw new FormatException(
ExcelConditionalFormattingConstants.Errors.CommaSeparatedAddresses);
}
address = address.ToUpper(CultureInfo.InvariantCulture);
if (Regex.IsMatch(address, @"[A-Z]+:[A-Z]+"))
{
address = AddressUtility.ParseEntireColumnSelections(address);
}
return address;
}
///
/// Convert a color code to Color Object
///
/// Color Code (Ex. "#FFB43C53" or "FFB43C53")
///
public static Color ConvertFromColorCode(
string colorCode)
{
try
{
return Color.FromArgb(Int32.Parse(colorCode.Replace("#", ""), NumberStyles.HexNumber));
}
catch
{
// Assume white is the default color (instead of giving an error)
return Color.White;
}
}
///
///
///
///
///
///
public static string GetAttributeString(
XmlNode node,
string attribute)
{
try
{
var value = node.Attributes[attribute].Value;
return (value == null) ? string.Empty : value;
}
catch
{
return string.Empty;
}
}
///
///
///
///
///
///
public static int GetAttributeInt(
XmlNode node,
string attribute)
{
try
{
var value = node.Attributes[attribute].Value;
return int.Parse(value, NumberStyles.Integer, CultureInfo.InvariantCulture);
}
catch
{
return int.MinValue;
}
}
///
///
///
///
///
///
public static int? GetAttributeIntNullable(
XmlNode node,
string attribute)
{
try
{
if (node.Attributes[attribute] == null)
{
return null;
}
else
{
var value = node.Attributes[attribute].Value;
return int.Parse(value, NumberStyles.Integer, CultureInfo.InvariantCulture);
}
}
catch
{
return null;
}
}
///
///
///
///
///
///
public static bool GetAttributeBool(
XmlNode node,
string attribute)
{
try
{
var value = node.Attributes[attribute].Value;
return (value == "1" || value == "-1" || value.Equals("TRUE", StringComparison.InvariantCultureIgnoreCase));
}
catch
{
return false;
}
}
///
///
///
///
///
///
public static bool? GetAttributeBoolNullable(
XmlNode node,
string attribute)
{
try
{
if (node.Attributes[attribute] == null)
{
return null;
}
else
{
var value = node.Attributes[attribute].Value;
return (value == "1" || value == "-1" || value.Equals("TRUE",StringComparison.InvariantCultureIgnoreCase));
}
}
catch
{
return null;
}
}
///
///
///
///
///
///
public static double GetAttributeDouble(
XmlNode node,
string attribute)
{
try
{
var value = node.Attributes[attribute].Value;
return double.Parse(value, NumberStyles.Number, CultureInfo.InvariantCulture);
}
catch
{
return double.NaN;
}
}
///
///
///
///
///
///
public static decimal GetAttributeDecimal(
XmlNode node,
string attribute)
{
try
{
var value = node.Attributes[attribute].Value;
return decimal.Parse(value, NumberStyles.Any, CultureInfo.InvariantCulture);
}
catch
{
return decimal.MinValue;
}
}
///
/// Encode to XML (special characteres: ' " > < &)
///
///
///
public static string EncodeXML(
this string s)
{
return s.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\"", """).Replace("'", "'");
}
///
/// Decode from XML (special characteres: ' " > < &)
///
///
///
public static string DecodeXML(
this string s)
{
return s.Replace("'", "'").Replace("\"", """).Replace(">", ">").Replace("<", "<").Replace("&", "&");
}
}
}