как сделать текстовое поле с текстовым поиском для Excel c#? с другим заголовком столбца на каждом листе - PullRequest
0 голосов
/ 22 января 2020

Привет, я создаю программное обеспечение, которое может открыть любой файл Excel, чтобы экспортировать его, особенно c информацию в слово, для печати после этого, но у меня возникли проблемы с поиском.

Мой код до сих пор выглядит следующим образом

 private void button1_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog ofd = new OpenFileDialog() { Filter = "Excel Woorbook 97-2003|*.xls|Excel Woorbook|*.xlsx", ValidateNames = true })
            {
                if (ofd.ShowDialog() == DialogResult.OK)
                {
                    FileStream fs = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read);
                    IExcelDataReader reader;
                    if (ofd.FilterIndex == 1)
                        reader = ExcelReaderFactory.CreateBinaryReader(fs);
                    else
                        reader = ExcelReaderFactory.CreateOpenXmlReader(fs);
                    reader.IsFirstRowAsColumnNames = true;
                    result = reader.AsDataSet();
                    comboBox1.Items.Clear();
                    foreach (DataTable dt in result.Tables)
                        comboBox1.Items.Add(dt.TableName);
                    reader.Close();

                }
            }
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            dataGridView1.DataSource = result.Tables[comboBox1.SelectedIndex];
        }


он открывает любой Excel и показывает листы, теперь мой код поиска работает, и у меня есть оба, но я не могу заставить их работать вместе

(dataGridView1.DataSource as DataTable).DefaultView.RowFilter = string.Format("Nombres LIKE '{0}%'", textBox1.Text);

первый Мне нужно указать имя столбца, который, поскольку у меня есть практические навыки, у меня есть лист с именами в столбцах, но моя проблема в том, что на другом листе нет заданного имени, в качестве имени у него есть только «column0», Перечислите от 0 до 6, но у меня тоже есть поиск, и он работает

 StringBuilder filtro = new StringBuilder();
               for (int i = 0; i < dataGridView1.Columns.Count; i++)
               {
                   if (string.IsNullOrEmpty(filtro.ToString()))
                   {
                       filtro.Append($"{dataGridView1.Columns[i].Name} LIKE '{textBox1.Text}%'");
                   }
                   else
                   {

                       filtro.Append(" OR ");
                       filtro.Append($"{dataGridView1.Columns[i].Name} LIKE '{textBox1.Text}%'");
                   }
               }

, которые работают для листа с "столбцом" и числом в качестве имени, но не могут работать с другими, что почему я думаю, что есть способ найти любой столбец любого Excel независимо от имени? столбцы в названии * 1 018 *

второй с нормальным именем в столбцах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...