Skip to content

Commit 774ddeb

Browse files
authored
Merge pull request ClosedXML#269 from igitur/issue252-evaluate-formulas-when-saving
Evaluate formulas when saving
2 parents 27e4073 + 693b7b0 commit 774ddeb

File tree

12 files changed

+495
-346
lines changed

12 files changed

+495
-346
lines changed

ClosedXML/Excel/Cells/XLCell.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
using FastMember;
12
using System;
23
using System.Collections;
34
using System.Collections.Generic;
45
using System.Data;
6+
using System.Diagnostics;
57
using System.Globalization;
68
using System.Linq;
79
using System.Reflection;
@@ -12,7 +14,6 @@ namespace ClosedXML.Excel
1214
{
1315
using Attributes;
1416
using ClosedXML.Extensions;
15-
using FastMember;
1617

1718
internal class XLCell : IXLCell, IXLStylized
1819
{

ClosedXML/Excel/XLWorkbook.cs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -429,27 +429,27 @@ public IXLRange RangeFromFullAddress(String rangeAddress, out IXLWorksheet ws)
429429
public void Save()
430430
{
431431
#if DEBUG
432-
Save(true);
432+
Save(true, false);
433433
#else
434-
Save(false);
434+
Save(false, false);
435435
#endif
436436
}
437437

438438
/// <summary>
439439
/// Saves the current workbook and optionally performs validation
440440
/// </summary>
441-
public void Save(bool validate)
441+
public void Save(Boolean validate, Boolean evaluateFormulae = false)
442442
{
443443
checkForWorksheetsPresent();
444444
if (_loadSource == XLLoadSource.New)
445445
throw new Exception("This is a new file, please use one of the SaveAs methods.");
446446

447447
if (_loadSource == XLLoadSource.Stream)
448448
{
449-
CreatePackage(_originalStream, false, _spreadsheetDocumentType, validate);
449+
CreatePackage(_originalStream, false, _spreadsheetDocumentType, validate, evaluateFormulae);
450450
}
451451
else
452-
CreatePackage(_originalFile, _spreadsheetDocumentType, validate);
452+
CreatePackage(_originalFile, _spreadsheetDocumentType, validate, evaluateFormulae);
453453
}
454454

455455
/// <summary>
@@ -458,16 +458,16 @@ public void Save(bool validate)
458458
public void SaveAs(String file)
459459
{
460460
#if DEBUG
461-
SaveAs(file, true);
461+
SaveAs(file, true, false);
462462
#else
463-
SaveAs(file, false);
463+
SaveAs(file, false, false);
464464
#endif
465465
}
466466

467467
/// <summary>
468468
/// Saves the current workbook to a file and optionally validates it.
469469
/// </summary>
470-
public void SaveAs(String file, Boolean validate)
470+
public void SaveAs(String file, Boolean validate, Boolean evaluateFormulae = false)
471471
{
472472
checkForWorksheetsPresent();
473473
PathHelper.CreateDirectory(Path.GetDirectoryName(file));
@@ -476,14 +476,14 @@ public void SaveAs(String file, Boolean validate)
476476
if (File.Exists(file))
477477
File.Delete(file);
478478

479-
CreatePackage(file, GetSpreadsheetDocumentType(file), validate);
479+
CreatePackage(file, GetSpreadsheetDocumentType(file), validate, evaluateFormulae);
480480
}
481481
else if (_loadSource == XLLoadSource.File)
482482
{
483483
if (String.Compare(_originalFile.Trim(), file.Trim(), true) != 0)
484484
File.Copy(_originalFile, file, true);
485485

486-
CreatePackage(file, GetSpreadsheetDocumentType(file), validate);
486+
CreatePackage(file, GetSpreadsheetDocumentType(file), validate, evaluateFormulae);
487487
}
488488
else if (_loadSource == XLLoadSource.Stream)
489489
{
@@ -493,7 +493,7 @@ public void SaveAs(String file, Boolean validate)
493493
{
494494
CopyStream(_originalStream, fileStream);
495495
//fileStream.Position = 0;
496-
CreatePackage(fileStream, false, _spreadsheetDocumentType, validate);
496+
CreatePackage(fileStream, false, _spreadsheetDocumentType, validate, evaluateFormulae);
497497
fileStream.Close();
498498
}
499499
}
@@ -531,16 +531,16 @@ private void checkForWorksheetsPresent()
531531
public void SaveAs(Stream stream)
532532
{
533533
#if DEBUG
534-
SaveAs(stream, true);
534+
SaveAs(stream, true, false);
535535
#else
536-
SaveAs(stream, false);
536+
SaveAs(stream, false, false);
537537
#endif
538538
}
539539

540540
/// <summary>
541541
/// Saves the current workbook to a stream and optionally validates it.
542542
/// </summary>
543-
public void SaveAs(Stream stream, Boolean validate)
543+
public void SaveAs(Stream stream, Boolean validate, Boolean evaluateFormulae = false)
544544
{
545545
checkForWorksheetsPresent();
546546
if (_loadSource == XLLoadSource.New)
@@ -552,13 +552,13 @@ public void SaveAs(Stream stream, Boolean validate)
552552
if (stream.CanRead && stream.CanSeek && stream.CanWrite)
553553
{
554554
// all is fine the package can be created in a direct way
555-
CreatePackage(stream, true, _spreadsheetDocumentType, validate);
555+
CreatePackage(stream, true, _spreadsheetDocumentType, validate, evaluateFormulae);
556556
}
557557
else
558558
{
559559
// the harder way
560560
MemoryStream ms = new MemoryStream();
561-
CreatePackage(ms, true, _spreadsheetDocumentType, validate);
561+
CreatePackage(ms, true, _spreadsheetDocumentType, validate, evaluateFormulae);
562562
// not really nessesary, because I changed CopyStream too.
563563
// but for better understanding and if somebody in the future
564564
// provide an changed version of CopyStream
@@ -573,15 +573,15 @@ public void SaveAs(Stream stream, Boolean validate)
573573
CopyStream(fileStream, stream);
574574
fileStream.Close();
575575
}
576-
CreatePackage(stream, false, _spreadsheetDocumentType, validate);
576+
CreatePackage(stream, false, _spreadsheetDocumentType, validate, evaluateFormulae);
577577
}
578578
else if (_loadSource == XLLoadSource.Stream)
579579
{
580580
_originalStream.Position = 0;
581581
if (_originalStream != stream)
582582
CopyStream(_originalStream, stream);
583583

584-
CreatePackage(stream, false, _spreadsheetDocumentType, validate);
584+
CreatePackage(stream, false, _spreadsheetDocumentType, validate, evaluateFormulae);
585585
}
586586
}
587587

0 commit comments

Comments
 (0)