CLR: .Net / Mono / Boo / Otros CLR > C#
no consigo conectar con Excel mediante OleDb
picyo:
Pues no se porque me falla mi conexión, por mas que he probado todas las cadenas de conexión que he visto. Quiero simplemente conectar con una hoja de excel e implementarla (leerla) en mi dataGreedView1. En efecto. Algo bastante estúpido que no funciona, a pesar de toda la información que hay en este foro y en todo Google, no encuentro pq falla...
--- Código: ---using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using Excel = Microsoft.Office.Interop.Excel;
namespace leer_excel
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btLeerExcel_Click(object sender, EventArgs e)
{
try
{
OleDbConnection MyConnection;
DataSet DtSet;
OleDbDataAdapter MyCommand;
MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;");
MyCommand = new OleDbDataAdapter("select * from [Hoja1$]", MyConnection);
MyCommand.TableMappings.Add("Table", "TestTable");
DtSet = new DataSet();
MyCommand.Fill(DtSet);
dataGridView1.DataSource = DtSet.Tables[0];
MyConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
--- Fin del código ---
- cabe decir que si he hecho referencia en el explorador de solucuiones, en el apartado reference, a Microsoft.Office.Interop.Excel
- También he probado poner la ruta exacta de mi archivo excel, o sin poner la ruta (tal como esta ahora), para ver si lo coge de forma local...
gabio2:
Ya te había contestado por mensaje privado, sin embargo veo que ya puedo responder al tema.. te copio la respuesta de nuevo.
Es un ejemplo de como lo haría..
--- Código: C# --- string ruta = "C:\\Movimientos.xls"; //Aquí supongo que está la ruta de mi archivo en excel. System.Data.Odbc.OdbcConnection conexionExcel = new System.Data.Odbc.OdbcConnection("Driver={Microsoft Excel Driver (*.xls)};Dbq=" + ruta + ";ReadOnly=0;"); //En mi ejemplo yo tengo una "tabla" llamada movimientos.. pero en excel se especifica de esa manera //con los corchetes y el signo de $ System.Data.Odbc.OdbcDataAdapter adaptadorExcel = new System.Data.Odbc.OdbcDataAdapter ("SELECT * FROM [Movimientos$] ", conexionExcel); System.Data.DataTable dtExcel = new System.Data.DataTable("Movimientos"); adaptadorExcel.Fill(dtExcel); //Aquí lleno mi datatable, luego sólo le asignas al DataSource del gridview ese datatable.
Saludos!
picyo:
Hola!
Gracias por la respuesta!
Si, vi el mensaje privado. Bueno, ahora he realizado la prueba, y me pasa exactamente igual. Tengo la duda en el nombre del archivo, si has de poner la ruta entera, o el compilador se da cuenta que esta en la c:// (en mi caso e://). de todos modos, probé las dos. he de decir que me pasa lo mismo...y vi como "solucionarlo". Lo entrecomillo, pq no es una solución... es algo que debería arreglar:
El hecho es que si tengo mi hoja de excel abierta, si se carga el DataGridView con los datos dela hoja. vamos..como si estuvieramos en SQL y debieramos tener la conexión de SQL Server de Microsoft abierta, pues igual. Y digo yo... si he de abrir una cosa que ya está abierta... ( volviendo a mi caso con OleDB). Vamos, quiero abrir un archivo, o x archivos directamente desde la aplicación de escritorio.
¿Cómo puedo hacer que se conecte .NET sin tener la hoja abierta?
cachorro:
yo hice eso alguna vez..recuerdo que lo hice identico a la conexion como si estuviera habriendo una base acces, creo q era como te lo menciono gabio2...
picyo:
Pues consigo siempre lo mismo... me pasa con Odbc lo mismo que con OleDb. He de tener la hoja abierta.
Es posible que me deje alguna cosa..? Abrís algún DataResource como si estuviésemos abriendo una base de datos de SQL?
Lo único que hice para OleDb fue añadir la referencia Microsof.Office.Interop.Excel, y después en cabecera de programa el using Excel = Microsoft.Office.Interop.Excel;
Lo tengo tal cual:
--- Código: ---using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.Odbc;
using Excel = Microsoft.Office.Interop.Excel;
namespace leer_excel
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btLeerExcel_Click(object sender, EventArgs e)
{
try
{
/* OleDbConnection MyConnection;
DataSet DtSet;
OleDbDataAdapter MyCommand;
MyConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; "+
"Data Source=LEER.xlsx;Extended Properties=Excel 8.0;");
//MessageBox.Show("entras");
MyCommand = new OleDbDataAdapter("select * from [Hoja1$]", MyConnection);
//MyCommand.TableMappings.Add("Table", "TestTable");
DtSet = new DataSet();
MyCommand.Fill(DtSet);
dataGridView1.DataSource = DtSet.Tables[0];
MyConnection.Close();
*/
string ruta = "E:/Proyectos_carpeta_seguridad/Visual C#/Enciclopedia de MVC#/"+
"capitulo 15/excel/leer excel/leer excel/bin/Debug/LEER.xlsx";
System.Data.Odbc.OdbcConnection conexionExcel =
new System.Data.Odbc.OdbcConnection("Driver={Microsoft Excel Driver (*.xls)};Dbq=" +
ruta + ";ReadOnly=0;");
System.Data.Odbc.OdbcDataAdapter adaptadorExcel =
new System.Data.Odbc.OdbcDataAdapter("SELECT * FROM [Hoja1$] ", conexionExcel);
System.Data.DataTable dtExcel = new System.Data.DataTable("Hoja1");
//Aquí lleno mi datatable, luego sólo le asignas al DataSource
//del gridview ese datatable.
adaptadorExcel.Fill(dtExcel);
dataGridView1.DataSource = dtExcel;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
--- Fin del código ---
Navegación
[#] Página Siguiente
Ir a la versión completa