diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCellsCollection.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCellsCollection.cs index f7910cb..6d91072 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCellsCollection.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Cells/XLCellsCollection.cs @@ -113,7 +113,13 @@ if (rowsCollection.TryGetValue(row, out columnsCollection)) { columnsCollection.Remove(column); + if (columnsCollection.Count == 0) + { + rowsCollection.Remove(row); + } } + + } internal IEnumerable GetCells(Int32 rowStart, Int32 columnStart, diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Internal.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Internal.cs index c00a463..003742c 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Internal.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Internal.cs @@ -50,7 +50,7 @@ private XLColor(XLThemeColor themeColor) { _themeColor = themeColor; - _themeTint = 1; + _themeTint = 0; _hashCode = 7 ^ _themeColor.GetHashCode() ^ _themeTint.GetHashCode(); HasValue = true; _colorType = XLColorType.Theme; diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs index 64a5c03..4cb6f5e 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Load.cs @@ -738,7 +738,9 @@ var xlCell = ws.CellFast(cellReference); if (styleList.ContainsKey(styleIndex)) + { xlCell.Style = styleList[styleIndex]; + } else { ApplyStyle(xlCell, styleIndex, s, fills, borders, fonts, numberingFormats); @@ -1039,7 +1041,9 @@ { Int32 styleIndex = row.StyleIndex != null ? Int32.Parse(row.StyleIndex.InnerText) : -1; if (styleIndex > 0) - ApplyStyle(xlRow, styleIndex, s, fills, borders, fonts, numberingFormats); + { + ApplyStyle(xlRow, styleIndex, s, fills, borders, fonts, numberingFormats); + } else { xlRow.Style = DefaultStyle; @@ -1098,9 +1102,13 @@ Int32 styleIndex = col.Style != null ? Int32.Parse(col.Style.InnerText) : -1; if (styleIndex > 0) + { ApplyStyle(xlColumns, styleIndex, s, fills, borders, fonts, numberingFormats); + } else + { xlColumns.Style = DefaultStyle; + } } } diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs index 9fa2aa3..2557ca1 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorkbook_Save.cs @@ -192,16 +192,6 @@ { GeneratePivotTables(workbookPart, worksheetPart, worksheet, context); } - - - //DrawingsPart drawingsPart = worksheetPart.AddNewPart("rId1"); - //GenerateDrawingsPartContent(drawingsPart, worksheet); - - //foreach (var chart in worksheet.Charts) - //{ - // ChartPart chartPart = drawingsPart.AddNewPart("rId1"); - // GenerateChartPartContent(chartPart, (XLChart)chart); - //} } GenerateCalculationChainPartContent(workbookPart, context); @@ -1856,16 +1846,11 @@ var pageFields = new PageFields {Count = (uint)pt.ReportFilters.Count()}; var pivotFields = new PivotFields {Count = Convert.ToUInt32(pt.SourceRange.ColumnCount())}; - foreach (var xlpf in pt.Fields) + foreach (var xlpf in pt.Fields.OrderBy(f => pt.RowLabels.Any(p => p.SourceName == f.SourceName) ? pt.RowLabels.IndexOf(f) : Int32.MaxValue )) { - var pf = new PivotField {ShowAll = false, Name = xlpf.CustomName}; - - if (pt.RowLabels.FirstOrDefault(p => p.SourceName == xlpf.SourceName) != null) { - pf.Axis = PivotTableAxisValues.AxisRow; - - var f = new Field { Index = pt.RowLabels.IndexOf(xlpf) }; + var f = new Field {Index = pt.Fields.IndexOf(xlpf)}; rowFields.AppendChild(f); for (var i = 0; i < xlpf.SharedStrings.Count; i++) @@ -1881,9 +1866,7 @@ } else if (pt.ColumnLabels.FirstOrDefault(p => p.SourceName == xlpf.SourceName) != null) { - pf.Axis = PivotTableAxisValues.AxisColumn; - - var f = new Field { Index = pt.ColumnLabels.IndexOf(xlpf) }; + var f = new Field {Index = pt.Fields.IndexOf(xlpf)}; columnFields.AppendChild(f); for (var i = 0; i < xlpf.SharedStrings.Count; i++) @@ -1897,6 +1880,20 @@ rowItemTotal.AppendChild(new MemberPropertyIndex()); columnItems.AppendChild(rowItemTotal); } + } + + foreach (var xlpf in pt.Fields) + { + var pf = new PivotField {ShowAll = false, Name = xlpf.CustomName}; + + if (pt.RowLabels.FirstOrDefault(p => p.SourceName == xlpf.SourceName) != null) + { + pf.Axis = PivotTableAxisValues.AxisRow; + } + else if (pt.ColumnLabels.FirstOrDefault(p => p.SourceName == xlpf.SourceName) != null) + { + pf.Axis = PivotTableAxisValues.AxisColumn; + } else if (pt.ReportFilters.FirstOrDefault(p => p.SourceName == xlpf.SourceName) != null) { location.ColumnsPerPage = 1; @@ -2960,7 +2957,7 @@ else { foregroundColor.Theme = (UInt32)fillInfo.Fill.PatternColor.ThemeColor; - if (fillInfo.Fill.PatternColor.ThemeTint != 1) + if (fillInfo.Fill.PatternColor.ThemeTint != 0) foregroundColor.Tint = fillInfo.Fill.PatternColor.ThemeTint; } patternFill.AppendChild(foregroundColor); @@ -2976,7 +2973,7 @@ else { backgroundColor.Theme = (UInt32)fillInfo.Fill.PatternBackgroundColor.ThemeColor; - if (fillInfo.Fill.PatternBackgroundColor.ThemeTint != 1) + if (fillInfo.Fill.PatternBackgroundColor.ThemeTint != 0) backgroundColor.Tint = fillInfo.Fill.PatternBackgroundColor.ThemeTint; } patternFill.AppendChild(backgroundColor); @@ -3101,7 +3098,7 @@ else { color.Theme = (UInt32)xlColor.ThemeColor; - if (xlColor.ThemeTint != 1) + if (xlColor.ThemeTint != 0) color.Tint = xlColor.ThemeTint; } return color; @@ -3117,7 +3114,7 @@ else { color.Theme = (UInt32)xlColor.ThemeColor; - if (xlColor.ThemeTint != 1) + if (xlColor.ThemeTint != 0) color.Tint = xlColor.ThemeTint; } return color; @@ -3599,7 +3596,7 @@ var noRows = (sheetData.Elements().FirstOrDefault() == null); foreach (var distinctRow in distinctRows.OrderBy(r => r)) { - Row row; // = sheetData.Elements().FirstOrDefault(r => r.RowIndex.Value == (UInt32)distinctRow); + Row row; if (sheetDataRows.ContainsKey(distinctRow)) row = sheetDataRows[distinctRow]; else diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs index faf7d61..b8018fa 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/XLWorksheet.cs @@ -561,12 +561,10 @@ public IXLWorksheet CopyTo(XLWorkbook workbook, String newSheetName, Int32 position) { var targetSheet = (XLWorksheet)workbook.WorksheetsInternal.Add(newSheetName, position); - + Internals.ColumnsCollection.ForEach(kp => targetSheet.Internals.ColumnsCollection.Add(kp.Key, new XLColumn(kp.Value))); + Internals.RowsCollection.ForEach(kp => targetSheet.Internals.RowsCollection.Add(kp.Key, new XLRow(kp.Value))); Internals.CellsCollection.GetCells().ForEach(c => targetSheet.Cell(c.Address).CopyFrom(c, false)); DataValidations.ForEach(dv => targetSheet.DataValidations.Add(new XLDataValidation(dv))); - Internals.ColumnsCollection.ForEach( - kp => targetSheet.Internals.ColumnsCollection.Add(kp.Key, new XLColumn(kp.Value))); - Internals.RowsCollection.ForEach(kp => targetSheet.Internals.RowsCollection.Add(kp.Key, new XLRow(kp.Value))); targetSheet.Visibility = Visibility; targetSheet.ColumnWidth = ColumnWidth; targetSheet.ColumnWidthChanged = ColumnWidthChanged; @@ -1396,7 +1394,6 @@ var namedRanges = Workbook.NamedRanges.FirstOrDefault(n => String.Compare(n.Name, cellAddressInRange, true) == 0 - && n.Ranges.First().Worksheet == this && n.Ranges.Count == 1); if (namedRanges == null || !namedRanges.Ranges.Any()) return null; @@ -1421,8 +1418,8 @@ var namedRanges = Workbook.NamedRanges.FirstOrDefault(n => String.Compare(n.Name, rangeAddressStr, true) == 0 - && n.Ranges.First().Worksheet == this - && n.Ranges.Count == 1); + && n.Ranges.Count == 1 + ); if (namedRanges == null || !namedRanges.Ranges.Any()) return null; return (XLRange)namedRanges.Ranges.First(); } diff --git a/ClosedXML/ClosedXML/ClosedXML/PathHelper.cs b/ClosedXML/ClosedXML/ClosedXML/PathHelper.cs index 696e074..83cbb4c 100644 --- a/ClosedXML/ClosedXML/ClosedXML/PathHelper.cs +++ b/ClosedXML/ClosedXML/ClosedXML/PathHelper.cs @@ -232,17 +232,6 @@ return path; } - public static void OpenFileFolder(string filePath) - { - string cmdLine = string.Format("/select,\"{0}\"", filePath); - Process.Start(@"explorer.exe", cmdLine); - } - - public static void OpenFile(string filePath) - { - Process.Start(filePath); - } - [Flags] public enum PathTypes { diff --git a/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs b/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs index 5ba9ef8..f28b5dd 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Sandbox/Program.cs @@ -15,12 +15,14 @@ { private static void Main(string[] args) { - var wb = new XLWorkbook(@"c:\temp\sopos.xlsx"); - var ws = wb.Worksheet("3"); - Console.WriteLine(ws.Cell("E22").Value); - //wb.SaveAs(@"c:\temp\saved.xlsx"); + var wb = new XLWorkbook(); + var ws = wb.AddWorksheet("Sheet"); + ws.FirstCell().SetValue(1) + .CellBelow().SetFormulaA1("IF(A1>0,Yes,No)") // Invalid + .CellBelow().SetFormulaA1("IF(A1>0,\"Yes\",\"No\")") // OK + .CellBelow().SetFormulaA1("IF(A1>0,TRUE,FALSE)"); // OK + wb.SaveAs(@"c:\temp\saved.xlsx"); Console.WriteLine("Done"); - Console.ReadKey(); } } } diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Ranges/RangeUsedTests.cs b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Ranges/RangeUsedTests.cs index 7e6e693..5ec0500 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Ranges/RangeUsedTests.cs +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Excel/Ranges/RangeUsedTests.cs @@ -1,16 +1,36 @@ -using NUnit.Framework; +using ClosedXML.Excel; +using NUnit.Framework; namespace ClosedXML_Tests { [TestFixture] public class RangeUsedTests { - //[Test] - //public void FirstLastRows() - //{ - // var wb = new XLWorkbook(); - // var ws = wb.Worksheets.Add("Sheet"); + [Test] + public void CanGetNamedFromAnother() + { + var wb = new XLWorkbook(); + var ws1 = wb.Worksheets.Add("Sheet1"); + ws1.Cell("A1").SetValue(1).AddToNamed("value1"); + + Assert.AreEqual(1, wb.Cell("value1").GetValue()); + Assert.AreEqual(1, wb.Range("value1").FirstCell().GetValue()); - //} + Assert.AreEqual(1, ws1.Cell("value1").GetValue()); + Assert.AreEqual(1, ws1.Range("value1").FirstCell().GetValue()); + + var ws2 = wb.Worksheets.Add("Sheet2"); + + ws2.Cell("A1").SetFormulaA1("=value1").AddToNamed("value2"); + + Assert.AreEqual(1, wb.Cell("value2").GetValue()); + Assert.AreEqual(1, wb.Range("value2").FirstCell().GetValue()); + + Assert.AreEqual(1, ws2.Cell("value1").GetValue()); + Assert.AreEqual(1, ws2.Range("value1").FirstCell().GetValue()); + + Assert.AreEqual(1, ws2.Cell("value2").GetValue()); + Assert.AreEqual(1, ws2.Range("value2").FirstCell().GetValue()); + } } } \ No newline at end of file diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFStartsWith.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFStartsWith.xlsx index c1191e4..7ccbbc2 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFStartsWith.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/ConditionalFormatting/CFStartsWith.xlsx Binary files differ diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/CopyingWorksheets.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/CopyingWorksheets.xlsx index 852a558..2052819 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/CopyingWorksheets.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/CopyingWorksheets.xlsx Binary files differ diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/Formulas.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/Formulas.xlsx index c3356ab..e8c5c58 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/Formulas.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Misc/Formulas.xlsx Binary files differ diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/DeletingRanges.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/DeletingRanges.xlsx index 92aa072..c8ea574 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/DeletingRanges.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/DeletingRanges.xlsx Binary files differ diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/SortExample.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/SortExample.xlsx index 41a0ef2..6649869 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/SortExample.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/SortExample.xlsx Binary files differ diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/Sorting.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/Sorting.xlsx index c49f927..65c31ae 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/Sorting.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/Sorting.xlsx Binary files differ diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/TransposeRanges.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/TransposeRanges.xlsx index 3701fbb..6f8b669 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/TransposeRanges.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/TransposeRanges.xlsx Binary files differ diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/TransposeRangesPlus.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/TransposeRangesPlus.xlsx index 7035634..986d564 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/TransposeRangesPlus.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/TransposeRangesPlus.xlsx Binary files differ diff --git a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/UsingTables.xlsx b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/UsingTables.xlsx index eb5feee..4c1881c 100644 --- a/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/UsingTables.xlsx +++ b/ClosedXML/ClosedXML/ClosedXML_Tests/Resource/Examples/Ranges/UsingTables.xlsx Binary files differ