c# y Excel

01/03/2010 - 18:48 por ronhi | Informe spam
Hola a todos,
Alguien puede ayudarme a decifrar como puedo mandar a llamar el nombre de
una hoja de calculo d excel por su nombre interno y no por el externo, es
decir cda que me conecto a una hoja de calculo lo mediante la siguiente
consulta:

string query= "Select * from [Electronica$]"

sin embargo quiero hacerlo por su nombre interno, lo hago asi pero siempre
falla

string query= "Select * from sheets1$]"

Alguien sabe com hacerlo?

Preguntas similare

Leer las respuestas

#1 Leandro Tuttini
01/03/2010 - 19:00 | Informe spam
hola

el team es que si has renombrado la hoja esta ya no es mas Sheet1

la verdad no habia escuchado de un nombre interno o externo, las hojas
tienen nombre, el que le ponga y por ese lo accedes

por ahi lo que podrias hacer es algun tipo de validacion consultando
los nombre de las hojas disponibles

C# - Retrieve Excel Workbook Sheet Names.
http://www.codeproject.com/KB/aspne...names.aspx

Reading Excel Worksheet and Column Schema Information Using ADO.NET
2.0 and GetSchema
http://davidhayden.com/blog/dave/ar.../2975.aspx

saludos
Respuesta Responder a este mensaje
#2 Gustavo Cantero
01/03/2010 - 19:03 | Informe spam
Nosotros hicimos una clase "helper" para manejo de los Excels. Te paso
el método que nos devuelve el nombre de las hojas de un archivo xls
modificado para que funcione como estático, seguro te sirve:

/// <summary>
/// Devuelve el nombre interno de las hojas de la planilla
/// </summary>
/// <param name="PhysicalSheets">Establece si se deben devolver sólo las
hojas físicas,
/// y no las lógicas</param>
/// <param name=" FileName ">Archivo XLS</param>
/// <returns>Nombre de las hojas de la planilla</returns>
/// <remarks>Los nombre terminarán con el signo $, ya que asi es el nombre
/// de la tabla, aunque en el Excel se vean sin este símbolo</remarks>
public static string[] GetSheetNames(string FileName, bool PhysicalSheets)
{
using (OleDbConnection objCon = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended
Properties=Excel 8.0;Data Source=" + FileName))
{
objCon.Open();

//Obtengo el esquema de la planilla
using (DataTable objDT =
objCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null))
{
if (objDT == null)
return null;

string[] strSheets;

//Agrego el nombre de las hojas
if (PhysicalSheets)
{
List<string> objList = new List<string>();
foreach (DataRow objRow in objDT.Rows)
{
string strSheet = objRow["TABLE_NAME"].ToString();
if (strSheet.EndsWith("$") || strSheet.EndsWith("$'"))
objList.Add(strSheet);
}
strSheets = new string[objList.Count];
objList.CopyTo(strSheets);
}
else
{
strSheets = new string[objDT.Rows.Count];
int i = 0;
foreach (DataRow objRow in objDT.Rows)
strSheets[i++] = objRow["TABLE_NAME"].ToString();
}

return strSheets;
}
}
}

Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar


From: ronhi [mailto:]
Posted At: lunes, 01 de marzo de 2010 02:48 p.m.
Posted To: microsoft.public.es.csharp
Conversation: c# y Excel
Subject: c# y Excel

Hola a todos,
Alguien puede ayudarme a decifrar como puedo mandar a llamar el nombre de
una hoja de calculo d excel por su nombre interno y no por el externo, es
decir cda que me conecto a una hoja de calculo lo mediante la siguiente
consulta:

string query= "Select * from [Electronica$]"

sin embargo quiero hacerlo por su nombre interno, lo hago asi pero siempre
falla

string query= "Select * from sheets1$]"

Alguien sabe com hacerlo?
Respuesta Responder a este mensaje
#3 ronhi
01/03/2010 - 22:41 | Informe spam
Hola Gustavo, el proyecto me devuelve un error diciendo que me hace falta un
ensamblado para list!!!, necesito agregar algun espacion de nombres?

"Gustavo Cantero" wrote:

Nosotros hicimos una clase "helper" para manejo de los Excels. Te paso
el método que nos devuelve el nombre de las hojas de un archivo xls
modificado para que funcione como estático, seguro te sirve:

/// <summary>
/// Devuelve el nombre interno de las hojas de la planilla
/// </summary>
/// <param name="PhysicalSheets">Establece si se deben devolver sólo las
hojas físicas,
/// y no las lógicas</param>
/// <param name=" FileName ">Archivo XLS</param>
/// <returns>Nombre de las hojas de la planilla</returns>
/// <remarks>Los nombre terminarán con el signo $, ya que asi es el nombre
/// de la tabla, aunque en el Excel se vean sin este símbolo</remarks>
public static string[] GetSheetNames(string FileName, bool PhysicalSheets)
{
using (OleDbConnection objCon = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended
Properties=Excel 8.0;Data Source=" + FileName))
{
objCon.Open();

//Obtengo el esquema de la planilla
using (DataTable objDT =
objCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null))
{
if (objDT == null)
return null;

string[] strSheets;

//Agrego el nombre de las hojas
if (PhysicalSheets)
{
List<string> objList = new List<string>();
foreach (DataRow objRow in objDT.Rows)
{
string strSheet = objRow["TABLE_NAME"].ToString();
if (strSheet.EndsWith("$") || strSheet.EndsWith("$'"))
objList.Add(strSheet);
}
strSheets = new string[objList.Count];
objList.CopyTo(strSheets);
}
else
{
strSheets = new string[objDT.Rows.Count];
int i = 0;
foreach (DataRow objRow in objDT.Rows)
strSheets[i++] = objRow["TABLE_NAME"].ToString();
}

return strSheets;
}
}
}

Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar


From: ronhi [mailto:]
Posted At: lunes, 01 de marzo de 2010 02:48 p.m.
Posted To: microsoft.public.es.csharp
Conversation: c# y Excel
Subject: c# y Excel

Hola a todos,
Alguien puede ayudarme a decifrar como puedo mandar a llamar el nombre de
una hoja de calculo d excel por su nombre interno y no por el externo, es
decir cda que me conecto a una hoja de calculo lo mediante la siguiente
consulta:

string query= "Select * from [Electronica$]"

sin embargo quiero hacerlo por su nombre interno, lo hago asi pero siempre
falla

string query= "Select * from sheets1$]"

Alguien sabe com hacerlo?

.

Respuesta Responder a este mensaje
#4 Gustavo Cantero
01/03/2010 - 22:49 | Informe spam
No, solamente deberías agregarle arriba de todo:

using System.Data;
using System.Data.OleDb;

Si te sigue dando error por favor dime en qué línea.
Saludos.

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar


From: ronhi [mailto:]
Posted At: lunes, 01 de marzo de 2010 06:41 p.m.
Posted To: microsoft.public.es.csharp
Conversation: c# y Excel
Subject: Re: c# y Excel

Hola Gustavo, el proyecto me devuelve un error diciendo que me hace falta
un
ensamblado para list!!!, necesito agregar algun espacion de nombres?

"Gustavo Cantero" wrote:

Nosotros hicimos una clase "helper" para manejo de los Excels. Te paso
el método que nos devuelve el nombre de las hojas de un archivo xls
modificado para que funcione como estático, seguro te sirve:

/// <summary>
/// Devuelve el nombre interno de las hojas de la planilla
/// </summary>
/// <param name="PhysicalSheets">Establece si se deben devolver sólo las
hojas físicas,
/// y no las lógicas</param>
/// <param name=" FileName ">Archivo XLS</param>
/// <returns>Nombre de las hojas de la planilla</returns>
/// <remarks>Los nombre terminarán con el signo $, ya que asi es el
nombre
/// de la tabla, aunque en el Excel se vean sin este símbolo</remarks>
public static string[] GetSheetNames(string FileName, bool
PhysicalSheets)
{
using (OleDbConnection objCon = new
OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended
Properties=Excel 8.0;Data Source=" + FileName))
{
objCon.Open();

//Obtengo el esquema de la planilla
using (DataTable objDT > objCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null))
{
if (objDT == null)
return null;

string[] strSheets;

//Agrego el nombre de las hojas
if (PhysicalSheets)
{
List<string> objList = new List<string>();
foreach (DataRow objRow in objDT.Rows)
{
string strSheet = objRow["TABLE_NAME"].ToString();
if (strSheet.EndsWith("$") ||
strSheet.EndsWith("$'"))
objList.Add(strSheet);
}
strSheets = new string[objList.Count];
objList.CopyTo(strSheets);
}
else
{
strSheets = new string[objDT.Rows.Count];
int i = 0;
foreach (DataRow objRow in objDT.Rows)
strSheets[i++] = objRow["TABLE_NAME"].ToString();
}

return strSheets;
}
}
}

Suerte!

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar


From: ronhi [mailto:]
Posted At: lunes, 01 de marzo de 2010 02:48 p.m.
Posted To: microsoft.public.es.csharp
Conversation: c# y Excel
Subject: c# y Excel

Hola a todos,
Alguien puede ayudarme a decifrar como puedo mandar a llamar el nombre
de
una hoja de calculo d excel por su nombre interno y no por el externo,
es
decir cda que me conecto a una hoja de calculo lo mediante la siguiente
consulta:

string query= "Select * from [Electronica$]"

sin embargo quiero hacerlo por su nombre interno, lo hago asi pero
siempre
falla

string query= "Select * from sheets1$]"

Alguien sabe com hacerlo?

.

Respuesta Responder a este mensaje
#5 ronhi
01/03/2010 - 23:40 | Informe spam
Hola Gustavo!!!

De antemano mil disculpas por mi falta de observación, mi proyecto me dio la
opción de buscar el espacio que me hacia falta y coloco esto:

using System.Collections.Generic;

despues todo funciono de maravilla.

Agreadezco mucho tu atención y apoyo para la resolución de mi problema.

saludos cordiales,
Hugo Rocha.


"Gustavo Cantero" wrote:

No, solamente deberías agregarle arriba de todo:

using System.Data;
using System.Data.OleDb;

Si te sigue dando error por favor dime en qué línea.
Saludos.

Gustavo A. Cantero
Scientia® Soluciones Informáticas
MCP - MCSD - MCTS - MCPD
http://www.scientia.com.ar
http://www.programandoamedianoche.com
http://foro.scientia.com.ar


From: ronhi [mailto:]
Posted At: lunes, 01 de marzo de 2010 06:41 p.m.
Posted To: microsoft.public.es.csharp
Conversation: c# y Excel
Subject: Re: c# y Excel

Hola Gustavo, el proyecto me devuelve un error diciendo que me hace falta
un
ensamblado para list!!!, necesito agregar algun espacion de nombres?

"Gustavo Cantero" wrote:

> Nosotros hicimos una clase "helper" para manejo de los Excels. Te paso
> el método que nos devuelve el nombre de las hojas de un archivo xls
> modificado para que funcione como estático, seguro te sirve:
>
> /// <summary>
> /// Devuelve el nombre interno de las hojas de la planilla
> /// </summary>
> /// <param name="PhysicalSheets">Establece si se deben devolver sólo las
> hojas físicas,
> /// y no las lógicas</param>
> /// <param name=" FileName ">Archivo XLS</param>
> /// <returns>Nombre de las hojas de la planilla</returns>
> /// <remarks>Los nombre terminarán con el signo $, ya que asi es el
> nombre
> /// de la tabla, aunque en el Excel se vean sin este símbolo</remarks>
> public static string[] GetSheetNames(string FileName, bool
> PhysicalSheets)
> {
> using (OleDbConnection objCon = new
> OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Extended
> Properties=Excel 8.0;Data Source=" + FileName))
> {
> objCon.Open();
>
> //Obtengo el esquema de la planilla
> using (DataTable objDT > > objCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null))
> {
> if (objDT == null)
> return null;
>
> string[] strSheets;
>
> //Agrego el nombre de las hojas
> if (PhysicalSheets)
> {
> List<string> objList = new List<string>();
> foreach (DataRow objRow in objDT.Rows)
> {
> string strSheet = objRow["TABLE_NAME"].ToString();
> if (strSheet.EndsWith("$") ||
> strSheet.EndsWith("$'"))
> objList.Add(strSheet);
> }
> strSheets = new string[objList.Count];
> objList.CopyTo(strSheets);
> }
> else
> {
> strSheets = new string[objDT.Rows.Count];
> int i = 0;
> foreach (DataRow objRow in objDT.Rows)
> strSheets[i++] = objRow["TABLE_NAME"].ToString();
> }
>
> return strSheets;
> }
> }
> }
>
> Suerte!
>
> Gustavo A. Cantero
> Scientia® Soluciones Informáticas
> MCP - MCSD - MCTS - MCPD
> http://www.scientia.com.ar
> http://www.programandoamedianoche.com
> http://foro.scientia.com.ar
>
>
> From: ronhi [mailto:]
> Posted At: lunes, 01 de marzo de 2010 02:48 p.m.
> Posted To: microsoft.public.es.csharp
> Conversation: c# y Excel
> Subject: c# y Excel
>
> Hola a todos,
> Alguien puede ayudarme a decifrar como puedo mandar a llamar el nombre
> de
> una hoja de calculo d excel por su nombre interno y no por el externo,
> es
> decir cda que me conecto a una hoja de calculo lo mediante la siguiente
> consulta:
>
> string query= "Select * from [Electronica$]"
>
> sin embargo quiero hacerlo por su nombre interno, lo hago asi pero
> siempre
> falla
>
> string query= "Select * from sheets1$]"
>
> Alguien sabe com hacerlo?
>
> .
>

.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida