title: Corrupted excel file for large data
body: <p>Hi i am using <strong>EPPlus</strong> to create xslx file with some data dump. It is working perfectly on local machine as well as on web server for small amount of data. </p>
  
  <p>But i have a case where i have 40,000 rows in dataset. It is again working perfectly on local machine. </p>
  
  <p><strong>but on server it is creating file and when i am trying to open that file it it showing error that file is corrupted. I tried editing file with notepad and noticed that it have HTML content in it</strong>. </p>
  
  <p>i am using this code: </p>
  
  <pre><code>public static void CreateExcel(string file_Name, DataSet ds)
  {
      //  rowsPerSheet  = 50000; 
      string msg = "";
      string Type = "";
      using (ExcelPackage pck = new ExcelPackage()) {
          //Create the worksheet
          ExcelWorksheet ws = default(ExcelWorksheet);
          int clCnt = 1;
  
  
  
          foreach (DataTable tbl in ds.Tables) {
              ws = pck.Workbook.Worksheets.Add(tbl.TableName);
  
              //Load the datatable into the sheet, starting from cell A1. Print the column names on row 1
              ws.Cells("A1").LoadFromDataTable(tbl, true);
  
              if (tbl.Rows.Count != 0) {
                  clCnt = 1;
                  foreach (DataColumn col in tbl.Columns) {
                      ws.Column(clCnt).AutoFit();
                      // format all dates in german format (adjust accordingly)
                      if (col.DataType.Equals(typeof(System.DateTime))) {
                          dynamic colNumber = col.Ordinal + 1;
                          ExcelRange range = ws.Cells(2, colNumber, tbl.Rows.Count + 1, colNumber);
                          range.Style.Numberformat.Format = "MM/dd/yyyy";
                      }
                      if (col.DataType.Equals(typeof(System.Decimal)) || col.DataType.Equals(typeof(System.Double))) {
                          dynamic colNumber = col.Ordinal + 1;
                          ExcelRange range = ws.Cells(2, colNumber, tbl.Rows.Count + 1, colNumber);
                          range.Style.Numberformat.Format = "0.00";
                      }
                      clCnt += 1;
                  }
              }
          }
  
          file_Name = file_Name.Replace(" ", "_") + ".xlsx";
  
  
          HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
          HttpContext.Current.Response.AddHeader("content-disposition", "attachment;  filename=" + file_Name + "");
  
          HttpContext.Current.Response.BinaryWrite(pck.GetAsByteArray());
          HttpContext.Current.Response.End();
      }
  
  
  }
  </code></pre>
  
  <p>Parent Function:</p>
  
  <pre><code>private void GenerateReport()
  {
      string msg = "";
      string output = "where";
      int count = 0;
      string jsscript = "";
      string _FID = "";
      if ((ddlPortfolio.SelectedValue &lt;= 0 &amp; grvforecast.Rows.Count &lt;= 0)) {
          jsscript = "&lt;script&gt;alert('Please select potfolio')&lt;/script&gt;";
          this.Page.ClientScript.RegisterStartupScript(Page.GetType, "jsclose", jsscript);
      } else if ((grvforecast.Rows.Count &lt;= 0)) {
          jsscript = "&lt;script&gt;alert('Please add some entry in grid')&lt;/script&gt;";
          this.Page.ClientScript.RegisterStartupScript(Page.GetType, "jsclose", jsscript);
      } else {
          if (btnValue.Value == "Cash/GAAP Report") {
              _SqlStr = "[USP_CashGaapReport] '";
              foreach (GridViewRow row in grvforecast.Rows) {
                  if ((count &lt; grvforecast.Rows.Count - 1)) {
                      _SqlStr += "" + grvforecast.Rows(count).Cells(1).Text + ",";
                  } else {
                      _SqlStr += "" + grvforecast.Rows(count).Cells(1).Text + "";
                  }
                  count = count + 1;
              }
              _SqlStr += "'";
  
          } else {
              if ((btnValue.Value == "Forecast Attribute Report")) {
                  _SqlStr = "SELECT f.AttributeSetID as AttributeSetID , Attribute_Set.TabName as AttributeSetName FROM Forecast_Account as f INNER JOIN    Attribute_Set ON f.AttributeSetID = Attribute_Set.AttributeSetID where ";
              } else if ((btnValue.Value == "Forecast Data Report")) {
                  _SqlStr = "SELECT p.LegalEntityName AS Portfolio, f.Name, c.AccountName, a.RepeatNumber, d.CashGAAP, d.TheDate, SUM(d.Amount) AS Amount, d.LastUpdated, d.UpdatedBy ";
                  _SqlStr += "FROM dbo.Portfolio AS p INNER JOIN dbo.Forecast AS f ON p.PortfolioID = f.PortfolioID INNER JOIN dbo.Forecast_Account AS a ON f.ForecastID = a.ForecastID ";
                  _SqlStr += "INNER JOIN dbo.Forecast_Data AS d ON a.ForecastAccountID = d.ForecastAccountID INNER JOIN dbo.CoA AS c ON c.AccountNumber = a.AccountNumber where ";
              } else {
                  //    _SqlStr = "SELECT Portfolio, Name, AccountName, CashGAAP, OriginalDate, sum(Amount) as Amount, AccountNumber, AttributeSetName, TheDate, Year"
                  //    _SqlStr &amp;= " FROM (SELECT  Portfolio.LegalEntityName AS Portfolio, f.Name, CoA.AccountName, Forecast_Data.CashGAAP, CONVERT(date, Forecast_Data.TheDate) AS OriginalDate,"
                  //    _SqlStr &amp;= " SUM(Forecast_Data.Amount) AS Amount, CoA.AccountNumber, Attribute_Set.AttributeSetName, '' + CONVERT(varchar, YEAR(Forecast_Data.TheDate))"
                  //    _SqlStr &amp;= " + '-' + CONVERT(varchar, MONTH(Forecast_Data.TheDate)) + '-01' AS TheDate, YEAR(Forecast_Data.TheDate) AS Year, Forecast_Attribute.Value"
                  //    _SqlStr &amp;= " FROM   Portfolio INNER JOIN  Forecast AS f ON Portfolio.PortfolioID = f.PortfolioID INNER JOIN Forecast_Account ON f.ForecastID = Forecast_Account.ForecastID INNER JOIN Forecast_Data ON"
                  //    _SqlStr &amp;= " Forecast_Account.ForecastAccountID = Forecast_Data.ForecastAccountID INNER JOIN CoA ON CoA.AccountNumber = Forecast_Account.AccountNumber"
                  //    _SqlStr &amp;= " INNER JOIN Attribute_Set ON CoA.AttributeSetID = Attribute_Set.AttributeSetID INNER JOIN Forecast_Attribute ON Forecast_Account.ForecastAccountID = Forecast_Attribute.ForecastAccountID WHERE"
                  _SqlStr = "SELECT Portfolio, Name, AccountName, CashGAAP, OriginalDate, sum(Amount) as Amount, d.AccountNumber as AccountNumber, AttributeSetName, TheDate, Year";
                  _SqlStr += " FROM (SELECT  Portfolio.LegalEntityName AS Portfolio, f.Name, CoA.AccountName, Forecast_Data.CashGAAP, CONVERT(date, Forecast_Data.TheDate) AS OriginalDate,";
                  _SqlStr += " SUM(Forecast_Data.Amount) AS Amount, CoA.AccountNumber, Attribute_Set.AttributeSetName, '' + CONVERT(varchar, YEAR(Forecast_Data.TheDate))";
                  _SqlStr += " + '-' + CONVERT(varchar, MONTH(Forecast_Data.TheDate)) + '-01' AS TheDate, YEAR(Forecast_Data.TheDate) AS Year, Forecast_Attribute.Value";
                  _SqlStr += " FROM   Portfolio INNER JOIN  Forecast AS f ON Portfolio.PortfolioID = f.PortfolioID INNER JOIN Forecast_Account ON f.ForecastID = Forecast_Account.ForecastID INNER JOIN Forecast_Data ON";
                  _SqlStr += " Forecast_Account.ForecastAccountID = Forecast_Data.ForecastAccountID INNER JOIN CoA ON CoA.AccountNumber = Forecast_Account.AccountNumber";
                  _SqlStr += " INNER JOIN Attribute_Set ON CoA.AttributeSetID = Attribute_Set.AttributeSetID INNER JOIN Forecast_Attribute ON Forecast_Account.ForecastAccountID = Forecast_Attribute.ForecastAccountID WHERE";
              }
              foreach (GridViewRow row in grvforecast.Rows) {
                  if ((count &lt; grvforecast.Rows.Count - 1)) {
                      _SqlStr += " f.ForecastID=" + grvforecast.Rows(count).Cells(1).Text + " or";
                      _FID += " a.ForecastID=" + grvforecast.Rows(count).Cells(1).Text + " or";
                  } else {
                      _SqlStr += " f.ForecastID=" + grvforecast.Rows(count).Cells(1).Text + " ";
                      _FID += " a.ForecastID=" + grvforecast.Rows(count).Cells(1).Text + " ";
                  }
                  count = count + 1;
              }
              if ((btnValue.Value == "Forecast Data Report")) {
                  _SqlStr += "GROUP BY p.LegalEntityName, f.Name, c.AccountName, a.RepeatNumber, d.CashGAAP, d.TheDate, d.LastUpdated, d.UpdatedBy";
              } else if ((btnValue.Value == "Cash/GAAP Report")) {
                  _SqlStr += " GROUP BY Portfolio.LegalEntityName, f.Name, CoA.AccountName, Forecast_Data.CashGAAP, Forecast_Data.TheDate, CoA.AccountNumber, Attribute_Set.AttributeSetName, Forecast_Attribute.Value) AS d LEFT OUTER JOIN Vendor ON d.Value = Vendor.VendorName";
                  _SqlStr += " GROUP BY d.OriginalDate, d.TheDate, d.AccountNumber, d.Portfolio, d.Name, d.AccountName, d.CashGAAP, d.AttributeSetName, d.Year, Vendor.VendorName";
                  //    _SqlStr &amp;= " GROUP BY Portfolio.LegalEntityName, f.Name, CoA.AccountName, Forecast_Data.CashGAAP, Forecast_Data.TheDate, CoA.AccountNumber, Attribute_Set.AttributeSetName, Forecast_Attribute.Value) AS d"
                  //    _SqlStr &amp;= " Group BY OriginalDate,TheDate,AccountNumber,Portfolio,Name,AccountName,CashGAAP,AttributeSetName,Year"
              }
          }
          try {
              if ((btnValue.Value != "Forecast Attribute Report")) {
                  _ds = new DataSet();
                  _dtTable = myDB.ExecuteDatatable(CommandType.Text, _SqlStr, null);
                  _dtTable.TableName = btnValue.Value.Replace("_", " ");
                  _ds.Tables.Add(_dtTable);
              } else {
                  _ds = new DataSet();
                  _SqlStr += "Group by f.AttributeSetID,Attribute_Set.TabName  ";
                  _dtTable = myDB.ExecuteDatatable(CommandType.Text, _SqlStr, null);
                  foreach (DataRow _dr in _dtTable.Rows) {
                      _SqlStr = "[USP_Forecast_Attributes] " + _dr["AttributeSetID"].ToString() + ",'" + _FID + "'";
                      _dtTable = myDB.ExecuteDatatable(CommandType.Text, _SqlStr, null);
                      _dtTable.TableName = _dr["AttributeSetName"].ToString();
                      _ds.Tables.Add(_dtTable);
                  }
              }
              if ((_ds != null)) {
                  if (DateAndTime.Now.IsDaylightSavingTime()) {
                      strTime = System.DateTime.UtcNow.AddHours(-5).ToString("_MM_dd_yyyy_hh_mm_tt");
                  } else {
                      strTime = System.DateTime.UtcNow.AddHours(-4).ToString("_MM_dd_yyyy_hh_mm_tt");
                  }
                  if (btnValue.Value != "Forecast Attribute Report") {
                      epXL.CreateExcel(btnValue.Value, _ds);
                  //epXL.ExportToExcel(_dtTable, btnValue.Value)
                  } else {
                      epXL.CreateExcel(btnValue.Value, _ds);
                      // &amp; strTime, _ds)
                  }
              }
          } catch (Exception ex) {
              jsscript = "&lt;script&gt;alert('Report not generated')&lt;/script&gt;";
              this.Page.ClientScript.RegisterStartupScript(Page.GetType, "jsclose", jsscript);
          }
      }
  }
  </code></pre>
  
  <p><strong>EDIT:</strong>
  Now i got the exact error:</p>
  
  <pre><code>System.IO.IsolatedStorage.IsolatedStorageException: Unable to create mutex. (Exception from HRESULT: 0x80131464)
     at System.IO.IsolatedStorage.IsolatedStorageFile.Open(String infoFile, String syncName)
     at System.IO.IsolatedStorage.IsolatedStorageFile.Lock(Boolean&amp; locked)
     at System.IO.IsolatedStorage.IsolatedStorageFileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, IsolatedStorageFile isf)
     at MS.Internal.IO.Packaging.PackagingUtilities.SafeIsolatedStorageFileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, ReliableIsolatedStorageFileFolder folder)
     at MS.Internal.IO.Packaging.PackagingUtilities.CreateUserScopedIsolatedStorageFileStreamWithRandomName(Int32 retryCount, String&amp; fileName)
     at MS.Internal.IO.Packaging.SparseMemoryStream.SwitchModeIfNecessary()
     at MS.Internal.IO.Packaging.SparseMemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count)
     at MS.Internal.IO.Packaging.CompressEmulationStream.Write(Byte[] buffer, Int32 offset, Int32 count)
     at MS.Internal.IO.Packaging.CompressStream.Write(Byte[] buffer, Int32 offset, Int32 count)
     at MS.Internal.IO.Zip.ProgressiveCrcCalculatingStream.Write(Byte[] buffer, Int32 offset, Int32 count)
     at MS.Internal.IO.Zip.ZipIOModeEnforcingStream.Write(Byte[] buffer, Int32 offset, Int32 count)
     at System.IO.StreamWriter.Flush(Boolean flushStream, Boolean flushEncoder)
     at System.IO.StreamWriter.Write(String value)
     at System.IO.TextWriter.Write(String format, Object arg0)
     at OfficeOpenXml.ExcelWorksheet.UpdateRowCellData(StreamWriter sw)
     at OfficeOpenXml.ExcelWorksheet.SaveXml()
     at OfficeOpenXml.ExcelWorksheet.Save()
     at OfficeOpenXml.ExcelWorkbook.Save()
     at OfficeOpenXml.ExcelPackage.GetAsByteArray(Boolean save)
     at OfficeOpenXml.ExcelPackage.GetAsByteArray()
  </code></pre>
  
  <p>I am not able to resolve it. Please suggest. 
  Thanks</p>