2012-05-22 23 views
0

所以我有winform與listbox和button1(更新),所以當我按下button1它打開excel文件找到我需要的信息,並填充列表框。C#listbox&excel如何刪除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行中的所有信息。

回答

1

您可以使用WorksheetFunction.Match函數來獲取用戶所在的行,並從那裏您應該能夠刪除該行。

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

參數

ARG1 類型:System.Object Lookup_Array中 - 的價值,你用它來找到你在表中所需的值。

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,它是第三排,所以你實際上想要刪除的行是4.得到這些東西的帳戶。你可以在你的範圍內包括A1,並且在大多數情況下可以工作。

+0

嗯,謝謝。 – user1396678

+1

如果它有效,你會介意將此標記爲答案嗎?不客氣。 – seekerOfKnowledge