Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-03-2010
ycastilloa86 ycastilloa86 is offline
Registrado
 
Registrado: feb 2010
Posts: 3
Poder: 0
ycastilloa86 Va por buen camino
Exportar a XLS sin instalar Excel

Hola: Tengo una aplicacion en la que exporto varias cosas de mi base de datos para ficheros Excel, utilizo SQL 2000-2005, ambos, la aplicacion debe correr sobre cualquiera de los dos. Para ello primeramente creo los ficheros xls y posteriormente inserto los datos utilizando la instruccion INSERT INTO OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database... El problema es que estoy obligado a tener instalado el Excel en el lugar donde se corra la aplicacion. Por favor si alguien tiene alguna solución o me pudiera brindar alguna idea de como solucionarlo, tal vez exista alguna biblioteca que se pudiera poner en vez de instalar el Excel...o quizas sea mejor exportar los datos a XML u otro formato...en fin cualquier idea. Nota: los datos que exporto necesito poderlos importar posteriormente, asi que el formato debe poderse cargar en la base de datos de alguna forma. Gracias de antemano por cualquier idea o sugerencia.

Última edición por ycastilloa86 fecha: 24-03-2010 a las 21:05:34.
Responder Con Cita
  #2  
Antiguo 25-03-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.549
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Revisa los hilos que tienes en la parte inferior de la página, seguro que hay alguno que puede ayudarte. Otra opción es realizar un búsqueda en los hilos del club, es un tema que ya hemos tratado otras muchas veces.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 13-04-2010
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 20
olbeup Va camino a la fama
Estimado ycastilloa86,

Yo utilizo una función que he ido recopilando información hasta que he conseguilo lo que queria, bueno, aun me queda por refinarlo mas, pero me sirve.
Código Delphi [-]
unit FyPExportarExcel;

interface

uses
  SysUtils, DB, DBGrids, ComCtrls, ComObj, Excel2000;

  procedure ExportToExcel(FileNameXLS, SheetName: String;
    DBGrid: TDBGrid; ProgressBarXls: TProgressBar = nil);

implementation

procedure ExportToExcel(FileNameXLS, SheetName: String;
  DBGrid: TDBGrid; ProgressBarXls: TProgressBar);

  procedure ProgressBarInit;
  begin
    ProgressBarXls.Max := DBGrid.DataSource.DataSet.RecordCount;
    ProgressBarXls.Position := 0;
    ProgressBarXls.Visible := True;
  end;

const
  xlWBATworksheet = -4167;
var
  Excel, WorkBook, WorkSheet: OleVariant;
  I, J: Integer;
  PBookmark: TBookmark;
begin
  // Guardar la posición en la DB y desactivar que se mueva el registro
  PBookmark := DBGrid.DataSource.DataSet.GetBookmark;
  DBGrid.DataSource.DataSet.DisableControls;
  DBGrid.DataSource.DataSet.First;

  // Comprobar si existe el component TProgressBar
  if (ProgressBarXls <> nil) then
    ProgressBarInit;

  // Crear instancia de la aplicación Excel
  Excel := CreateOleObject('Excel.Application');

  // Evitar que nos pregunte si deseamos sobreescribir el archivo
  Excel.DisplayAlerts := False;

  // Agregar libro de trabajo
  WorkBook := Excel.Workbooks.Add(xlWBATWorksheet);

  // Tomar una referencia a la hoja creada
  WorkSheet := WorkBook.WorkSheets[1];

  // Se  describe el nombre de la hoja
  WorkSheet.Name := SheetName;

  // Llenamos las celdas
  //    Toma en cuenta que las columnas y filas empiezan en 1, y que en el
  // WorkSheet.Cells[I, J], I es la fila y J es la columna.

  //   Extrae los nombres de los campos del DBGrid y los coloca en el primer registro,
  // excluyendo los campos que están ocultos
  for J := 0 to DBGrid.FieldCount -1 do
    if DBGrid.Fields[J].Visible then
    begin
      // Poner la fuente de letra en Negrita
      WorkSheet.Cells[1, J +1].Font.Bold := True;
      // Centrar la celda
      WorkSheet.Cells[1, J +1].HorizontalAlignment := xlCenter;
      // Asignamos Valor del titulo del DBrid
      WorkSheet.Cells[1, J +1] := DBGrid.Columns[J].Title.Caption;
    end;

  // Guardar los registros
  for I := 0 to DBGrid.DataSource.DataSet.RecordCount -1 do
  begin
    // Identificamos los campos y lo grabamos según su tipo
    for J := 0 to DBGrid.FieldCount -1 do
      case DBGrid.Fields[J].DataType of
        ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numérico
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsInteger;
        ftBCD, ftFloat, ftCurrency: // Numérico con decimales
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsFloat;
        ftDateTime, ftDate, ftTime: // Fecha y Hora
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsDateTime;
        else // Todo lo demas caracteres
          WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsString;
      end;

    // Saltamos de registro
    DBGrid.DataSource.DataSet.Next;

    // Comprobar si existe el component TProgressBar
    if (ProgressBarXls <> nil) then
      ProgressBarXls.Position := ProgressBarXls.Position +1;
  end;

  // Comprobar si existe el component TProgressBar
  if (ProgressBarXls <> nil) then
    ProgressBarXls.Visible := False;

  // Redimensionar todas las celdas para que esten según su tamaño
  WorkSheet.Cells.Columns.AutoFit;

  // Guardar el archivo
  WorkBook.SaveAs(FileNameXLS);

  // Cierra el archivo
  WorkBook.Close(FileNameXLS);

  // Salir de Excel
  Excel.Quit;

  // posicionar el registro donde estaba
  DBGrid.DataSource.DataSet.GotoBookmark(PBookmark);
  DBGrid.DataSource.DataSet.FreeBookmark(PBookmark);
  DBGrid.DataSource.DataSet.EnableControls;
end;

end.
Un saludo.

P.D.: Si puedes aportar algo a esta función te lo agradecería.
Responder Con Cita
  #4  
Antiguo 13-04-2010
ycastilloa86 ycastilloa86 is offline
Registrado
 
Registrado: feb 2010
Posts: 3
Poder: 0
ycastilloa86 Va por buen camino
Gracias por responder olbeup, desgraciadamente con el codigo que me brindas no puedo resolver mi problema, puesto que para ello se necesita tener instalado el Excel, lo cual es mi principal problema. He buscado en todo el foro y no he podido encontrar una solucion que me sea factible. Si alguien tiene alguna sugerencia se lo agradeceria.
Responder Con Cita
  #5  
Antiguo 05-07-2010
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 638
Poder: 21
mRoman Va por buen camino
En mis hilos...esta la solucion

Hola....

Busca los hilos de mi usuario MRoman, yo he tratado el tema de exportacion a excel sin tener excel instalado....ahi puse una soluición....y tengo el componente para exportar, es facil....

Checalos y cualquier cosa me comentas....

Saludos
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #6  
Antiguo 09-07-2010
Jab Jab is offline
Miembro
 
Registrado: feb 2008
Posts: 83
Poder: 0
Jab cantidad desconocida en este momento
Hola, puedes exportarlos a CSV separados por ";".
Al generarlo si lo cargas con un ordenador que tenga Excel lo abrirá convirtiendo cada trozo de separación en una columna.
Cada línea se traduce en un registro.

De esta manera como ejemplo:

CODIGO; NOMBRE; APELLIDO; DATOS; REF;
100;PEPIN; TRE; CÓMICO; REF1291
Responder Con Cita
  #7  
Antiguo 10-07-2010
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 638
Poder: 21
mRoman Va por buen camino
Csv.

Fijate que yo los exporte a hojas de calculo, desde un DataSet hacia una plantilla de Excel....este archivo lo genere efectivamente en Excel, pero mi aplicacion lo toma y con el componente q tengo logro exportar estos datos a la hoja de calculo o plantilla.

Este archivo al final puede ser abierto en OpenOffice y obvio en MS Office. Es mucho mejor que usar archivos CSV, ya q las plantillas puedes manejar el formato que usan los usuarios, lo unico que haces en llenar este formato con los datos del DataSet...

Si lo q quieres es exportar a archivos con CSV, existe un componente llamado XLSExportFile, el cual guarda la información en un archivo XLS, sin necesidad que lo conviertas primero a CSV y luego le dejes esta chamba al usuario....es decir que lo abra en una aplicacion office, mejor q genere el archivo listo para ser visto.

Visita esta pagina http://www.delphiner.webcindario.com/ aqui te dejare algunos componentes para q los instales y los cheuques esperando te sirvan....
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #8  
Antiguo 10-07-2010
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 638
Poder: 21
mRoman Va por buen camino
Pagina WEB

Oye Disculpa....pero mi pagina esta dando problemas, la actualice, pero algo pasa con los archivos ZIP que subi.

En fin la otra opcion es buscar con nuestro amigo Google.

Saludos, nos comentas como te fué !
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #9  
Antiguo 30-07-2010
CoerveAbere CoerveAbere is offline
Baneado
 
Registrado: jul 2010
Posts: 3
Poder: 0
CoerveAbere Va por buen camino
Exportar a Excel

Hola a todos, espero que esten bien. es mi primer post en este foro... Bueno el problema que tengo es que necesito exportar unos archivos de audio en formato: WAV/G711 U-Law para un IVR de voicenote... al parecer el Audacity puede hacerlo pero no se donde, dice que debo bajar el FFmpeg, ya lo hice lo instale y nada... Me voy a preferencias/files formats/umcompressed export format/other y no veo ninguno que diga G711, por favot ayudenme ya que necesito entregar esto lo mas pronto posible y son demasiados archivos... Estoy trabajando en MAC OSX 10.6.4 Gracias, espero su pronta respuesta Saludos.
Responder Con Cita
  #10  
Antiguo 02-08-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.549
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por CoerveAbere Ver Mensaje
Hola a todos, espero que esten bien. es mi primer post en este foro...
Hola, bienvenido a los foros.
Nosotros también esperamos que estés bien.

Se nota que es tu primer post en el foro. Te recomiendo que revises la Guía de estilo, de los foros.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 13-06-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
Cita:
Empezado por olbeup Ver Mensaje
Estimado ycastilloa86,

Yo utilizo una función que he ido recopilando información hasta que he conseguilo lo que queria, bueno, aun me queda por refinarlo mas, pero me sirve.

Código Delphi [-]unit FyPExportarExcel;

interface

uses
SysUtils, DB, DBGrids, ComCtrls, ComObj, Excel2000;

procedure ExportToExcel(FileNameXLS, SheetName: String;
DBGrid: TDBGrid; ProgressBarXls: TProgressBar = nil);

implementation

procedure ExportToExcel(FileNameXLS, SheetName: String;
DBGrid: TDBGrid; ProgressBarXls: TProgressBar);

procedure ProgressBarInit;
begin
ProgressBarXls.Max := DBGrid.DataSource.DataSet.RecordCount;
ProgressBarXls.Position := 0;
ProgressBarXls.Visible := True;
end;

const
xlWBATworksheet = -4167;
var
Excel, WorkBook, WorkSheet: OleVariant;
I, J: Integer;
PBookmark: TBookmark;
begin
// Guardar la posición en la DB y desactivar que se mueva el registro
PBookmark := DBGrid.DataSource.DataSet.GetBookmark;
DBGrid.DataSource.DataSet.DisableControls;
DBGrid.DataSource.DataSet.First;

// Comprobar si existe el component TProgressBar
if (ProgressBarXls <> nil) then
ProgressBarInit;

// Crear instancia de la aplicación Excel
Excel := CreateOleObject('Excel.Application');

// Evitar que nos pregunte si deseamos sobreescribir el archivo
Excel.DisplayAlerts := False;

// Agregar libro de trabajo
WorkBook := Excel.Workbooks.Add(xlWBATWorksheet);

// Tomar una referencia a la hoja creada
WorkSheet := WorkBook.WorkSheets[1];

// Se describe el nombre de la hoja
WorkSheet.Name := SheetName;

// Llenamos las celdas
// Toma en cuenta que las columnas y filas empiezan en 1, y que en el
// WorkSheet.Cells[I, J], I es la fila y J es la columna.

// Extrae los nombres de los campos del DBGrid y los coloca en el primer registro,
// excluyendo los campos que están ocultos
for J := 0 to DBGrid.FieldCount -1 do
if DBGrid.Fields[J].Visible then
begin
// Poner la fuente de letra en Negrita
WorkSheet.Cells[1, J +1].Font.Bold := True;
// Centrar la celda
WorkSheet.Cells[1, J +1].HorizontalAlignment := xlCenter;
// Asignamos Valor del titulo del DBrid
WorkSheet.Cells[1, J +1] := DBGrid.Columns[J].Title.Caption;
end;

// Guardar los registros
for I := 0 to DBGrid.DataSource.DataSet.RecordCount -1 do
begin
// Identificamos los campos y lo grabamos según su tipo
for J := 0 to DBGrid.FieldCount -1 do
case DBGrid.Fields[J].DataType of
ftAutoInc, ftBytes, ftInteger, ftSmallint, ftWord: // Auto o Numérico
WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsInteger;
ftBCD, ftFloat, ftCurrency: // Numérico con decimales
WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsFloat;
ftDateTime, ftDate, ftTime: // Fecha y Hora
WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsDateTime;
else // Todo lo demas caracteres
WorkSheet.Cells[I +2, J +1] := DBGrid.Fields[J].AsString;
end;

// Saltamos de registro
DBGrid.DataSource.DataSet.Next;

// Comprobar si existe el component TProgressBar
if (ProgressBarXls <> nil) then
ProgressBarXls.Position := ProgressBarXls.Position +1;
end;

// Comprobar si existe el component TProgressBar
if (ProgressBarXls <> nil) then
ProgressBarXls.Visible := False;

// Redimensionar todas las celdas para que esten según su tamaño
WorkSheet.Cells.Columns.AutoFit;

// Guardar el archivo
WorkBook.SaveAs(FileNameXLS);

// Cierra el archivo
WorkBook.Close(FileNameXLS);

// Salir de Excel
Excel.Quit;

// posicionar el registro donde estaba
DBGrid.DataSource.DataSet.GotoBookmark(PBookmark);
DBGrid.DataSource.DataSet.FreeBookmark(PBookmark);
DBGrid.DataSource.DataSet.EnableControls;
end;

end.



Un saludo.

P.D.: Si puedes aportar algo a esta función te lo agradecería.
buenas noches
me gustaria ayuda con esta funcion... yo la utilizo tambien para migrar datos de un Dbgrid a un excel...

pero se me ocurrio no utilizar los titulos (nombres de los campos), si no mas bien (lo que viene aqui es idea)... crear una matriz bidimensional (array) en el cual coloque los titulos y poder utilizar esa matriz en este procedimiento.... lo que no se es como pasar como parametro esa matriz

si alguien tuviera una idea... he revisado ejemplo de pasar matrices como parametros pero.... ninguno me funciono
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Exportar a excel odrack Varios 3 26-10-2008 06:13:35
exportar a excel alfredo torres SQL 9 08-08-2008 03:11:53
Exportar a Excel jocey Varios 3 06-11-2007 17:15:23
exportar a excel ? Enrique Impresión 2 01-09-2004 01:18:47
Exportar a Excel pruz Varios 8 01-07-2004 16:47:37


La franja horaria es GMT +2. Ahora son las 01:45:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi