diff --git a/ClosedXML/ClosedXML/ClosedXML/Utils/GraphicsUtils.cs b/ClosedXML/ClosedXML/ClosedXML/Utils/GraphicsUtils.cs index 954c22c..b5e6762 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Utils/GraphicsUtils.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Utils/GraphicsUtils.cs @@ -5,17 +5,24 @@ { internal static class GraphicsUtils { + [ThreadStatic] + private static Graphics threadLocalGraphics; + private static Graphics g + { + get + { + if (threadLocalGraphics == null) + { + var image = new Bitmap(1, 1); + threadLocalGraphics = Graphics.FromImage(image); + } + return threadLocalGraphics; + } + } + public static SizeF MeasureString(string s, Font font) { - SizeF result; - using (var image = new Bitmap(1, 1)) - { - using (var g = Graphics.FromImage(image)) - { - result = g.MeasureString(s, font, Int32.MaxValue, StringFormat.GenericTypographic); - } - } - + SizeF result = g.MeasureString(s, font, Int32.MaxValue, StringFormat.GenericTypographic); return result; } } diff --git a/ClosedXML/ClosedXML/ClosedXML/XLHelper.cs b/ClosedXML/ClosedXML/ClosedXML/XLHelper.cs index e0f257d..d5f704d 100644 --- a/ClosedXML/ClosedXML/ClosedXML/XLHelper.cs +++ b/ClosedXML/ClosedXML/ClosedXML/XLHelper.cs @@ -83,20 +83,22 @@ return sum; } + private static readonly string[] letters = new[] { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; + /// /// Gets the column letter of a given column number. /// /// The column number to translate into a column letter. public static string GetColumnLetterFromNumber(int columnNumber) { - var ret = String.Empty; - while (columnNumber > 0) + columnNumber--; // Adjust for start on column 1 + if (columnNumber <= 25) { - --columnNumber; - ret = (char)('A' + columnNumber % 26) + ret; - columnNumber /= 26; + return letters[columnNumber]; } - return ret; + var firstPart = (columnNumber) / 26; + var remainder = ((columnNumber) % 26) + 1; + return GetColumnLetterFromNumber(firstPart) + GetColumnLetterFromNumber(remainder); } public static bool IsValidColumn(string column)