private void listView1_SelectedIndexChanged(object sender, EventArgs e) { //項目が1つも選択されていない場合 if (listView1.SelectedItems.Count == 0) { listView2.Items.Clear(); return;//処理を抜ける } //StatusStripにファイル名までのFullPathを表示 selectedFilePath = textBox1.Text + "\\" + listView1.SelectedItems[0].Text; toolStripStatusLabel1.Text = selectedFilePath; //listView2の更新 listView2.Items.Clear(); //Excelファイルの場合 if (isXLS(selectedFilePath)) { //シート名の取得 MyExcelSheets xls = new MyExcelSheets(selectedFilePath); List <string> sheets = xls.sheetsNameList; if (sheets != null) { //listView2に追加 foreach (string sh in sheets) { listView2.Items.Add(sh); } } else { listView2.Items.Add("シート名の取得失敗"); } } }
//検索処理の実装 private void searchSheet(object sender, DoWorkEventArgs e) { //OR検索用にキーワードをトークンに分割 char [] sep = { ' ', ' ' };//半角、全角空白 string[] keywords = search_keyword.Split(sep, StringSplitOptions.RemoveEmptyEntries); if (keywords.Length == 0) { DialogResult ret = MessageBox.Show("キーワードが空白です。シート名一覧を取得しますか?", "確認", MessageBoxButtons.YesNo); if (ret == DialogResult.Yes) { keywords = new string[] { "" }; } else { e.Cancel = true; return; } } //ここから検索開始 // senderの値はbgWorkerの値と同じ BackgroundWorker worker = (BackgroundWorker)sender; //ListView3要素追加用デリゲート AddListView3ItemDelegate dlg = new AddListView3ItemDelegate(addListView3Item); //xlsファイルのリスト取得 List <string> xlsList = new List <string>(); if (getAllXlsList(search_path, xlsList, sender, e)) { int counter = 0; int listsize = xlsList.Count; //すべてのxlsファイルについて foreach (string xlsFile in xlsList) { // キャンセルされてないか定期的にチェック if (worker.CancellationPending) { e.Cancel = true; return; } //進捗状況報告 worker.ReportProgress((int)(counter * 100 / listsize)); //検索中のレスポンス向上のため待機中の他のスレッドを優先する System.Threading.Thread.Sleep(0); //ファイル名との比較 if (isMatchOR(new FileInfo(xlsFile).Name.ToLower(), keywords)) { //一致した場合ListViewに追加 ListViewItem item = new ListViewItem(new FileInfo(xlsFile).Name); item.SubItems.Add("<ファイル名に一致>"); item.SubItems.Add(xlsFile); //listView3.Items.Add(item); this.Invoke(dlg, new object[] { item });//デリゲート経由で追加 } //シート名の列挙 MyExcelSheets xls = new MyExcelSheets(xlsFile); if (xls != null) { if (xls.sheetsNameList != null) { foreach (string sheet_name in xls.sheetsNameList) { //シート名の比較(大文字小文字無視、部分一致) if (isMatchOR(sheet_name.ToLower(), keywords)) { //一致した場合ListViewに追加 ListViewItem item = new ListViewItem(new FileInfo(xlsFile).Name); item.SubItems.Add(sheet_name); item.SubItems.Add(xlsFile); //listView3.Items.Add(item); this.Invoke(dlg, new object[] { item });//デリゲート経由で追加 } } } else if (!is_ignore_error) { //シート名の取得に失敗 //ListViewに追加 ListViewItem item = new ListViewItem(new FileInfo(xlsFile).Name); item.SubItems.Add("<シート名の取得失敗>"); item.SubItems.Add(xlsFile); //listView3.Items.Add(item); this.Invoke(dlg, new object[] { item });//デリゲート経由で追加 } } counter++; } } }