设置单元格合并并设置其值,但它不起作用?

Sup*_*man 5 c# epplus

//使用EPPlus.dll

使用OfficeOpenXml

string path = @"C:\Users\Superman\Desktop\recc\1996.xlsx";
            ExcelPackage package = new ExcelPackage(new FileInfo(path));
            var sheet3 = package.Workbook.Worksheets[3];
            sheet3.Cells["A1:B5"].Merge = true;
            var mergedId = sheet3.MergedCells[1, 1];
            sheet3.Cells[mergedId].First().Value = "123"; // error: System.InvalidOperationException : Sequence does not contain any elements
            package.Save();
Run Code Online (Sandbox Code Playgroud)

怎么了?怎么做?

Ern*_*e S 2

要回答为什么使用该方法会出现异常First()- 我敢打赌你的sheet3Excel 中是空的。请记住,该Cells对象仅包含对具有实际内容的单元格的引用。但如果 excel 中的所有单元格都是空的,那么CellsEPPlus 中的集合也是空的。

例如,这在创建全新的工作表时效果很好:

using (var package = new ExcelPackage(fi))
{
    var brandNewSheet = package.Workbook.Worksheets.Add("BrandNewSheet");
    brandNewSheet.Cells["A1"].LoadFromCollection(new[] {"A", "B", "C", "D", "E"});
    brandNewSheet.Cells["B1"].LoadFromCollection(new[] {"A", "B", "C", "D", "E"});
    brandNewSheet.Cells["A1:B5"].Merge = true;
    var mergedId = brandNewSheet.MergedCells[1, 1];
    brandNewSheet.Cells[mergedId].First().Value = "123";
    package.Save();
}
Run Code Online (Sandbox Code Playgroud)

但是如果你注释掉这些LoadFromCollection调用,你将得到运行时异常:

using (var package = new ExcelPackage(fi))
{
    var brandNewSheet = package.Workbook.Worksheets.Add("BrandNewSheet");
    //brandNewSheet.Cells["A1"].LoadFromCollection(new[] {"A", "B", "C", "D", "E"});
    //brandNewSheet.Cells["B1"].LoadFromCollection(new[] {"A", "B", "C", "D", "E"});
    brandNewSheet.Cells["A1:B5"].Merge = true;
    var mergedId = brandNewSheet.MergedCells[1, 1];
    brandNewSheet.Cells[mergedId].First().Value = "123"; //Cells is empty so: System.InvalidOperationException: Sequence contains no elements
    package.Save();
}
Run Code Online (Sandbox Code Playgroud)

正如其他人所解释的那样,无需打电话First()来获取您想要的东西,但我认为我至少解决了这个问题。