Csharp/C#教程:设置单元格合并并设置其值,但它不起作用?分享


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

//使用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因为mergedIdA1: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

(0)
上一篇 2023年1月11日
下一篇 2023年1月11日

精彩推荐