【问题标题】:C# - Excel: Delete Row, depending on value in first ColumnC# - Excel:删除行,取决于第一列中的值
【发布时间】:2011-11-21 13:19:25
【问题描述】:

想象一下,你有 A 列。 有 100 行,单元格中有数字,例如 1、2、3 直到 100..

如何以编程方式 (C#) 删除特定行,例如:删除行 A 列中的值为 5..

我正在使用 Microsoft.Office.Interop.Excel,这就是相关代码:

        Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
        Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"C:\Users\fre\Desktop\TestDatei.xls");
        Microsoft.Office.Interop.Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];
        Microsoft.Office.Interop.Excel.Range xlRange = xlWorksheet.UsedRange;

        xlWorksheet.Select(Type.Missing);
        Microsoft.Office.Interop.Excel.Range range = xlWorksheet.get_Range("B1:B5", Type.Missing);
        range.Delete(Microsoft.Office.Interop.Excel.XlDeleteShiftDirection.xlShiftUp);

【问题讨论】:

    标签: c# excel row


    【解决方案1】:

    因为我也很感兴趣,所以我在网上做了一些调查并创建了一些示例代码。也许这可以帮助你:

        private void DeleteCells(object sender, EventArgs e)
        {
            // create excel-instance:
            Excel.Application excel = new Excel.Application();
            // open the concrete file:
            Excel.Workbook excelWorkbook = excel.Workbooks.Open(@"D:\test.xls");
            // select worksheet. NOT zero-based!!:
            Excel._Worksheet excelWorkbookWorksheet = excelWorkbook.Sheets[1];
            // create a range:
            Excel.Range usedRange = excelWorkbookWorksheet.UsedRange;
    
            // iterate range
            foreach (Excel.Range r in usedRange)
            {
                // check condition:
                if (r.Value2 == 5.0F)
                    // if match, delete and shift remaining cells up:
                    r.Delete(Excel.XlDeleteShiftDirection.xlShiftUp);
            }
    
            // save changes (!!):
            excelWorkbook.Save();
    
            // cleanup:
            if (excel != null)
            {
                Process[] pProcess;
                pProcess = System.Diagnostics.Process.GetProcessesByName("Excel");
                pProcess[0].Kill();
            }
        }
    

    你好!

    詹斯

    【讨论】:

    • thx 我会尽快尝试并提供一些反馈
    • 欢迎您 :-) 我忘了提及两件事:如果您想知道那里发生了什么,我将 Excel 添加为别名,而不是 using 语句。其次,该表仅包含列 A 中的数字 1 到 100,仅此而已,但对于快速测试,我认为没关系;-) 如果情况不同,也许您必须更改有关范围的东西...
    • 如果不是第一列而是第五列,我想检查它是“A”还是“B”怎么办?
    • 执行上述代码时,r.Value2 == 5.0F 出现错误
    【解决方案2】:

    如果你想删除整行,试试这个吧

    Range usedRanage=sheet.UsedRange;
    foreach (Range r in usedRanage) 
    {
        if (Convert.ToString(r.Value2)=="RETRIEVE") 
        {
            r.EntireRow.Delete(XlDeleteShiftDirection.xlShiftUp);
        }
    }
    

    【讨论】:

    • 如果该行被删除,foreach 会立即转到下一行吗?我的失败是因为它继续在同一行......
    • 我的只是继续我刚刚删除的行中的列...stackoverflow.com/questions/41170869/…
    猜你喜欢
    • 1970-01-01
    • 2021-04-06
    • 2021-04-21
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多