繁体   English   中英

将值添加到<list>从 excel 细胞范围</list>

[英]Adding a value to <List> from range of excel cells

数据取自 Excel,使用 ClosedXML。 问题是我不知道列中有多少值。 也许5个,也许更多。 因此,我希望 ClosedXML 考虑范围内所有填充的单元格并将它们添加到列表中。 这是我的代码现在的样子:我从每个单元格中手动获取值。

var tasks = workbook.Worksheet(1);
Tasks = new List<Task>()
                        {
                            new Task()
                            {
                                TaskName = tasks.Cell("A2").GetFormattedString(),
                                TaskStart = tasks.Cell("B2").GetFormattedString(),
                                TaskEnd = tasks.Cell("C2").GetFormattedString(),
                                TaskStatus = tasks.Cell("D2").GetFormattedString()
                            },
                            new Task()
                            {
                                TaskName = tasks.Cell("A3").GetFormattedString(),
                                TaskStart = tasks.Cell("B3").GetFormattedString(),
                                TaskEnd = tasks.Cell("C3").GetFormattedString(),
                                TaskStatus = tasks.Cell("D3").GetFormattedString()
                            }}

您可以检查您的单元格中是否有内容,如果为真则添加任务。 由于列是线性的,因此增加一个计数器并将其用作单元名称的一部分。

var tasks = workbook.Worksheet(1);
var Tasks = new List<Task>();
int loopCount = 2; //your starting row

while(tasks.Cell("A" + loopCount).GetFormattedString().Length > 0)
{
    Tasks.Add(new Task()
    {
        TaskName = tasks.Cell("A" + loopCount).GetFormattedString(),
        TaskStart = tasks.Cell("B" + loopCount).GetFormattedString(),
        TaskEnd = tasks.Cell("C" + loopCount).GetFormattedString(),
        TaskStatus = tasks.Cell("D" + loopCount).GetFormattedString()
    }
    loopCount++;
}

我希望这很清楚,并可以帮助您朝着正确的方向前进。

我的建议是使用 LINQ 并遍历ws.FirstCell().CurrentRegion.RowsUsed()集合。

using (var wb = new XLWorkbook("test2.xlsx"))
{
    var ws = wb.Worksheets.First();

    var tasks = ws.FirstCell().CurrentRegion.RowsUsed()
        .Select(row => new Task()
        {
            TaskName = row.Cell(1).GetFormattedString(),
            TaskStart = row.Cell(2).GetFormattedString(),
            TaskEnd = row.Cell(3).GetFormattedString(),
            TaskStatus = row.Cell(4).GetFormattedString()
        })
        .ToList();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM