diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs index fc3adf4..d0d535c 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCell.cs @@ -986,13 +986,12 @@ mergeToDelete.ForEach(m => Worksheet.Internals.MergedRanges.Remove(m)); } - private void SetValue(object objWithValue, int ro, int co) + private void SetValue(T value, int ro, int co) where T: class { - string str = String.Empty; - if (objWithValue != null) - str = objWithValue.ToString(); - - _worksheet.Cell(ro, co).Value = str; + if (value == null) + _worksheet.Cell(ro, co).SetValue(String.Empty); + else + _worksheet.Cell(ro, co).SetValue((T)Convert.ChangeType(value, typeof(T))); } private void SetValue(object value) diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCells.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCells.cs index 0b05590..8c1d087 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCells.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCells.cs @@ -49,11 +49,13 @@ { if (oneRange) { - foreach(var cell in range.Worksheet.Internals.CellsCollection.GetCells( - range.FirstAddress.RowNumber, - range.FirstAddress.ColumnNumber, - range.LastAddress.RowNumber, - range.LastAddress.ColumnNumber)) + foreach(var cell in range.Worksheet.Internals.CellsCollection + .GetCells( + range.FirstAddress.RowNumber, + range.FirstAddress.ColumnNumber, + range.LastAddress.RowNumber, + range.LastAddress.ColumnNumber) + .Where(c => !c.IsEmpty(_includeFormats))) { yield return cell; } @@ -61,7 +63,8 @@ else { var tmpRange = range; - var addressList = range.Worksheet.Internals.CellsCollection.GetSheetPoints( + var addressList = range.Worksheet.Internals.CellsCollection + .GetSheetPoints( tmpRange.FirstAddress.RowNumber, tmpRange.FirstAddress.ColumnNumber, tmpRange.LastAddress.RowNumber, @@ -90,6 +93,7 @@ { if (oneRange) { + yield return range.Worksheet.Cell(ro, co); } else diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs index 925dca7..5228b17 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs @@ -392,7 +392,7 @@ { if (cell.DataType == CellValues.InlineString) { - xlCell._cellValue = cell.InlineString.Text.Text; + xlCell._cellValue = cell.InlineString.Text.Text.FixNewLines(); xlCell._dataType = XLCellValues.Text; xlCell.ShareString = false; } @@ -411,7 +411,7 @@ foreach (Run run in runs) { var runProperties = run.RunProperties; - String text = run.Text.InnerText.Replace("\n", Environment.NewLine); + String text = run.Text.InnerText.FixNewLines(); if (runProperties == null) xlCell.RichText.AddText(text, xlCell.Style.Font); @@ -446,14 +446,14 @@ foreach (PhoneticRun pr in phoneticRuns) { - xlCell.RichText.Phonetics.Add(pr.Text.InnerText, (Int32) pr.BaseTextStartIndex.Value, + xlCell.RichText.Phonetics.Add(pr.Text.InnerText.FixNewLines(), (Int32)pr.BaseTextStartIndex.Value, (Int32) pr.EndingBaseIndex.Value); } #endregion } else - xlCell._cellValue = cell.CellValue.Text; + xlCell._cellValue = cell.CellValue.Text.FixNewLines(); } else xlCell._cellValue = String.Empty; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index 5211e06..1233ede 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -639,8 +639,7 @@ runProperties.Append(fontFamilyNumbering); var text = new Text {Text = rt.Text}; - if (rt.Text.StartsWith(" ") || rt.Text.EndsWith(" ") || - rt.Text.Contains(Environment.NewLine)) + if (rt.Text.PreserveSpaces()) text.Space = SpaceProcessingModeValues.Preserve; run.Append(runProperties); @@ -660,6 +659,8 @@ }; var text = new Text {Text = p.Text}; + if (p.Text.PreserveSpaces()) + text.Space = SpaceProcessingModeValues.Preserve; phoneticRun.Append(text); sharedStringItem.Append(phoneticRun); @@ -2814,7 +2815,14 @@ cell.CellValue = cellValue; } else - cell.InlineString = new InlineString {Text = new Text(opCell.GetString())}; + { + String text = opCell.GetString(); + var t = new Text(text); + if (text.PreserveSpaces()) + t.Space = SpaceProcessingModeValues.Preserve; + + cell.InlineString = new InlineString {Text = t}; + } } } else if (dataType == XLCellValues.TimeSpan) diff --git a/ClosedXML/ClosedXML/ClosedXML/ExcelHelper.cs b/ClosedXML/ClosedXML/ClosedXML/ExcelHelper.cs index 01898b7..62bfb7f 100644 --- a/ClosedXML/ClosedXML/ClosedXML/ExcelHelper.cs +++ b/ClosedXML/ClosedXML/ClosedXML/ExcelHelper.cs @@ -157,5 +157,7 @@ { return range.Contains('-') ? range.Replace('-', ':').Split(':') : range.Split(':'); } + + } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML/Extensions.cs b/ClosedXML/ClosedXML/ClosedXML/Extensions.cs index a21b25b..c243075 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Extensions.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Extensions.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Windows.Forms; +using System.Text.RegularExpressions; [assembly: CLSCompliantAttribute(true)] namespace ClosedXML.Excel @@ -113,6 +114,17 @@ } return true; } + + private static readonly Regex RegexNewLine = new Regex(@"((?(); listOfStrings.Add("House"); - listOfStrings.Add("Car"); + listOfStrings.Add("001"); ws.Cell(1, 1).Value = "From Strings"; ws.Cell(1, 1).AsRange().AddToNamed("Titles"); ws.Cell(2, 1).InsertData(listOfStrings); diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj index f79f52f..5c28017 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/ClosedXML_Tests.csproj @@ -65,6 +65,7 @@ + diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Cells/XLCellTest.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Cells/XLCellTest.cs index 41161d1..589908c 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Cells/XLCellTest.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Cells/XLCellTest.cs @@ -103,5 +103,15 @@ var range = ws.Cell(2, 2).InsertData(new[] { "a", "b", "c" }); Assert.AreEqual("'Sheet1'!B2:B4", range.ToString()); } + + [TestMethod()] + public void CellsUsed() + { + var ws = new XLWorkbook().Worksheets.Add("Sheet1"); + ws.Cell(1, 1); + ws.Cell(2, 2); + Int32 count = ws.Range("A1:B2").CellsUsed().Count(); + Assert.AreEqual(0, count); + } } } diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/ExcelHelperTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/ExcelHelperTests.cs index 73382d5..29082fd 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/ExcelHelperTests.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/ExcelHelperTests.cs @@ -15,10 +15,6 @@ { [TestMethod] - public void GetFile() - { - } - [TestMethod] public void TestConvertColumnLetterToNumberAnd() { CheckColumnNumber(1); diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/Extensions.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/Extensions.cs new file mode 100644 index 0000000..e336112 --- /dev/null +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Misc/Extensions.cs @@ -0,0 +1,28 @@ +using System; +using System.Text; +using System.Collections.Generic; +using System.Linq; +using ClosedXML.Excel; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace ClosedXML_Tests.Excel +{ + /// + /// Summary description for UnitTest1 + /// + [TestClass] + public class Extensions + { + + [TestMethod] + public void FixNewLines() + { + Assert.AreEqual("\n".FixNewLines(), Environment.NewLine); + Assert.AreEqual("\r\n".FixNewLines(), Environment.NewLine); + Assert.AreEqual("\rS\n".FixNewLines(), "\rS" + Environment.NewLine); + Assert.AreEqual("\r\n\n".FixNewLines(), Environment.NewLine + Environment.NewLine); + } + + + } +} diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/Hyperlinks.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/Hyperlinks.xlsx index df6f83a..598637a 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/Hyperlinks.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/Hyperlinks.xlsx Binary files differ diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/InsertingData.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/InsertingData.xlsx index 1e2da14..7579e9a 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/InsertingData.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/InsertingData.xlsx Binary files differ