Advertisement
Guest User

ExportaOpenOffice

a guest
Jan 30th, 2015
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.89 KB | None | 0 0
  1. function TfrmConsultas.ConnectOpenOffice: boolean;
  2. begin
  3.  if VarIsEmpty(StarOffice) then
  4.       StarOffice := CreateOleObject('com.sun.star.ServiceManager');
  5.    Result := not (VarIsEmpty(StarOffice) or VarIsNull(StarOffice));
  6. end;
  7.  
  8. procedure TfrmConsultas.DisconnectOpenOffice;
  9. begin
  10.    StarOffice := Unassigned;
  11. end;
  12.  
  13. procedure TfrmConsultas.ExportaOpenOffice(var Grid: TDBGrid);
  14. var
  15.   vlvDocumento: Variant;
  16.   vlvMinhaPlanilha: Variant;
  17.   vlvMinhaPagina: Variant;
  18.   vlvMinhaCelula: Variant;
  19.   vliColuna01, vliColuna02: integer;
  20.   vlBKMMarcacao: TBookMark;
  21.   vldF: real;
  22.   vlvV: Variant;
  23.   StarDesktop: Variant;
  24.   VariantArr: variant;
  25. begin
  26.   ConnectOpenoffice;
  27.   VariantArr := VarArrayCreate([0, -1], varVariant);
  28.  
  29.   if ConnectOpenOffice then
  30.   begin
  31.     StarDesktop := StarOffice.CreateInstance('com.sun.star.frame.Desktop');
  32.     vlvDocumento := StarDesktop.LoadComponentFromURL('private:factory/scalc', '_blank', 0, VariantArr);
  33.  
  34.     if vlvDocumento.SupportsService('com.sun.star.sheet.SpreadsheetDocument') then
  35.     begin
  36.       vlvMinhaPlanilha := vlvDocumento.getSheets;
  37.       vlvMinhaPagina := vlvMinhaPlanilha.GetByName('Planilha1');
  38.  
  39.       for vliColuna01 := 0 to Grid.Columns.Count - 1 do
  40.       begin
  41.         vlvMinhaCelula := vlvMinhaPagina.getCellByPosition(vliColuna01, 0);
  42.         vlvMinhaCelula.SetString(WideString(Grid.Columns[vliColuna01].Title.Caption));
  43.       end;
  44.  
  45.       Grid.DataSource.DataSet.DisableControls;
  46.  
  47.       vlBKMMarcacao := Grid.DataSource.DataSet.GetBookmark;
  48.  
  49.       Grid.DataSource.DataSet.first;
  50.  
  51.       vliColuna02 := 1;
  52.  
  53.       while not Grid.DataSource.DataSet.EOF do
  54.       begin
  55.         for vliColuna01 := 0 to Grid.Columns.Count - 1 do
  56.         begin
  57.           vlvMinhaCelula := vlvMinhaPagina.getCellByPosition(vliColuna01, vliColuna02);
  58.  
  59.           try
  60.             vlvV := Grid.DataSource.DataSet.Fieldbyname(TColumn(Grid.Columns[vliColuna01]).Fieldname).Value;
  61.             vldF := Grid.DataSource.DataSet.Fieldbyname(TColumn(Grid.Columns[vliColuna01]).Fieldname).Value;
  62.             if vlvV = vldF then
  63.             begin
  64.               vlvMinhaCelula.SetValue(vlvV);
  65.             end;
  66.           except
  67.             vlvMinhaCelula.SetString(WideString(Grid.DataSource.DataSet.Fieldbyname(TColumn(Grid.Columns[vliColuna01]).Fieldname).AsString));
  68.           end;
  69.  
  70.         end;
  71.         Grid.DataSource.DataSet.Next;
  72.         inc(vliColuna02);
  73.       end;
  74.       vlvMinhaPagina.getColumns.OptimalWidth := True;
  75.       Grid.DataSource.DataSet.GotoBookmark(vlBKMMarcacao);
  76.       Grid.DataSource.DataSet.FreeBookmark(vlBKMMarcacao);
  77.       Grid.DataSource.DataSet.EnableControls;
  78.     end
  79.     else
  80.     begin
  81.       MessageDlg('O tipo de arquivo criado esta diferente do que foi solicitado, favor verificar.', mtError, [mbOK], 0);
  82.     end;
  83.     MessageDlg('Planilha gerada com sucesso!', mtInformation, [mbOK], 0);
  84.     DisconnectOpenOffice;
  85.   end;
  86. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement