update existing workbook using epplus C#

Ravi Khatana picture Ravi Khatana · Dec 6, 2015 · Viewed 30.3k times · Source

I am trying to add new worksheet into existing workbook, code runs fine without any error. But changes are not being updated to the excel file. Here is my code

string path = "C:\\TestFileSave\\ABC.xlsx";
FileInfo filePath = new FileInfo(path);
if (File.Exists(path)) 
{
    using(ExcelPackage p = new ExcelPackage()) 
    {
        using(stream = new FileStream(path, FileMode.Open, FileAccess.ReadWrite)) 
        {
            p.Load(stream);
            ExcelWorksheet ws = p.Workbook.Worksheets.Add(wsName + wsNumber.ToString());
            ws.Cells[1, 1].Value = wsName;
            ws.Cells[1, 1].Style.Fill.PatternType = ExcelFillStyle.Solid;
            ws.Cells[1, 1].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(184, 204, 228));
            ws.Cells[1, 1].Style.Font.Bold = true;
            p.Save();
        }
    }
}

Answer

Ernie S picture Ernie S · Dec 6, 2015

The stream object is not tied to the package. The only relationship is it copies its bytes in your call to Load afterwards they are separate.

You do not need to even use a stream - better to let the package handle it on its own like this:

var fileinfo = new FileInfo(path);
if (fileinfo.Exists)
{
    using (ExcelPackage p = new ExcelPackage(fileinfo))
    {
        //using (stream = new FileStream(path, FileMode.Open, FileAccess.ReadWrite))
        {
            //p.Load(stream);
            ExcelWorksheet ws = p.Workbook.Worksheets.Add(wsName + wsNumber.ToString());
            ws.Cells[1, 1].Value = wsName;
            ws.Cells[1, 1].Style.Fill.PatternType = ExcelFillStyle.Solid;
            ws.Cells[1, 1].Style.Fill.BackgroundColor.SetColor(Color.FromArgb(184, 204, 228));
            ws.Cells[1, 1].Style.Font.Bold = true;
            p.Save();
        }

    }

}