none
Как открыть Excel в Visual Studio С# RRS feed

  • Вопрос

  • Используя OpenFileDialog надо открыть Excel файл чтоб бы в программе было в виде таблице с помощью DataGridView. Какой код нужен и куда написать его? За ответы благодарю. 

    Под кнопкой OpenFileDialog использовал код ниже

    private void button1_Click(object sender, EventArgs e)
            {
                Stream myStream = null;
                OpenFileDialog openFileDialog1 = new OpenFileDialog();

                openFileDialog1.InitialDirectory = "c:\\";
                openFileDialog1.Filter = "All files (*.*)|*.*";
                openFileDialog1.FilterIndex = 2;
                openFileDialog1.RestoreDirectory = true;

                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    try
                    {
                        if ((myStream = openFileDialog1.OpenFile()) != null)
                        {
                            using (myStream)
                            {
                                // Insert code to read the stream here.
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message);
                    }  

Ответы

  • Добрый день.

    Если нужно открыть файл Excel для редактирования, чтобы там работали ввод, формулы, валидаторы и т.д., то лучше использовать не DataGridView, а какой нибудь существующий контрол. Например, SpreadsheetGear. Если вам нужно просто показать данные из Excel-я, то можно считать данные через Ole и вывести их в DataGridView. Чтение в массив можете посмотреть здесь, ну а показ массива уже дело не хитрое. Если на машине Excel не установлен, то чуть сложнее, работать придется через OpenXML.

    А вот чтение через Stream, это очень сложно. И при наличии указанных выше возможностей - не целесообразно.

    Отвечающий
  • Работайте с ним как с базой данных OLE DB, и сделайте нужную таблицу источником данных DataGridView. Информация о строках соединения здесь: http://www.connectionstrings.com/excel/.

    Нужные классы здесь: https://msdn.microsoft.com/ru-ru/library/system.data.oledb(v=vs.100).aspx

  • Я написал не вЫложите весь текст, а вЛожите текст листа Excel.

    Вы просто должны сделать так:

    1) считать данные с Excel;

    2) создать DataTable;

    3) записать данные в DataTable;

    4) присвоить DataGrid (через Source) DataTable и все.

Все ответы

  • Добрый день.

    Если нужно открыть файл Excel для редактирования, чтобы там работали ввод, формулы, валидаторы и т.д., то лучше использовать не DataGridView, а какой нибудь существующий контрол. Например, SpreadsheetGear. Если вам нужно просто показать данные из Excel-я, то можно считать данные через Ole и вывести их в DataGridView. Чтение в массив можете посмотреть здесь, ну а показ массива уже дело не хитрое. Если на машине Excel не установлен, то чуть сложнее, работать придется через OpenXML.

    А вот чтение через Stream, это очень сложно. И при наличии указанных выше возможностей - не целесообразно.

    Отвечающий
  • Работайте с ним как с базой данных OLE DB, и сделайте нужную таблицу источником данных DataGridView. Информация о строках соединения здесь: http://www.connectionstrings.com/excel/.

    Нужные классы здесь: https://msdn.microsoft.com/ru-ru/library/system.data.oledb(v=vs.100).aspx

  • Добрый день.

    Задание такого создать программу для распечатки аттестатов.

    В моем ситуаций Excel должен попасть в DataGridView (редактировать не надо) и оттуда все данные с Excel на распечатку по определенным местам т.е. эти данные должны ложиться в аттестат.


  • Зачем столько тем наплодил вот тут ответ мой почитай:

    https://social.msdn.microsoft.com/Forums/ru-RU/dfa34661-341d-4000-a63a-15e28de427db/-?forum=programminglanguageru&prof=required

    • Предложено в качестве ответа AlexFV 8 мая 2015 г. 16:22
    • Отменено предложение в качестве ответа AlexFV 9 мая 2015 г. 13:10
  • Добрый день всем. 
    Наконец то нашел код чтоб открылся Excel в DataGridView. Но он открывает только 2 первые столбца и то если есть цифры в этих 2 столбцах то не открывает эту столбца. Что тут не так подскажите. 
    Данные с Excel
    http://www.fotolink.su/v.php?id=afc4...aafec19d907147
    вот так открывает
    http://www.fotolink.su/v.php?id=cd30...2935b6f1156a15

    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Data.OleDb;
    using Excel = Microsoft.Office.Interop.Excel;
    using System;
     
     
    namespace WindowsFormsApplication3
    {
        public partial class Form1 : Form
        {
            private Microsoft.Office.Interop.Excel.Application ObjExcel;
            private Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
            private Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
            private string fileName;
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                
            }
     
            private void openToolStripButton_Click(object sender, EventArgs e)
            {
     
                string str;
                int rCnt;
                int cCnt;
     
                OpenFileDialog opf = new OpenFileDialog();
                opf.Filter = "Файл Excel|*.XLSX;*.XLS";
                opf.ShowDialog();
                System.Data.DataTable tb = new System.Data.DataTable();
                string filename = opf.FileName;
     
                Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel._Workbook ExcelWorkBook;
                Microsoft.Office.Interop.Excel.Worksheet ExcelWorkSheet;
                Microsoft.Office.Interop.Excel.Range ExcelRange;
     
                ExcelWorkBook = ExcelApp.Workbooks.Open(filename, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false,
                    false, 0, true, 1, 0);
                ExcelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ExcelWorkBook.Worksheets.get_Item(1);
     
                ExcelRange = ExcelWorkSheet.UsedRange;
                for (rCnt = 1; rCnt <= ExcelRange.Rows.Count; rCnt++)
                {
                    dataGridView1.Rows.Add(1);
                    for (cCnt = 1; cCnt <= 2; cCnt++)
                    {
                        str = (string)(ExcelRange.Cells[rCnt, cCnt] as Microsoft.Office.Interop.Excel.Range).Value2;
                        dataGridView1.Rows[rCnt - 1].Cells[cCnt - 1].Value = str;
     
                    }
                }
                ExcelWorkBook.Close(true, null, null);
                ExcelApp.Quit();
     
                releaseObject(ExcelWorkSheet);
                releaseObject(ExcelWorkBook);
                releaseObject(ExcelApp);
            }
     
            private void releaseObject(object obj)
            {
                try
                {
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                    obj = null;
                }
                catch (Exception ex)
                {
                    obj = null;
                    MessageBox.Show("Unable to release the object " + ex.ToString());
                }
                finally
                {
                    GC.Collect();
                }
            }
     
        }
    }

    • Объединено YatajgaModerator 8 мая 2015 г. 16:10 дублирование
  • Кажется, Вам уже дали несколько дельных советов в предыдущей теме. Вы же упорно пытаетесь "надеть брюки через голову". Для использования таблицы Excel в качестве источника данных нужно использовать ADO.NET. Ну, почитайте же, наконец, что-нибудь!

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

  • Зачем Вы начали писать циклы, вложите весь лист в DataGrid???
  • да весь текст
  • Я написал не вЫложите весь текст, а вЛожите текст листа Excel.

    Вы просто должны сделать так:

    1) считать данные с Excel;

    2) создать DataTable;

    3) записать данные в DataTable;

    4) присвоить DataGrid (через Source) DataTable и все.