0

所以我有带有列表框和按钮1(更新)的winform,所以当我按下按钮1时,它会打开excel文档找到我需要的信息并填充列表框。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;



namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            string FName = @"c:\TEST\data.xlsx";
            var excelApp = new Excel.Application();
            excelApp.Visible = true;

            Excel.Workbook excelbk = excelApp.Workbooks._Open(FName,
               Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
               Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
               Type.Missing, Type.Missing);

            Excel.Worksheet xlSht = (Excel.Worksheet)excelbk.Worksheets["Sheet1"];

            //find Column Number
            //Now find Test in Row 1
            Excel.Range column = (Excel.Range)xlSht.Columns[1, Type.Missing];
            string FindWhat = "name";
            bool MatchCase = true;

            Excel.Range FindResults = column.Find(FindWhat, Type.Missing,
                Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlWhole,
                Excel.XlSearchOrder.xlByColumns, Excel.XlSearchDirection.xlNext,
                MatchCase, Type.Missing, Type.Missing);


            int colNumber = FindResults.Column;

            //Get Last Row of Data
            Excel.Range xlRange = (Excel.Range)xlSht.get_Range("A" + xlSht.Rows.Count, Type.Missing);
            int LastRow = xlRange.get_End(Microsoft.Office.Interop.Excel.XlDirection.xlUp).Row;

            //start update
            listBox1.BeginUpdate();

            //read data into form
            string CellData;
            for (int RowCount = 2; RowCount <= LastRow; RowCount++)
            {
                xlRange = (Excel.Range)xlSht.Cells[RowCount, colNumber];
                CellData = (string)xlRange.Text;
                listBox1.Items.Add(CellData);

            }

            //end update
            listBox1.EndUpdate();

            object SaveChanges = (object)false;
            excelbk.Close(SaveChanges, Type.Missing, Type.Missing);
            excelApp.Quit();
            excelApp = null;
        }

    }
}

我现在要做的是删除按钮,以便用户选择其中一个名称,然后删除按钮删除具有所选名称的行中的所有信息,例如单元格 A2 包含列表框中显示的名称,当用户点击删除按钮时,它会删除所有第 2 行的信息。

4

1 回答 1

1

您可以找到使用 WorksheetFunction.Match 函数来获取用户所在的行,并且从那里您应该能够删除该行。

double Match(
    Object Arg1, 
    Object Arg2, 
    Object Arg3
)

参数

Arg1 类型:System.Object Lookup_value - 用于在表中查找所需值的值。

Arg2 类型:System.Object Lookup_array - 包含可能查找值的连续单元格范围。Lookup_array 必须是数组或数组引用。

Arg3 类型:System.Object Match_type - 数字 -1、0 或 1。Match_type 指定 Microsoft Excel 如何将 lookup_value 与 lookup_array 中的值进行匹配。

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.worksheetfunction.match.aspx

额外的东西:本着更有帮助的精神,假设您的 Excel 工作表在第一行有列标题,在第一列有名称,从第 2 行开始。所以像,

第 1 行:名称

第 2 行:史蒂夫

第 3 行:约翰

第 4 行:亚当

第 5 行:兰迪

如果使用Match("Adam", A2:A5, 0),则返回值为 3,因为在您的 A2:A5 范围内,它是第 3 行,因此您实际要删除的行是 4。必须考虑这些事情。您可以在您的范围中包含 A1,这在大多数情况下都可以使用。

于 2012-05-22T13:56:34.830 回答