예제 #1
0
        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("シート名の取得失敗");
                }
            }
        }
예제 #2
0
        //検索処理の実装
        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++;
                }
            }
        }