【问题标题】:Loop on excel rows in different Excel worksheets C#在不同的Excel工作表中循环Excel行C#
【发布时间】:2020-10-23 15:38:29
【问题描述】:

我有一个包含多个工作表的 excel 文件 myexcel.xlsx。所有工作表在第一行中具有相同的列名。一列称为 ID,另一列称为 Total。我正在浏览每个工作表中的每一行,然后我想知道如果列 ID 存在于同一工作表或其他工作表的任何其他行中,我该如何检查它。如果在其他地方找不到 ID,则总数将仅等于该行的 Total 列,但如果相同/其他工作表的另一行中存在相同的 ID,那么我想添加另一行的 Total 列然后在 for 循环中忽略所有这些具有相同 ID 的行,以免它们重复。

            Excel.Application myapp = new Excel.Application();
            Excel.Workbook myworkbook = myapp(@"myexcel.xlsx");
            for (int i = 1; i <= myworkbook.Worksheets.Count; i++)
            {
                Excel._Worksheet myworksheet = myworkbook.Worksheets[i];
                Excel.Range myrange = myworksheet.UsedRange;
                int myrowCount = myrange.Rows.Count;
            }

【问题讨论】:

  • 您需要澄清“然后忽略所有这些具有相同 ID 的行”的意思是指您只想在每个工作表中使用该 ID 一次吗?你说忽略,但你说还要跟踪工作表中相同 ID 的总数。
  • 我会考虑把它分成两个问题。一个是创建某种可以保存这些数据的类,并编写代码来读取电子表格中的所有数据。也许你最终得到了一些对象的两个列表。然后分别弄清楚如何对数据进行操作。你正在做的事情会奏效,但更难,因为你要同时解决两件事。

标签: c# excel


【解决方案1】:

我不知道使用 Excel 工作表的正确语法,所以我会给你一个基本的例子来说明我认为你在问什么。您必须调整代码以使其正常工作,但如果您想在具有相同“ID”的所有行中汇总(获取总和),您应该能够执行以下操作:

var totalsDictionary = new Dictionary<int, int>();

for (var ws = 0; ws < worksheets.Count; ws++)
{
    var worksheet = worksheets[ws];
    for (var row = 0; row < worksheet.Rows.Count; row++)
    {
        var id = worksheet.Rows[row]["ID"];
        var total = worksheet.Rows[row]["Total"];
        if (totalsDictionary.ContainsKey(id))
        {
            totalsDictionary[id] += total;
        }
        else
        {
            totalsDictionary.Add(id, total);
        }
    }
}

// totalsDictionary now contains the sum of Totals for each ID

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    相关资源
    最近更新 更多