/// <summary> /// Импорт из екселя в datagridview /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Import_Click(object sender, EventArgs e) { // очистка перед вызовом dgvExcel.DataSource = null; dgvExcel.Columns.Clear(); dgvExcel.Rows.Clear(); OpenFileDialog opf = new OpenFileDialog { Filter = "Excel Files|*.xls;*.xlsx;*.xlsm", InitialDirectory = (s) }; opf.ShowDialog(); string filename = opf.FileName; if (filename != "") { #region Загрузка из Екселя в новый грид try { FileStream stream = File.Open(filename, FileMode.Open, FileAccess.Read); Excel.IExcelDataReader IEDR; int fileformat = opf.SafeFileName.IndexOf(".xlsx"); if (fileformat > -1) { IEDR = Excel.ExcelReaderFactory.CreateOpenXmlReader(stream); } else { IEDR = Excel.ExcelReaderFactory.CreateBinaryReader(stream); } IEDR.IsFirstRowAsColumnNames = true; DataSet ds = IEDR.AsDataSet(); System.Data.DataTable dt = ds.Tables[0]; dgvExcel.DataSource = dt; IEDR.Close(); dgvExcel.Columns[1].DefaultCellStyle.Format = "0.000###"; } catch (Exception load) { MessageBox.Show(load.ToString(), "Уведомление", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } #endregion } else { MessageBox.Show("Не выбран файл для загрузки.", "Уведомление", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } opf.RestoreDirectory = true; }
public void LoadExclelFile() { /*** * метод загружает файл Excel в datagridview * здесь же вызывается форма выбора листа * и установление флажка "в первой строке - имена стролбцов" ***/ OpenFileDialog ofd = new OpenFileDialog(); //ofd.DefaultExt = "*.xls;*.xlsx"; ofd.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm"; ofd.Title = "Выберите документ для загрузки данных"; if (ofd.ShowDialog() == DialogResult.OK) { try { System.IO.FileStream stream = System.IO.File.Open(ofd.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); Excel.IExcelDataReader IEDR; int fileformat = ofd.SafeFileName.IndexOf(".xlsx"); if (fileformat > -1) { //2007 format *.xlsx IEDR = Excel.ExcelReaderFactory.CreateOpenXmlReader(stream); } else { //97-2003 format *.xls IEDR = Excel.ExcelReaderFactory.CreateBinaryReader(stream); } DataSet ds = IEDR.AsDataSet(); int tables_count = ds.Tables.Count; //количество таблиц в файле string tables_names = ""; // имена таблиц for (int i = 0; i < tables_count; i++) { tables_names += ds.Tables[i].TableName + ","; // собираем имена } ExcelFileSettings.Add("tables_count", tables_count.ToString()); // заполняем данные ExcelFileSettings.Add("tables_names", tables_names); ExcelFileSettings.Add("file_name", ofd.SafeFileName); new LoadExcelFileSettings(this).ShowDialog(); // открываем новое окно настроек загрузки файла //Если данное значение установлено в true //то первая строка используется в качестве //заголовков для колонок if (ExcelFileSettings["checked_heads"] == "1") { IEDR.IsFirstRowAsColumnNames = true; } else { IEDR.IsFirstRowAsColumnNames = false; } int checked_table = 0; // номер выбранного листа checked_table = Convert.ToInt32(ExcelFileSettings["checked_table"]); // получаем этот номер DataSet ds1 = IEDR.AsDataSet(); //Устанавливаем в качестве источника данных dataset //с указанием номера таблицы. Номер таблицы указавает //на соответствующий лист в файле нумерация листов //начинается с нуля. try { dataGridView1.Columns.Clear(); dataGridView1.DataSource = ds1.Tables[checked_table]; // рисуем выбранный лист CleanNullRowsColumns(); // // richTextBox1.Text += "Открыт файл: " + ofd.SafeFileName + "\n"; label1.Text = "Путь к файлу: " + ofd.FileName; } catch { } IEDR.Close(); ExcelFileSettings.Clear(); UpdateForm(); } catch { MessageBox.Show("Произошла ошибка при загрузке файла. Проверьте, не открыт ли у Вас загружаемый документ.");//обработка всех исключений (например, если файл открыт а Экселе) } } else { MessageBox.Show("Вы не выбрали файл для открытия", "Загрузка данных...", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void button1_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.DefaultExt = "*.xls;*.xlsx"; ofd.Filter = "Excel 2003(*.xls)|*.xls|Excel 2007(*.xlsx)|*.xlsx"; ofd.Title = "Выберите документ для загрузки данных"; if (ofd.ShowDialog() == DialogResult.OK) { textBox1.Text = ofd.FileName; FileStream stream = File.Open(ofd.FileName, FileMode.Open, FileAccess.Read); Excel.IExcelDataReader IEDR; int fileformat = ofd.SafeFileName.IndexOf(".xlsx"); if (fileformat > -1) { //2007 format *.xlsx IEDR = Excel.ExcelReaderFactory.CreateOpenXmlReader(stream); } else { //97-2003 format *.xls IEDR = Excel.ExcelReaderFactory.CreateBinaryReader(stream); } //Если данное значение установлено в true //то первая строка используется в качестве //заголовков для колонок IEDR.IsFirstRowAsColumnNames = true; ds = IEDR.AsDataSet(); // выводим названия всех таблиц //foreach(DataTable dt in ds.Tables) //{ // MessageBox.Show(dt.TableName); //} //Устанавливаем в качестве источника данных dataset //с указанием номера таблицы. Номер таблицы указавает //на соответствующий лист в файле нумерация листов //начинается с нуля. dataGridView1.DataSource = ds.Tables[0]; IEDR.Close(); // выбираем из DataSet только столбец Автор IEnumerable <string> query = from book in ds.Tables[0].AsEnumerable() select book.Field <string>("Автор"); // При помощи метода Distinct() удаляем повторяющиеся значения из запроса IEnumerable <string> distinctNames = query.Distinct(); // Занесли значения в combobox1 comboBox1.Items.AddRange(distinctNames.ToArray()); // выбираем из DataSet только столбец Год издания IEnumerable <double> query1 = from book in ds.Tables[0].AsEnumerable() select book.Field <double>("Год издания"); // При помощи метода Distinct() удаляем повторяющиеся значения из запроса IEnumerable <double> distinctY = query1.Distinct(); // Занесли значения в combobox3 //comboBox3.Items.AddRange(distinctY.ToArray()); foreach (double year in distinctY) { comboBox3.Items.Add(year); } //foreach (string name in distinctNames) //{ // MessageBox.Show(name); //} } else { MessageBox.Show("Вы не выбрали файл для открытия", "Загрузка данных...", MessageBoxButtons.OK, MessageBoxIcon.Error); } }