C# listbox y excel ¿cómo eliminar información en excel?

Así que tengo winform con el cuadro de lista y el botón 1 (actualizar), así que cuando presiono el botón 1, abre el documento de Excel, encuentra la información que necesito y llena el cuadro de lista.

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;
        }

    }
}

Lo que quiero hacer ahora, botón Eliminar, para que el usuario seleccione uno de los nombres y para el botón Eliminar elimine toda la información en la fila con el nombre seleccionado, por ejemplo, la celda A2 contiene el nombre que se muestra en el cuadro de lista, cuando el usuario presiona el botón Eliminar, elimina todo información en la fila 2.

preguntado el 22 de mayo de 12 a las 14:05

1 Respuestas

Puede encontrar el uso de la función WorksheetFunction.Match para obtener la fila en la que se encuentra un usuario, y desde allí debería poder eliminar esa fila.

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

parámetros

Arg1 Tipo: System.Object Lookup_value: el valor que usa para encontrar el valor que desea en una tabla.

Arg2 Tipo: System.Object Lookup_array: un rango contiguo de celdas que contienen posibles valores de búsqueda. Lookup_array debe ser una matriz o una referencia de matriz.

Arg3 Tipo: System.Object Match_type: el número -1, 0 o 1. Match_type especifica cómo Microsoft Excel hace coincidir el valor_buscado con los valores de matriz_buscada.

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

Cosas extra: con el espíritu de ser más útil, digamos que su hoja de Excel tiene encabezados de columna en la primera fila y los nombres en la primera columna, comenzando en la fila 2. Así que algo así como,

Fila 1: Nombre

Fila 2: Steve

Fila 3: Juan

Fila 4: Adán

Fila 5: Randy

Si usaste Match("Adam", A2:A5, 0), el valor devuelto sería 3, porque dentro de su rango de A2:A5, era la tercera fila, por lo que la fila que realmente querrá eliminar es 3. Debe tener en cuenta este tipo de cosas. Podría incluir A4 en su rango, y eso podría funcionar en la mayoría de los casos.

Respondido el 20 de junio de 20 a las 10:06

Si funciona, ¿te importaría marcar esto como la respuesta? Y eres bienvenido. - BuscadorDeConocimiento

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.