 |
|
Запись из dataGridView в файл екселя
Добрый день. Недавно начал учить C#, вот решил написать простенький телефонный справочник.
Все шло гладко, пока дело не дошло до сохранения в файл.
1) В чем собственно проблема:
При нажатии на кнопку, которая должна была записать все в файл 1.xls, выскакивает сообщение:
" Не совпадает число значений запроса и число результирующих полей."
И выделяет строку " cmd.ExecuteNonQuery();"
2) Еще раз через раз выскакивает ошибка, что якобы " Процесс не может получить доступ к файлу "1.xls", так как этот файл используется другим процессом."
Сам код:
Код:
private void button5_Click(object sender, EventArgs e)
{
string fileName = "1.xls"; // путь файла
System.IO.File.Copy("1.xls", fileName, true); // копируем файл, шаблон файла должен лежать рядом с *.exe (1.xls)
string connectionString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + fileName + "';Extended Properties=Excel 8.0;"; // строка подключения
using (OleDbConnection ole = new OleDbConnection(connectionString)) // используем OleDb
{
try
{
ole.Open();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
var cmd = new OleDbCommand("INSERT INTO [Лист1$] VALUES ('" + dataGridView1.Rows[0].Cells[0].Value + "','" + dataGridView1.Rows[0].Cells[1].Value + "','" + dataGridView1.Rows[0].Cells[2].Value + "',' ')", ole);
cmd.Connection = ole;
cmd.ExecuteNonQuery(); // вставляем данные в лист1 файла - filename
cmd.Dispose();
}
}
finally
{
ole.Close();
}
}
Мой dataGridView1 имеет в себе 3 колонки.
Строка для начала пока одна. Когда разберусь с сохранением одной строки, то тогда додумаю уже как записать и остальные.
3) Если не трудно, то подскажите, как мне из этого же файла заполнить dataGridView (обратная операция до вышеописанной).
|
Я думаю запрос составлен не верно, так как ты пишешь в Лист , но не указываешь в какие ячейки вставлять три свой поля.
|
Спасибо, но я с этой темы и начал разработку своей программы. А именно с кода, предоставленного пользователем LilLoco, который отписался в той теме.
А сам автор темы говорит подключить
using Microsoft.Office.Interop;
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
Но у меня компилятор ругается при виде слова Office
|
Цитата:
Цитата Lawrence
А сам автор темы говорит подключить
using Microsoft.Office.Interop;
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
Но у меня компилятор ругается при виде слова Office »
|
чтобы это подключить надо в обозревателе решений правой кнопкой мыши и выбрать добавить ссылку
|
Цитата:
Цитата ferget
чтобы это подключить надо в обозревателе решений правой кнопкой мыши и выбрать добавить ссылку »
|
Ни в одной из вкладок нету ничего про Офис.
|
там окно с закладками, перейдите на закладку NET
и там выберите
Microsoft.Office.Interop.Excel;
|
Цитата:
Цитата ferget
и там выберите
Microsoft.Office.Interop.Excel; »
|
Во вкладке .NET нету ничего про Офис.
Первая половина Microsoft.*
Вторая половина:
|
Поверить не могу, что заработало)
Осталось только понять как сделать так, чтобы файл сохранялся, а не открывался.
И заполнение datagridview`a данными из этого файла)
Спасибо большое.
|
вот пример, заполняет datagridview данными из этого файла
Код:
private void button1_Click(object sender, EventArgs e)
{
string str;
int r;
int c;
string filename = "1.xls";
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);
ExcelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ExcelWorkBook.Worksheets.get_Item(1);
ExcelRange = ExcelWorkSheet.UsedRange;
for (r = 1; r <= ExcelRange.Rows.Count; r++)
{
dataGridView1.Rows.Add(1);
for (c = 1; c <= 2; c++)
{
str = Convert.ToString((ExcelRange.Cells[r, c] as Microsoft.Office.Interop.Excel.Range).Value2);
dataGridView1.Rows[r - 1].Cells[c - 1].Value = str;
}
}
ExcelWorkBook.Close();
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();
}
}
|
Время: 20:48.
© OSzone.net 2001-