C# listbox & excel 如何删除 excel 中的信息

本文关键字:excel 删除 信息 何删除 listbox amp | 更新日期: 2023-09-27 18:34:53

所以我用列表框和按钮1(更新(通知,所以当我按按钮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 行中的所有信息。

C# listbox & excel 如何删除 excel 中的信息

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

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

参数

参数1类型:系统对象Lookup_value - 用于在表中查找所需值的值。

参数2类型:系统对象Lookup_array - 包含可能的查找值的连续单元格区域。Lookup_array必须是数组或数组引用。

Arg3类型:系统对象Match_type - 数字 -1、0 或 1。Match_type指定 Excel Microsoft如何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,这在大多数情况下都有效。