【问题标题】:Searching multiple sheets in an excel C#在excel C#中搜索多个工作表
【发布时间】:2016-10-07 04:32:05
【问题描述】:

这里的代码在我的列表框(employeebox) 中获取一个名称并删除该工作表上的整行。这有效,没有错误。我的问题是我有 19 个不同的工作表需要检查,但我只能用这段代码一次检查 1 个。“Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook .Worksheets[2];".. 有什么方法可以在单击“删除”按钮后检查所有工作表?我非常感谢任何人的帮助。

private void delete_Click(object sender, EventArgs e)
{
    //create excel
    Excel.Application xlexcel = new Excel.Application();
    Excel.Workbook xlWorkBook = xlexcel.Workbooks.Open(@"C:\\SAMPLE.xlsx");
    Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets[2];

    //search within excel
    Excel.Range usedRanage = xlWorkSheet.UsedRange;
    foreach (Excel.Range row in usedRanage)
    {
        //grab name once selected in box
        if (employeeBox.SelectedItem.Equals(row.Value))
        {
            row.EntireRow.Delete(Excel.XlDeleteShiftDirection.xlShiftUp);

            MessageBox.Show("Employee Deleted.");
        }

    }

    xlexcel.DisplayAlerts = false;

    xlWorkBook.SaveAs("C:\\SAMPLE.xlsx", Excel.XlFileFormat.xlWorkbookDefault, Type.Missing,
    Type.Missing, false, false, Excel.XlSaveAsAccessMode.xlNoChange,
    Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

    xlWorkBook.Close();
    xlexcel.Quit();

    releaseObject(xlexcel);
    releaseObject(xlWorkBook);
    releaseObject(xlWorkSheet);
}

【问题讨论】:

  • 从一张到另一张有什么问题?
  • 您好,我只是一个有趣的编码员...您将不得不遍历工作簿中的所有现有工作表...类似于.... foreach(Excel.Worksheet 工作表在工作簿.工作表)
  • @DangerZone - 代码太多了。
  • 您好! @JohnG 我也是这么想的.. 哪个读起来像行正确?
  • 如果代码太多,请将其分解为另一种方法,以便您可以重复它...循环您的工作表以执行相同的事情不应该采取“方式太很多”你所做的额外代码。

标签: c# excel visual-studio listbox


【解决方案1】:
    private void delete_Click(object sender, EventArgs e)
    {
        //create excel
        Excel.Application xlexcel = new Excel.Application();
        Excel.Workbook xlWorkBook = xlexcel.Workbooks.Open(@"C:\\SAMPLE.xlsx");
        int[] Cols = { 1 };
        Excel.Range curRange;

        foreach (Excel.Worksheet sheet in xlWorkBook.Worksheets)
        {
            foreach (Excel.Range row in sheet.UsedRange.Rows)
            {
                foreach (int c in Cols)
                {
                    curRange = (Excel.Range)row.Cells[1, 1];
                    if (curRange.Cells.Value != null)
                    {      
                         if (employeeBox.SelectedItem.Equals(sheet.Cells[row.Row, c].Value.ToString()))
                         { 
                            row.EntireRow.Delete(Excel.XlDeleteShiftDirection.xlShiftUp);

                            MessageBox.Show("Employee Deleted.");
                         }
                    }
                }
            }
        }
             xlexcel.DisplayAlerts = false;

            xlWorkBook.SaveAs("C:\\SAMPLE.xlsx", Excel.XlFileFormat.xlWorkbookDefault, Type.Missing,
            Type.Missing, false, false, Excel.XlSaveAsAccessMode.xlNoChange,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

            xlWorkBook.Close();
            xlexcel.Quit();

            releaseObject(xlexcel);
            releaseObject(xlWorkBook);


    }

【讨论】:

  • 这行得通..遍历所有表格,然后删除我选择的那个。
猜你喜欢
  • 2020-09-19
  • 1970-01-01
  • 2020-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 2019-01-27
相关资源
最近更新 更多