在EPPlus中使用ExcelRange.ToArray<>()时遇到问题

时间:2016-11-19 12:44:13

标签: c# epplus toarray

我正在使用EPPlus,似乎无法获得ToArray<>工作方法。我试图在工作表中提取列标题的字符串变量数组。

我的代码......

    public static string[] GetWshHeaders(string WbkNm)
    {
        using (ExcelPackage package = new ExcelPackage(new FileInfo(WbkNm)))
        {
            ExcelWorksheet wsData = package.Workbook.Worksheets.First();
            int noHdrs = wsData.Dimension.Columns;
            ExcelRange hdrs = wsData.Cells[1, 1, 1, noHdrs];
            string[] wsHdrs = hdrs.ToArray<string>();
            return wsHdrs;
        }
    }

Intellisense标记行字符串[]中的hdrs变量wsHdrs = hdrs.ToArray();.消息是:&#39; ExcelRange&#39;不包含ToArray&#39;的定义和最好的扩展方法重载&#39; Enumerable.ToArray(IEnumerable)&#39;需要一个类型为“IEnumerable”的接收器。

我已经使用了上述代码的任意数量的变体,但是,如果我找到了正确的语法,我就不会发布这个问题。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

ExcelRangeExcelRangeBase作为基类,声明列表如下:

public class ExcelRangeBase : ExcelAddress, IExcelCell, IDisposable, IEnumerable<ExcelRangeBase>, IEnumerator<ExcelRangeBase>
{
....
}

因此,您尝试使用Linq进行从IEnumerable<ExcelRangeBase>String[]的隐式转换,这将无效。您需要使用Select来获取每个范围对象的Value属性。由于每个Value属性的类型为Object,因此您需要调用其ToString()方法:

string[] wsHdrs = hdrs
    .Select(erb => erb.Value.ToString())
    .ToArray();

上面将为您提供您正在寻找的字符串数组,但请记住,您正在丢失信息,因为Value可以是数字类型和字符串的混合。如果您只对打印内容感兴趣,则不成问题。如果你打算以某种方式将它们写回来,那么你将把所有东西都当作字符串。