Лучший отвечающий
Как открыть Excel в Visual Studio С#

Вопрос
-
Используя 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);
}
- Изменено Анваро 8 мая 2015 г. 5:02
5 мая 2015 г. 6:08
Ответы
-
Добрый день.
Если нужно открыть файл Excel для редактирования, чтобы там работали ввод, формулы, валидаторы и т.д., то лучше использовать не DataGridView, а какой нибудь существующий контрол. Например, SpreadsheetGear. Если вам нужно просто показать данные из Excel-я, то можно считать данные через Ole и вывести их в DataGridView. Чтение в массив можете посмотреть здесь, ну а показ массива уже дело не хитрое. Если на машине Excel не установлен, то чуть сложнее, работать придется через OpenXML.
А вот чтение через Stream, это очень сложно. И при наличии указанных выше возможностей - не целесообразно.
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 5 июня 2015 г. 6:47
5 мая 2015 г. 7:32Отвечающий -
Работайте с ним как с базой данных OLE DB, и сделайте нужную таблицу источником данных DataGridView. Информация о строках соединения здесь: http://www.connectionstrings.com/excel/.
Нужные классы здесь: https://msdn.microsoft.com/ru-ru/library/system.data.oledb(v=vs.100).aspx
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 5 июня 2015 г. 6:47
5 мая 2015 г. 7:40 -
Я написал не вЫложите весь текст, а вЛожите текст листа Excel.
Вы просто должны сделать так:
1) считать данные с Excel;
2) создать DataTable;
3) записать данные в DataTable;
4) присвоить DataGrid (через Source) DataTable и все.
- Предложено в качестве ответа AlexFV 9 мая 2015 г. 13:10
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 5 июня 2015 г. 6:47
9 мая 2015 г. 13:09
Все ответы
-
Добрый день.
Если нужно открыть файл Excel для редактирования, чтобы там работали ввод, формулы, валидаторы и т.д., то лучше использовать не DataGridView, а какой нибудь существующий контрол. Например, SpreadsheetGear. Если вам нужно просто показать данные из Excel-я, то можно считать данные через Ole и вывести их в DataGridView. Чтение в массив можете посмотреть здесь, ну а показ массива уже дело не хитрое. Если на машине Excel не установлен, то чуть сложнее, работать придется через OpenXML.
А вот чтение через Stream, это очень сложно. И при наличии указанных выше возможностей - не целесообразно.
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 5 июня 2015 г. 6:47
5 мая 2015 г. 7:32Отвечающий -
Работайте с ним как с базой данных OLE DB, и сделайте нужную таблицу источником данных DataGridView. Информация о строках соединения здесь: http://www.connectionstrings.com/excel/.
Нужные классы здесь: https://msdn.microsoft.com/ru-ru/library/system.data.oledb(v=vs.100).aspx
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 5 июня 2015 г. 6:47
5 мая 2015 г. 7:40 -
Добрый день.
Задание такого создать программу для распечатки аттестатов.
В моем ситуаций Excel должен попасть в DataGridView (редактировать не надо) и оттуда все данные с Excel на распечатку по определенным местам т.е. эти данные должны ложиться в аттестат.
5 мая 2015 г. 10:54 -
Зачем столько тем наплодил вот тут ответ мой почитай:
https://social.msdn.microsoft.com/Forums/ru-RU/dfa34661-341d-4000-a63a-15e28de427db/-?forum=programminglanguageru&prof=required
5 мая 2015 г. 16:54 -
Добрый день всем.
Наконец то нашел код чтоб открылся Excel в DataGridView. Но он открывает только 2 первые столбца и то если есть цифры в этих 2 столбцах то не открывает эту столбца. Что тут не так подскажите.
Данные с Excel
http://www.fotolink.su/v.php?id=afc4...aafec19d907147
вот так открывает
http://www.fotolink.su/v.php?id=cd30...2935b6f1156a15using 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 дублирование
8 мая 2015 г. 11:20 -
Кажется, Вам уже дали несколько дельных советов в предыдущей теме. Вы же упорно пытаетесь "надеть брюки через голову". Для использования таблицы Excel в качестве источника данных нужно использовать ADO.NET. Ну, почитайте же, наконец, что-нибудь!
Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!
8 мая 2015 г. 16:05 -
Зачем Вы начали писать циклы, вложите весь лист в DataGrid???8 мая 2015 г. 16:25
-
да весь текст9 мая 2015 г. 12:01
-
Я написал не вЫложите весь текст, а вЛожите текст листа Excel.
Вы просто должны сделать так:
1) считать данные с Excel;
2) создать DataTable;
3) записать данные в DataTable;
4) присвоить DataGrid (через Source) DataTable и все.
- Предложено в качестве ответа AlexFV 9 мая 2015 г. 13:10
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 5 июня 2015 г. 6:47
9 мая 2015 г. 13:09