【问题标题】:How to add one excelworksheet into other workbook using EPPlus in C#?如何在 C# 中使用 EPPlus 将一个 Excel 工作表添加到另一个工作簿中?
【发布时间】:2015-09-24 13:39:40
【问题描述】:
  private static ExcelPackage MergeExcelPackages(ExcelPackage aExcelPackage,
                ExcelPackage bExcelPackage)
     {
     var excelPackage = new ExcelPackage();
     excelPackage.Workbook.Worksheets.Add("AInfo", aExcelPackage.Workbook.Worksheets[1]);
     excelPackage.Workbook.Worksheets.Add("BInfo", bExcelPackage.Workbook.Worksheets[1]);

     return excelPackage;
     }

以上代码在 EPPlus 3.1.3.3 中工作,但在 vesion 4.0.4 中不工作 它抛出以下错误:

System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at OfficeOpenXml.ExcelStyleCollection`1.get_Item(Int32 PositionID)
   at OfficeOpenXml.Style.ExcelStyle.get_XfId()
   at OfficeOpenXml.ExcelStyles.CreateNamedStyle(String name, ExcelStyle Template)
   at OfficeOpenXml.ExcelStyles.CloneStyle(ExcelStyles style, Int32 styleID, Boolean isNamedStyle, Boolean allwaysAdd)
   at OfficeOpenXml.ExcelStyles.CloneStyle(ExcelStyles style, Int32 styleID)
   at OfficeOpenXml.ExcelWorksheets.CloneCells(ExcelWorksheet Copy, ExcelWorksheet added)
   at OfficeOpenXml.ExcelWorksheets.Add(String Name, ExcelWorksheet Copy)

【问题讨论】:

  • 它会给你一个错误。我刚刚尝试过,它似乎对我有用。
  • @Ernie 我用错误信息更新了问题以及您使用的是哪个版本?
  • 我使用的是 4.0.4。您使用 epplus 生成的 excel 文件是否来自其他来源?奇怪的是,它突然像这样复制样式时出错。
  • @Ernie 他们从相同版本的 EPPlus 生成。
  • 我只能建议发布更多或您的代码和/或您要使用的文件。可能是您发现的特定于您使用的格式的错误。

标签: epplus-4


【解决方案1】:

这是我认为可以实现您的目标的完整方法。我正在使用 EPPlus 4.0.4

public bool CreateJobReports(int jobId, string jobName, string destination,
    Dictionary<string, DataTable> reportTables)
{
    try
    {
        var tables = reportTables.Count;
        var worksheets = 0;
        var workBookName = String.Format("JobReports_JobId_{0}", jobId);
        var fullPath = String.Format(@"{0}\{1}.xlsx", destination, workBookName);
        var excelWorkbook = new FileInfo(fullPath);
        using (var package = new ExcelPackage(excelWorkbook))
        {
            foreach (var table in reportTables)
            {
                var tableName = table.Key;
                var reportTable = table.Value;

                // Add a new worksheet.
                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(tableName);

                // Load the data into the worksheet starting from top left (A1).
                worksheet.Cells["A1"].LoadFromDataTable(reportTable, true, TableStyles.None);
            }

            package.Save();

            worksheets = package.Workbook.Worksheets.Count;
        }

        return worksheets == tables;
    }
    catch (Exception ex)
    {
        var jobInfo = string.Format("JobId: {0}, JobName: {1}. ", jobId, jobName);
        var exception = jobInfo + ex.ToString();
        if (ex.InnerException != null)
        {
            exception = exception + String.Format(". Inner exception: {0}", ex.InnerException.ToString());
        }
        _logger.Fatal(mapInfo + exception);

        throw;
    }
}

【讨论】:

    猜你喜欢
    • 2021-02-26
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2011-03-14
    • 2022-07-21
    • 1970-01-01
    • 2023-01-24
    相关资源
    最近更新 更多