【问题标题】:update existing workbook using epplus C#使用 epplus C# 更新现有工作簿
【发布时间】:2015-12-06 08:07:44
【问题描述】:

我正在尝试将新工作表添加到现有工作簿中,代码运行良好,没有任何错误。但是更改不会更新到 excel 文件。 这是我的代码

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();
        }
    }
}

【问题讨论】:

    标签: c# excel epplus-4


    【解决方案1】:

    stream 对象未绑定到 package。唯一的关系是它在您的调用中将其字节复制到Load,然后它们是分开的。

    您甚至不需要使用 stream - 最好让 package 像这样自行处理:

    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();
            }
    
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      这里我展示了通过在同一个文件中创建一个新工作表来将数据写入现有的 excel 文件。要回答您的问题:尝试使用最后两行 File.WriteAllBytes 而不是 p.Save()。

      string strfilepath = "C:\\Users\\m\\Desktop\\Employeedata.xlsx";           
      using (ExcelPackage p = new ExcelPackage())
      {
          using (FileStream stream = new FileStream(strfilepath, FileMode.Open))
          {
              p.Load(stream);
             //deleting worksheet if already present in excel file
              var wk = p.Workbook.Worksheets.SingleOrDefault(x => x.Name == "Hola");
              if (wk != null) { p.Workbook.Worksheets.Delete(wk); }
      
              p.Workbook.Worksheets.Add("Hola");
              p.Workbook.Worksheets.MoveToEnd("Hola");
              ExcelWorksheet worksheet = p.Workbook.Worksheets[p.Workbook.Worksheets.Count];
      
              worksheet.InsertRow(5, 2);
              worksheet.Cells["A9"].LoadFromDataTable(dt1, true);
              // Inserting values in the 5th row
              worksheet.Cells["A5"].Value = "12010";
              worksheet.Cells["B5"].Value = "Drill";
              worksheet.Cells["C5"].Value = 20;
              worksheet.Cells["D5"].Value = 8;
      
              // Inserting values in the 6th row
              worksheet.Cells["A6"].Value = "12011";
              worksheet.Cells["B6"].Value = "Crowbar";
              worksheet.Cells["C6"].Value = 7;
              worksheet.Cells["D6"].Value = 23.48;                  
          }
          //p.Save() ;
          Byte[] bin = p.GetAsByteArray();
          File.WriteAllBytes(@"C:\Users\m\Desktop\Employeedata.xlsx", bin);
      }
      

      【讨论】:

      • 请添加一些文字来解释您的答案。不要只输入代码。
      【解决方案3】:

      我最初使用这个得到错误代码“A disk error occurred during a write operation. (Exception from HRESULT: 0x8003001D (STG_E_WRITEFAULT))”,后来才知道是因为我想修改现有的Excel文件不完全符合 MS-Excel 格式。我在 Open office 中将原始 excel 文件创建为 .xls 文件,但 EPPlus 无法读取它。当我在 Online Excel 中重新生成这个原始 excel 文件时,一切正常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多