EPPlus,查找并设置命名区域的值

6

我一直在尝试使用ExcelPackage (3.0.1)库设置命名范围的值(在这种情况下,是单个命名单元格),但像这样简单:

ExcelNamedRange er = xlPackage.Workbook.Names["Customer"];
er.Value = "Foo Bar";

我显然做错了 - 有没有人能给我一个可以跟随的例子?
谢谢。
2个回答

10

我查找了ExcelPackage文档以了解Names[]集合返回的类型,但发现文档将很快推出,或者至少这是他们在2007年时所说的。

我建议您使用EPPlus,它是一个excel库(仅支持xlsx),对我来说效果非常好。

官方链接

现在,要为命名范围中的每个单元格设置值:

ExcelWorksheet sheet = _openXmlPackage.Workbook.Worksheets["SheetName"];
using (ExcelNamedRange namedRange = sheet.Names["RangeName"])
{
    for (int rowIndex = Start.Row; rowIndex <= namedRange.End.Row; rowIndex++)
    {
        for (int columnIndex = namedRange.Start.Column; columnIndex <= namedRange.End.Column; columnIndex++)
        {
            sheet.Cells[rowIndex, columnIndex].Value = "no more hair pulling";                        
        }
    }
}

我的范围是单个单元格。上面的代码声称namedRange.Start.Row为-1。 - BigBadOwl
1
它应该适用于单个单元格,但我不是100%确定。我看到你成功解决了你的问题,很高兴你做到了。我将我的答案留在这里,以防有人对尝试使用EPPlus解决命名范围问题感兴趣。问候。 - daniloquio

2

我不得不使用单元格的值来解决问题。

using (ExcelPackage xlPackage = new ExcelPackage(newFile))
            {
                foreach (ExcelWorksheet worksheet in xlPackage.Workbook.Worksheets)
                {

                    var dimension = worksheet.Dimension;
                    if (dimension == null) { continue; }
                    var cells = from row in Enumerable.Range(dimension.Start.Row, dimension.End.Row)
                                from column in Enumerable.Range(dimension.Start.Column, dimension.End.Column)
                                //where worksheet.Cells[row, column].Value.ToString() != String.Empty
                                select worksheet.Cells[row, column];
                    try
                    {
                        foreach (var excelCell in cells)
                        {
                            try
                            {
                                if (excelCell.Value.ToString().Equals("[Customer]")) { excelCell.Value = "Customer Name"; }

                            }
                            catch (Exception) { }
                        }

                    }
                    catch (Exception a) { Console.WriteLine(a.Message); }
                }

这是为了设置您要搜索的范围吗?以便您不会搜索空单元格?我需要类似这样的东西吗? - Pomster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接