Como exportar por codigo sql a EXCEL?
-
miércoles, 03 de noviembre de 2010 23:47
Holas
tengo que traer data de un reporte,y exportarlo a excel,quisiera hacerlo x sql,porque pareciera mas rapido....hay manera de hacerla mediante algun codigo de sql server?
Estudiante_Sistemas
Respuestas
-
jueves, 04 de noviembre de 2010 3:15Moderador
Saludos, Para exportar datos desde SQL Server a Excel puedes hacerlo en 3 formas:
1. Utilizando el Winzard haciendo clic derecho en la base de datos y luego Task y en Exportar.
2. Utilizando SQL Server Data Transformation Services (DTS) con Integration Services
3. Utilizando el código siguiente:
INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=c:\testing.xls;', 'SELECT <campo1>, <campo2>, <campo3> FROM [Sheet1$]') SELECT <campo1>, <campo2>, <campo3> FROM <Tabla> GO
Antes de correr el código anterior, debes activar "Ad Hoc Distributed Queries", utilizando este código:exec sp_configure 'Show Advanced Options', 1 GO reconfigure Go exec sp_configure 'Ad Hoc Distributed Queries', 1 GO reconfigure Go
Espero que te sirva.
Willy Taveras.-- Propuesto como respuesta Willy TaverasModerator jueves, 04 de noviembre de 2010 3:18
- Marcado como respuesta qwalgrandeMVP, Moderator sábado, 13 de noviembre de 2010 6:04
-
jueves, 04 de noviembre de 2010 13:12Moderador
Hola.
Depende de lo pesado o grande que sea la consulta que te devuelve el report, y quién y cómo se obtiene, pero en general, te recomiendo que utilices Integration Services para ello. Sobre este caso general, aquí tienes una guía: http://searchsqlserver.techtarget.com/tutorial/Export-SQL-Server-data-to-an-Excel-file-using-SSIS-and-Visual-Studio.
En cualquier caso, danos más datos acerca de lo que ha de ser exportado a Excel, quien y cómo se hace para que podamos darte una orientación más precisa. Indícanos también qué versión y edición de SQL Server utilizas.
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/- Propuesto como respuesta qwalgrandeMVP, Moderator jueves, 04 de noviembre de 2010 13:14
- Marcado como respuesta qwalgrandeMVP, Moderator sábado, 13 de noviembre de 2010 6:04
-
viernes, 12 de noviembre de 2010 21:12
al final solucione mi problema
con el codigo q me dieron arriba insertaba,el resto esta en VB.NET
dejo mi codigo:
'Reporte de la última gestión Private Sub PrintRecordUltimaGestion() Dim dtsReporte As New DataSet Dim objExcel As New ClassExcel Dim xlsApp As excel.ApplicationClass Dim xlsWB As excel.WorkbookClass xlsApp = New excel.ApplicationClass sfd.InitialDirectory = "C:\" sfd.DefaultExt = ".xls" sfd.Filter = "Archivos Excel (.xls)|*.xls" Dim result As Boolean = sfd.ShowDialog() ' Process open file dialog box results If result = True Then 'Creando una copia de la plantilla en el servidor, este caso local Dim sArchivoOrigen As String = "\\IP\Exceles\plantilla.xls" '"C:\Exceles\plantilla.xls" Dim sRutaDestino As String = "\\IP\Exceles\reporte.xls" '"C:\Exceles\reporte.xls" My.Computer.FileSystem.CopyFile(sArchivoOrigen, _ sRutaDestino, _ True) 'Devuelve la cantidad de filas Dim inx As Integer bta.IntCarMes = IntIdCarMesResultado If lTotalFlas.RetornaIntFilas(bta) Then inx = bta.IntFilas End If If inx = 0 Then MsgBox("No existen datos para generar el reporte.", MessageBoxIcon.Information, "Cescont SAC") Exit Sub Else 'Chapando el origen, local en este caso sArchivoOrigen = "\\IP\Exceles\reporte.xls" '"C:\Exceles\reporte.xls" 'Y moviendo archivo al cliente sRutaDestino = sfd.FileName '"C:\reporte" & Today().Day & Today.Month & Today.Year & ".xls" My.Computer.FileSystem.MoveFile(sArchivoOrigen, _ sRutaDestino, _ True) If inx > 0 Then MsgBox("Se genero el reporte", MsgBoxStyle.Information, sTit) xlsWB = xlsApp.Workbooks.Open(sRutaDestino) xlsApp.Visible = True xlsApp.Range(xlsApp.Cells(2, 1), xlsApp.Cells(inx + 1, 35)).Select() xlsApp.Selection.Borders.ColorIndex = enuCOLORESEXCELL.Negro xlsApp.Selection.Font.Bold = False 'xlsApp.Selection.Interior = enuCOLORESEXCELL.Blanco End If End If End If xlsApp = Nothing End SubEspero le ayude a otros
Gracias.
Slds.
Estudiante_Sistemas- Marcado como respuesta Rosita_Lima viernes, 12 de noviembre de 2010 21:13
Todas las respuestas
-
jueves, 04 de noviembre de 2010 3:15Moderador
Saludos, Para exportar datos desde SQL Server a Excel puedes hacerlo en 3 formas:
1. Utilizando el Winzard haciendo clic derecho en la base de datos y luego Task y en Exportar.
2. Utilizando SQL Server Data Transformation Services (DTS) con Integration Services
3. Utilizando el código siguiente:
INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=c:\testing.xls;', 'SELECT <campo1>, <campo2>, <campo3> FROM [Sheet1$]') SELECT <campo1>, <campo2>, <campo3> FROM <Tabla> GO
Antes de correr el código anterior, debes activar "Ad Hoc Distributed Queries", utilizando este código:exec sp_configure 'Show Advanced Options', 1 GO reconfigure Go exec sp_configure 'Ad Hoc Distributed Queries', 1 GO reconfigure Go
Espero que te sirva.
Willy Taveras.-- Propuesto como respuesta Willy TaverasModerator jueves, 04 de noviembre de 2010 3:18
- Marcado como respuesta qwalgrandeMVP, Moderator sábado, 13 de noviembre de 2010 6:04
-
jueves, 04 de noviembre de 2010 13:12Moderador
Hola.
Depende de lo pesado o grande que sea la consulta que te devuelve el report, y quién y cómo se obtiene, pero en general, te recomiendo que utilices Integration Services para ello. Sobre este caso general, aquí tienes una guía: http://searchsqlserver.techtarget.com/tutorial/Export-SQL-Server-data-to-an-Excel-file-using-SSIS-and-Visual-Studio.
En cualquier caso, danos más datos acerca de lo que ha de ser exportado a Excel, quien y cómo se hace para que podamos darte una orientación más precisa. Indícanos también qué versión y edición de SQL Server utilizas.
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/- Propuesto como respuesta qwalgrandeMVP, Moderator jueves, 04 de noviembre de 2010 13:14
- Marcado como respuesta qwalgrandeMVP, Moderator sábado, 13 de noviembre de 2010 6:04
-
jueves, 04 de noviembre de 2010 17:13Moderador
Aquí te dejo la opción no.2 que indique en el post anterior, este es un ejemplo de creación de DTS que tengo en mi página (las explicaciones son en español).
Visita: http://itlearn.net/sql02.aspx
Espero que te sirva.
Willy Taveras.- -
jueves, 04 de noviembre de 2010 20:25
Holas
bueno este es la consulta que quiero exportar a excel
ALTER PROCEDURE [dbo].[Reporte_Xls_SGC0002] --88 @IntCarMes INT AS SET DATEFORMAT DMY SELECT distinct c.VarNumIdent AS DNI, c.VarNomClient AS Cliente, dbo.Ubicable(cc.IntIdClient) AS Ubicable , cc.VarCondLab AS [CondiciónLaboral], cc.VarNumCuent as [NúmerodeCuenta], cc.VarNomProd as [Producto], cc.VarFechaCas as [FechadeCastigo], cc.MonSalProd as[MontoSaldoProducto] , cc.MonCapProd as[MontoCapitalProducto] , cc.VarCampDes [CampanaDescuento], cc.MonPorCancel[MontoPorCancelar], cc.VarMoneda [TipoMoneda] , dbo.Gest_Fecha(cc.IntCarMes, c.IntIdClient,cc.VarNumCuent) AS 'FechaGestion' , ISNULL(c.VarTel01, cc.VarTel01) AS Telefono1, ISNULL(ISNULL(c.VarTel02, cc.VarTel02),'0') AS Telefono2, ISNULL(c.VarTel03, cc.VarTel03) AS Telefono3, ISNULL(c.VarTel04, cc.VarTel04) AS Telefono4, ISNULL(c.VarTel05, cc.VarTel05) AS Telefono5, ISNULL(c.Varcelular, cc.VarCelular) AS Celular, ISNULL(c.VarOpeCel, cc.VarOpeCel) AS OperadorCel1, ISNULL(c.varcelular2, cc.VarCelular2) AS Celular2, ISNULL(c.VarOpeCel2, cc.VarOpeCel2) AS OperadorCel2, ISNULL(c.VarDirecClient, cc.VarDirClient) AS DireccionCliente, ISNULL(dbo.Distrito(c.IntIdDist), dbo.Distrito(cc.IntIdDist)) AS Distrito, ISNULL(dbo.Provincia(c.IntIdDist), dbo.Provincia(cc.IntIdDist)) AS Provincia, ISNULL(dbo.Departamento(c.IntIdDist), dbo.Departamento(cc.IntIdDist)) AS Departamento, ISNULL(c.VarNomEmp, cc.VarNomEmp) AS EmpresaNombre, ISNULL(dbo.Distrito(c.IntIdDistEmp), dbo.Distrito(cc.IntIdDistEmp)) AS DistritoEmpresa, ISNULL(dbo.Provincia(c.IntIdDistEmp), dbo.Provincia(cc.IntIdDistEmp)) AS EmpresaProvincia, ISNULL(dbo.Departamento(c.IntIdDistEmp), dbo.Departamento(cc.IntIdDistEmp)) AS DepartamentoEmpres , dbo.Gest_Gestor(cc.IntCarMes, cc.IntIdClient, cc.VarNumCuent) AS Gestor , dbo.Gest_Aquien(cc.IntCarMes, cc.IntIdClient,cc.VarNumCuent) AS Calificacion , dbo.Gest_Respu(cc.IntCarMes, cc.IntIdClient, cc.VarNumCuent) AS Respuesta, dbo.Gest_FechaProm(cc.IntCarMes, cc.IntIdClient, cc.VarNumCuent) AS FechaPromesa, dbo.Gest_OBS(cc.IntCarMes, cc.IntIdClient, cc.VarNumCuent) AS Observacion FROM dbo.Tbl_CarteraCliente AS cc INNER JOIN dbo.Tbl_ClientePersona AS c ON c.IntIdClient = cc.IntIdClient INNER JOIN Tbl_CarteraMes CM ON CM.IdCarMes=cc.IntCarMes INNER JOIN Tbl_Cartera Car ON Car.IntIdCar=CM.IntIdCar WHERE (cc.IntCarMes=@IntCarMes) --AND dbo.Gest_Aquien(cc.IntCarMes, c.IntIdClient,cc.VarNumCuent)IS NULL ORDER BY VarNomClient ASC
Estudiante_Sistemas -
jueves, 04 de noviembre de 2010 21:02Moderador
Hola.
¿Cuánto tarda en ejecutarse? ¿Cuántos registros devuelve? ¿Cómo se debe ejecutar (una aplicación, un proceso batch)?
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/ -
jueves, 04 de noviembre de 2010 23:28
Hola.
¿Cuánto tarda en ejecutarse? ¿Cuántos registros devuelve? ¿Cómo se debe ejecutar (una aplicación, un proceso batch)?
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/
HolaDemora 22 segundos..en ejecutarse
devuelve un promedio de 8 mil registros
Estudiante_Sistemas -
viernes, 05 de noviembre de 2010 8:03Moderador
Hola.
¿Y con respecto al modo de ejecución?
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/ -
viernes, 05 de noviembre de 2010 12:27Moderador
Hola
¿ Has podido solucionar tu problema ?
Saludos
Eduardo Portescheller -
viernes, 05 de noviembre de 2010 14:45Moderador
Rosita,
Puedes desarrollar un Integration Services Package, utilizando Variables puedes pasar por parámetro el valor que pasas en el procedimiento (@IntCarMes), para configurar esto solo tienes que seguir los pasos que se indican en esta página:http://www.texastoo.com/post/2009/03/24/Use-variables-in-the-SSIS-Data-Flow-tab.aspx
Entonces creas un procedimiento para pasar los valores de los parametros mas o menos como el que indico en esta página:Cuando agregues el [ADO NET Source].[SqlCommand] Expression del ADO.NET Source (como indica el primer link), solo tienes que poner:
Donde la variable parametro es la que configuraras (con cualquier nombre) y pasaras a través del procedimiento que indico en el segundo Link.
"EXEC [dbo].[Reporte_Xls_SGC0002] '" + @[User::parametro] + "'"
Willy Taveras.- -
viernes, 05 de noviembre de 2010 16:43
Rosita,
Puedes desarrollar un Integration Services Package, utilizando Variables puedes pasar por parámetro el valor que pasas en el procedimiento (@IntCarMes), para configurar esto solo tienes que seguir los pasos que se indican en esta página:http://www.texastoo.com/post/2009/03/24/Use-variables-in-the-SSIS-Data-Flow-tab.aspx
Entonces creas un procedimiento para pasar los valores de los parametros mas o menos como el que indico en esta página:Cuando agregues el [ADO NET Source].[SqlCommand] Expression del ADO.NET Source (como indica el primer link), solo tienes que poner:
Donde la variable parametro es la que configuraras (con cualquier nombre) y pasaras a través del procedimiento que indico en el segundo Link.
"EXEC [dbo].[Reporte_Xls_SGC0002] '" + @[User::parametro] + "'"
Willy Taveras.-
No aun no lo resuelvoMMM no entiendo muy bien esta pagina...
segun veo es para pasar un paramento al sql server business iteligence???
Estudiante_Sistemas -
martes, 09 de noviembre de 2010 12:25Moderador
Aquí encontrará un gran tutorial sobre este tema, utilizando el SSIS y Visual Studio
Revisa el link:
http://searchsqlserver.techtarget.com/tutorial/Export-SQL-Server-data-to-an-Excel-file-using-SSIS-and-Visual-Studio
Saludos
Eduardo Portescheller -
martes, 09 de noviembre de 2010 15:41
Aquí te dejo la opción no.2 que indique en el post anterior, este es un ejemplo de creación de DTS que tengo en mi página (las explicaciones son en español).
Visita: http://itlearn.net/sql02.aspx
Espero que te sirva.
Willy Taveras.-
Holasabes me pierdo en el punto 8
hacemos clicl en el punto"ADO NET SOURCE",nunca lo encuentro y no me sale tal y cual se ve en la imagen :S
Estudiante_Sistemas -
martes, 09 de noviembre de 2010 15:46Moderador
Hola.
Para ofrecerte una alternativa, ¿podrías indicar cómo ha de ser ejecutada la generación del fichero Excel? ¿Quién lo lanza y desde dónde? ¿Es un proceso desconectado o la respuesta a la acción de un usuario?
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/ -
martes, 09 de noviembre de 2010 16:49
Aquí te dejo la opción no.2 que indique en el post anterior, este es un ejemplo de creación de DTS que tengo en mi página (las explicaciones son en español).
Visita: http://itlearn.net/sql02.aspx
Espero que te sirva.
Willy Taveras.-
Holasabes me pierdo en el punto 8
hacemos clicl en el punto"ADO NET SOURCE",nunca lo encuentro y no me sale tal y cual se ve en la imagen :S
Estudiante_Sistemas
Saludos,
He modificado el post, ahora incluyo la parte donde arrastramos los componentes para utilizarlos.
Espero que te sirva.
Willy Taveras.-
http://itlearn.net
Hola ,Gracias,pero ahora me quede en el punto 17,no logra ubicar execute package utility,no logra ubicarlo ....para poder ejcutarlo..puedes especificar donde,hacer clic,ps q raro no lo encuentro
Estudiante_Sistemas -
martes, 09 de noviembre de 2010 17:21
Hola willy taveras
bueno ya me di cuenta que si funcionaba,pero,lo que paso,es que no abre el excel cuando eejcuta,solo me doy cuenta x los colores,y veo mi arxivo y si,ahi estaban los datos y puedo ver que es rapidisimo,pero mi "problema"
es que yo tengo un formulario de reportes:
Uno de ellos,debo sacar el stored de arriba
ya me di cuenta que funciona pero debo hacerlo con formulario de windows hay alguna opcion de hacer eso??
Gracias a todos
Estudiante_Sistemas -
martes, 09 de noviembre de 2010 17:34
Hola willy taveras
bueno ya me di cuenta que si funcionaba,pero,lo que paso,es que no abre el excel cuando eejcuta,solo me doy cuenta x los colores,y veo mi arxivo y si,ahi estaban los datos y puedo ver que es rapidisimo,pero mi "problema"
es que yo tengo un formulario de reportes:
Uno de ellos,debo sacar el stored de arriba
ya me di cuenta que funciona pero debo hacerlo con formulario de windows hay alguna opcion de hacer eso??
Gracias a todos
Estudiante_Sistemas
Cuando dices "hacerlo con un formulario de windows", ¿a qué te refieres?
En el caso de que sea que esto lo tienes que invocar desde un formulario, solo tienes que crear el formulario e invocar el Stored Procedure que indico en el segundo link (http://itlearn.net/sql03.aspx ) pasandole el parametro que le configuras de la ubicacion del archivo Excel y del Integration Services Package.
Y si lo que deseas es visualizar un progreso del proceso, esto no es posible utilizando procedimientos porque no se puede determinar cuanto va a tardar. Existe una visualzación de Progress Bar que permite simular un proceso en corrida, que es utilizando el estilo Marquee .
Espero que te sirva.
Willy Taveras.-
http://itlearn.net
Primero,gracias x responder,ahora,te comento,trabajo en .net con sql server 2008,tengo un formulario de reportes,y uno de ellos,debiera exportarlo la data de un stored que recibe un parametro,yo lo tenia hecho pero DEMORA,porque recorre fila x fila y aparte lo dibuja en excel,esto es usando solo windows form en uan clase excel,la cual me demora como 15 minutios,y e s tored solo demora 22segundos,como que mucho :SPor eso pense hacerlo x sql pero no entiendo como puedo hacer....
porque se que es mas rapido,pense en un stored que lo imprima,
xq con el ejemplo que me ayduaste,solo para ver q imprimio tuve q abrir la ybicacion y verlo ahi,
mis dudas son si puedo crear un solo stored que me permita mandando mi parametro abrir el excel que carga??
Slds.
Estudiante_Sistemas -
martes, 09 de noviembre de 2010 18:02
Hola willy taveras
bueno ya me di cuenta que si funcionaba,pero,lo que paso,es que no abre el excel cuando eejcuta,solo me doy cuenta x los colores,y veo mi arxivo y si,ahi estaban los datos y puedo ver que es rapidisimo,pero mi "problema"
es que yo tengo un formulario de reportes:
Uno de ellos,debo sacar el stored de arriba
ya me di cuenta que funciona pero debo hacerlo con formulario de windows hay alguna opcion de hacer eso??
Gracias a todos
Estudiante_Sistemas
Cuando dices "hacerlo con un formulario de windows", ¿a qué te refieres?
En el caso de que sea que esto lo tienes que invocar desde un formulario, solo tienes que crear el formulario e invocar el Stored Procedure que indico en el segundo link (http://itlearn.net/sql03.aspx ) pasandole el parametro que le configuras de la ubicacion del archivo Excel y del Integration Services Package.
Y si lo que deseas es visualizar un progreso del proceso, esto no es posible utilizando procedimientos porque no se puede determinar cuanto va a tardar. Existe una visualzación de Progress Bar que permite simular un proceso en corrida, que es utilizando el estilo Marquee .
Espero que te sirva.
Willy Taveras.-
http://itlearn.net
Primero,gracias x responder,ahora,te comento,trabajo en .net con sql server 2008,tengo un formulario de reportes,y uno de ellos,debiera exportarlo la data de un stored que recibe un parametro,yo lo tenia hecho pero DEMORA,porque recorre fila x fila y aparte lo dibuja en excel,esto es usando solo windows form en uan clase excel,la cual me demora como 15 minutios,y e s tored solo demora 22segundos,como que mucho :SPor eso pense hacerlo x sql pero no entiendo como puedo hacer....
porque se que es mas rapido,pense en un stored que lo imprima,
xq con el ejemplo que me ayduaste,solo para ver q imprimio tuve q abrir la ybicacion y verlo ahi,
mis dudas son si puedo crear un solo stored que me permita mandando mi parametro abrir el excel que carga??
Slds.
Estudiante_Sistemas
Lo que puedes hacer es en tu formulario donde enviaras los parametros del Documento Excel que utilizaras para ingresar los datos exportados desde SQL Server, entonces utilizar:
Suponiendo que tu aplicación es en C# . NET
var process = new Process();
try
{
process.StartInfo.FileName = <ruta_archivo_excel_especificado>;
process.Start();
process.Close();
} Catch(Exception ex)
Con esto lo que haras es abrir el documento que acabas de procesar automaticamente despues de finalizar el proceso.
Willy Taveras.-
http://itlearn.net
Holabueno no trabajo con c#,tampoco asp.net sino aplicacion de windows,
como seria de la otra forma?en aplicacionde escritorio de windows?
pero al final me llegara abrir el excel,o solo lo exporta pero lo dejaen laubicacion?
Muachas gracias
Estudiante_Sistemas -
martes, 09 de noviembre de 2010 19:44
Una aplicación de Windows debe trabajar con algun lenguaje ya sea: VB.NET, C#, etc... Pero debes estar trabajando bajo un lenguaje.
Cuando termine el proceso lo que haria es abrir el archivo de excel que recibio la exportación y no lo elimina de la ubicación donde lo creas. Solo lo abre.Si la aplicación es en VB, entonces puedes utilizar el siguiente código:
Imports Excel.WorkbookClass Imports Excel.WorksheetClass Imports Excel.ApplicationClass Dim xlsApp As Excel.ApplicationClass Dim xlsWB As Excel.WorkbookClass xlsApp = New Excel.ApplicationClass xlsApp.Visible = True xlsWB = xlsApp.Workbooks.Open("C:\test1.xls")
Donde esta test1.xls indicarias el nombre del archivo que utilizaras tu.
Willy Taveras.-
http://itlearn.net
SI trabajo con VB.NET,ya veo uso eso para abrirlo,bueno para matar el excel si tengo un codigo.PROBE ESTE CODIGO PERO ME SALE UN ERROR,APESAR DE HABER CORRIDO LOS EXEC QUE HABIS COLOCADO
INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 12.0;Database=c:\testing.xls;',
'SELECT <IntCarMes>, <Intidclient>, <VarNumCuent> FROM [Sheet1$]')
SELECT IntCarMes , Intidclient , VarNumCuent
FROM Tbl_CarteraCliente
where IntCarMes=93
GO
Estudiante_Sistemas -
martes, 09 de noviembre de 2010 20:07
Holas
bueno ya corregi,solo era poner las cabeceras en el excel,y si exporta,ahora solo debo mandar mi parametro y se acabo :)
INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=c:\testing.xls;',
'SELECT IntCarMes , Intidclient , VarNumCuent FROM [reporte$]')
SELECT IntCarMes , Intidclient , VarNumCuent
FROM Tbl_CarteraCliente
where IntCarMes=93
Estudiante_Sistemas -
martes, 09 de noviembre de 2010 20:16
ahora debo armas un stored que mande un parametro y agregar mi consulta de arriba,solo esoHolas
bueno ya corregi,solo era poner las cabeceras en el excel,y si exporta,ahora solo debo mandar mi parametro y se acabo :)
INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=c:\testing.xls;',
'SELECT IntCarMes , Intidclient , VarNumCuent FROM [reporte$]')
SELECT IntCarMes , Intidclient , VarNumCuent
FROM Tbl_CarteraCliente
where IntCarMes=93
Estudiante_Sistemas
Exactamente, solo te hacia falta quitar la parte donde puse [Sheet1$], ¿entonces pudiste solucionar tu problema?
¿Que resta para completar la exportación?
Willy Taveras.-
http://itlearn.net
Estudiante_Sistemas -
martes, 09 de noviembre de 2010 20:47
Bueno si lo tengo casi listo,pero hay un detalle,PORQUE CADA VEZ que ejecuto el stored,queda guardado esa plantilla con los datos anteriores mmm deberia hacer una plantilla,osino borrar la data luego,algo asi,porque se guardan los datos que se ejecuto del stored....que puedo hacer?
Solo faltaba ver ese detalle
Estudiante_Sistemas -
martes, 09 de noviembre de 2010 21:14Moderador
Hola.
La alternativa que has utilizado (usar openrowset) tiene limitaciones. Una de ellas está en que el fichero se genera, físicamente, en el servidor de bases de datos o en una ruta desde la perspectiva del servidor. Además, ese fichero es único, tendrás que ocuparte de gestionar los accesos de múltiples usuarios dándole un nombre aleatorio, la eliminación del fichero si es necesario, etc.
En el punto en el que estás, bastaría con que igual que realizas la inserción, realices el borrado antes de llenar de nuevo el excel.
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/ -
martes, 09 de noviembre de 2010 21:30como puedo borrar los datos insertados?
Estudiante_Sistemas -
martes, 09 de noviembre de 2010 21:41Moderador
Hola.
Limpia la hoja con un update sin where:
Borrarlos no se puede (otra limitación).UPDATE OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\testing.xls";User ID=Admin;Password=;Extended properties="Excel 8.0;HRD=YES"')...Reportes$ SET IntCarMes=NULL, Intidclient=NULL, VarNumCuent=NULL
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/ -
martes, 09 de noviembre de 2010 21:57
Hola.
Limpia la hoja con un update sin where:
Borrarlos no se puede (otra limitación).UPDATE OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\testing.xls";User ID=Admin;Password=;Extended properties="Excel 8.0;HRD=YES"')...Reportes$ SET IntCarMes=NULL, Intidclient=NULL, VarNumCuent=NULL
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/campo por campo entonces?
mmmm algo problematico....
Estudiante_Sistemas -
martes, 09 de noviembre de 2010 22:00Moderador
Hola.
No me parece que tener que especificar los campos en el update sea el mayor problema que tiene el método que quieres implementar. ¿Cuál es el inconveniente?
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/ -
martes, 09 de noviembre de 2010 23:20
Hola.
No me parece que tener que especificar los campos en el update sea el mayor problema que tiene el método que quieres implementar. ¿Cuál es el inconveniente?
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/alter PROCEDURE Reporte_Xls_SGC0002_01
@IntCarMes INT
AS
UPDATE OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\ReporteUltimaGestion.xls"User ID=Admin;Password=;Extended properties="Excel 8.0;HRD=YES"')
SET DNI=NULL, Cliente=NULL, Ubicable=NULL
INSERT INTO OPENROWSET ('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=c:\ReporteUltimaGestion.xls;',
'SELECT DNI , Cliente , Ubicable
,CondicionLaboral,NumeroCuenta
,Producto
,FechadeCastigo
,MontoSaldoProducto,MontoCapitalProducto,CampanaDescuento,MontoporCancelar,TipoMoneda,FechaGestion
,Telefono1,Telefono2,Telefono3,Telefono4,Telefono5,Celular1,OperadorCelular1,Celular2,OperadorCelular2,DireccionCliente
,Distrito,Provincia,Departamento,Empresa,DistritoEmpresa,ProvinciaEmpresa,DepartamentoEmpresa,Gestor
,Calificacion,Respuesta,FechaPromesa,Observacion
FROM [Reporte$]')
SELECT distinct c.VarNumIdent AS DNI
, c.VarNomClient AS Cliente
, dbo.Ubicable(cc.IntIdClient) AS Ubicable
, cc.VarCondLab AS CondicionLaboral
, cc.VarNumCuent as NumeroCuenta
, cc.VarNomProd as Producto
, cc.VarFechaCas as FechadeCastigo
, cc.MonSalProd as MontoSaldoProducto
, cc.MonCapProd as MontoCapitalProducto
, cc.VarCampDes as CampanaDescuento
, cc.MonPorCancel as MontoporCancelar
, cc.VarMoneda as TipoMoneda
, dbo.Gest_Fecha(cc.IntCarMes, c.IntIdClient,cc.VarNumCuent) AS FechaGestion
, ISNULL(c.VarTel01, cc.VarTel01) AS Telefono1
,ISNULL(ISNULL(c.VarTel02, cc.VarTel02),'0') AS Telefono2
, ISNULL(c.VarTel03, cc.VarTel03) AS Telefono3
, ISNULL(c.VarTel04, cc.VarTel04) AS Telefono4,
ISNULL(c.VarTel05, cc.VarTel05) AS Telefono5
, ISNULL(c.Varcelular, cc.VarCelular) AS Celular1, ISNULL(c.VarOpeCel, cc.VarOpeCel) AS OperadorCelular1,
ISNULL(c.varcelular2, cc.VarCelular2) AS Celular2, ISNULL(c.VarOpeCel2, cc.VarOpeCel2) AS OperadorCelular2
, ISNULL(c.VarDirecClient, cc.VarDirClient) AS DireccionCliente
, ISNULL(dbo.Distrito(c.IntIdDist), dbo.Distrito(cc.IntIdDist)) AS Distrito
, ISNULL(dbo.Provincia(c.IntIdDist), dbo.Provincia(cc.IntIdDist))AS Provincia
, ISNULL(dbo.Departamento(c.IntIdDist), dbo.Departamento(cc.IntIdDist)) AS Departamento
, ISNULL(c.VarNomEmp, cc.VarNomEmp) AS Empresa
, ISNULL(dbo.Distrito(c.IntIdDistEmp), dbo.Distrito(cc.IntIdDistEmp)) AS DistritoEmpresa
, ISNULL(dbo.Provincia(c.IntIdDistEmp), dbo.Provincia(cc.IntIdDistEmp)) AS ProvinciaEmpresa
, ISNULL(dbo.Departamento(c.IntIdDistEmp), dbo.Departamento(cc.IntIdDistEmp)) AS DepartamentoEmpresa
, dbo.Gest_Gestor(cc.IntCarMes, cc.IntIdClient, cc.VarNumCuent) AS Gestor
, dbo.Gest_Aquien(cc.IntCarMes, cc.IntIdClient,cc.VarNumCuent) AS Calificacion
, dbo.Gest_Respu(cc.IntCarMes, cc.IntIdClient, cc.VarNumCuent) AS Respuesta
, dbo.Gest_FechaProm(cc.IntCarMes,cc.IntIdClient, cc.VarNumCuent) AS FechaPromesa
, dbo.Gest_OBS(cc.IntCarMes, cc.IntIdClient, cc.VarNumCuent) AS Observacion
FROM dbo.Tbl_CarteraCliente AS cc INNER JOIN
dbo.Tbl_ClientePersona AS c ON c.IntIdClient = cc.IntIdClient
INNER JOIN Tbl_CarteraMes CM
ON CM.IdCarMes=cc.IntCarMes
INNER JOIN Tbl_Cartera Car
ON Car.IntIdCar=CM.IntIdCar
WHERE (cc.IntCarMes=@IntCarMes)
ORDER BY VarNomClient ASC=================================
como es la parte que esta sombreada es la que sale este error:
Msg 156, Level 15, State 1, Procedure Reporte_Xls_SGC0002_01, Line 10
Incorrect syntax near the keyword 'SET'.
Estudiante_Sistemas -
miércoles, 10 de noviembre de 2010 8:10Moderador
Hola.
Te falta parte de la línea:
'Data Source="c:\ReporteUltimaGestion.xls"User ID=Admin;Password=;Extended properties="Excel 8.0;HRD=YES"')...Reportes$
Alberto López Grande
SQL Server MVP
Visita mi blog en http://qwalgrande.blogspot.es/ -
miércoles, 10 de noviembre de 2010 15:22
Hola si ya funciona quedo asi:
UPDATE OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\testing.xls";User ID=Admin;Password=;Extended properties="Excel 8.0;HRD=YES"')...reporte$
SET IntCarMes=NULL, Intidclient=NULL, VarNumCuent=NULL
where IntCarMes=114PERO,me he dado cuenta que cada vez que imprime x ejemplo son 800 registros,luego sigue imprimiendo abajo,en la 801,y asi cada vez que recibe parametro va bajando las filas....se puede hacer algo,para que siempre empieze en la segunda fila,ps la primera fila son cabeceras.
Estudiante_Sistemas -
miércoles, 10 de noviembre de 2010 15:26
¿Estas utilizando el OpenDataSource para ingresar los datos? o estas utilizando el Integration Services Package?Hola si ya funciona quedo asi:
UPDATE OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\testing.xls";User ID=Admin;Password=;Extended properties="Excel 8.0;HRD=YES"')...reporte$
SET IntCarMes=NULL, Intidclient=NULL, VarNumCuent=NULL
where IntCarMes=114PERO,me he dado cuenta que cada vez que imprime x ejemplo son 800 registros,luego sigue imprimiendo abajo,en la 801,y asi cada vez que recibe parametro va bajando las filas....se puede hacer algo,para que siempre empieze en la segunda fila,ps la primera fila son cabeceras.
Estudiante_Sistemas
Willy Taveras.-
http://itlearn.net
uso el OpenDataSource,y tiene ese problema,cada vez que imprime
Estudiante_Sistemas -
miércoles, 10 de noviembre de 2010 15:43
Ese es el problema,aunque yo le tuve que poner un where porque sin where no funcionaba
UPDATE OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\testing.xls";User ID=Admin;Password=;Extended properties="Excel 8.0;HRD=YES"')...reporte$
SET IntCarMes=NULL, Intidclient=NULL, VarNumCuent=NULL
where IntCarMes=83y bueno tmb pasa que al momento de actrualizar como siempre recibe nuevo parametro no lo llega a borrar :S
y cmienza imprimir debajo de la ultima fila
Estudiante_Sistemas -
miércoles, 10 de noviembre de 2010 17:43Bueno sigo presentando problemas,al parecer la unica forma que no pase es eliminar,tendre q usar alguna manera de borrarlos desde el formulario,o hay otra solucion?
Estudiante_Sistemas -
viernes, 12 de noviembre de 2010 21:12
al final solucione mi problema
con el codigo q me dieron arriba insertaba,el resto esta en VB.NET
dejo mi codigo:
'Reporte de la última gestión Private Sub PrintRecordUltimaGestion() Dim dtsReporte As New DataSet Dim objExcel As New ClassExcel Dim xlsApp As excel.ApplicationClass Dim xlsWB As excel.WorkbookClass xlsApp = New excel.ApplicationClass sfd.InitialDirectory = "C:\" sfd.DefaultExt = ".xls" sfd.Filter = "Archivos Excel (.xls)|*.xls" Dim result As Boolean = sfd.ShowDialog() ' Process open file dialog box results If result = True Then 'Creando una copia de la plantilla en el servidor, este caso local Dim sArchivoOrigen As String = "\\IP\Exceles\plantilla.xls" '"C:\Exceles\plantilla.xls" Dim sRutaDestino As String = "\\IP\Exceles\reporte.xls" '"C:\Exceles\reporte.xls" My.Computer.FileSystem.CopyFile(sArchivoOrigen, _ sRutaDestino, _ True) 'Devuelve la cantidad de filas Dim inx As Integer bta.IntCarMes = IntIdCarMesResultado If lTotalFlas.RetornaIntFilas(bta) Then inx = bta.IntFilas End If If inx = 0 Then MsgBox("No existen datos para generar el reporte.", MessageBoxIcon.Information, "Cescont SAC") Exit Sub Else 'Chapando el origen, local en este caso sArchivoOrigen = "\\IP\Exceles\reporte.xls" '"C:\Exceles\reporte.xls" 'Y moviendo archivo al cliente sRutaDestino = sfd.FileName '"C:\reporte" & Today().Day & Today.Month & Today.Year & ".xls" My.Computer.FileSystem.MoveFile(sArchivoOrigen, _ sRutaDestino, _ True) If inx > 0 Then MsgBox("Se genero el reporte", MsgBoxStyle.Information, sTit) xlsWB = xlsApp.Workbooks.Open(sRutaDestino) xlsApp.Visible = True xlsApp.Range(xlsApp.Cells(2, 1), xlsApp.Cells(inx + 1, 35)).Select() xlsApp.Selection.Borders.ColorIndex = enuCOLORESEXCELL.Negro xlsApp.Selection.Font.Bold = False 'xlsApp.Selection.Interior = enuCOLORESEXCELL.Blanco End If End If End If xlsApp = Nothing End SubEspero le ayude a otros
Gracias.
Slds.
Estudiante_Sistemas- Marcado como respuesta Rosita_Lima viernes, 12 de noviembre de 2010 21:13

