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

    }
}

私が今やりたいことは、ボタンを削除して、ユーザーが名前の1つを選択し、削除ボタンの場合、選択した名前の行のすべての情報を削除することです。たとえば、セル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 に答える