设置单元格合并并设置其值,但它不起作用?
//使用EPPlus.dll
使用OfficeOpenXml
string path = @"C:UsersSupermanDesktoprecc1996.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();
怎么了? 怎么做?
要回答为什么使用First()
方法的exception – 我会打赌你的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
调用,你将得到运行时exception:
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()
来获得你想要的东西,但我认为我至少可以解决这个问题。
如果您注释掉生成错误的行,那么结果表中的单元格是否合并? 如果是,请尝试简单地为单元格A1分配值,看看是否有效。
希望这可以帮助
您已在上面的示例代码中使用内联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
正确设置单元格值。
只是一个建议:使用“使用”
并且您的代码稍有变化:
using (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["A1"].Value = "123"; package.Save(); }
我认为范围不再被认可,因为你合并了它
EDIT1:
这段代码对我来说就像一个魅力。 我认为你不需要.First()
上述就是C#学习教程:设置单元格合并并设置其值,但它不起作用?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
using (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].Value = "123"; package.Save(); }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1301234.html