//使用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();
出了什么问题?怎么做?
答案 0 :(得分:2)
要回答为什么使用First()
方法的异常 - 我会打赌你的excel中的sheet3
为空。请注意,Cells
对象仅包含对具有实际内容的单元格的引用。但如果excel中的所有单元格都是空的,那么EPPlus中的Cells
集合也是如此。
例如,这在创建全新工作表时可以正常工作:
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();
}
但是如果您注释掉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();
}
正如其他人所解释的那样,没有必要致电First()
来获得你想要的东西,但我认为我至少要解决这个问题。
答案 1 :(得分:1)
您的示例代码中已经有内联ExcelRange
:
sheet3.Cells["A1:B5"].Merge = true;
因此保存引用,并使用它来设置合并的单元格值:
using (var package = new ExcelPackage(new FileInfo(path)))
{
var sheet3 = package.Workbook.Worksheets[3];
var range = sheet3.Cells["A1:B5"];
range.Merge = true;
sheet3.Cells[range.Start.Address].Value = "123";
package.Save();
}
现在无需计算或硬编码单元格地址或索引。换句话说,当你这样做时:
var mergedId = sheet3.MergedCells[1, 1];
代码抛出System.InvalidOperationException
因为mergedId
是A1:B5
。
相反:
range.Start.Address // A1
正确设置单元格值。