+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

creazione file excel

  1. #1
    Monti non è in linea Scolaretto
    buongiorno a tutti,
    sto esportando alcuni dati da una tabella ad un foglio excel usando la funzione
    function ExportToExcel(ADataSet : TDataSet; AFile : String; ANameSheet : String): Boolean;
    
    e precisamente:
    function TAnagSmileForm.ExportToExcel(ADataSet: TDataSet; AFile,
      ANameSheet: String): Boolean;
    var
      iCol,iRow,i : Integer;
      oExcel : TExcelApplication;
      oWorkbook : TExcelWorkbook;
      oSheet : TExcelWorksheet;
    begin
      // Set Iniziali Var
      iCol := 0;
      iRow := 1;
      result := True;
    
      // Imposto var per Excel
      oExcel := TExcelApplication.Create(Application);
      oWorkbook := TExcelWorkbook.Create(Application);
      oSheet := TExcelWorksheet.Create(Application);
    
      // Verifico la presenza di excel
      try
        oExcel.Visible[0] := False;
        oExcel.Connect;
      except
        result := False;
        MessageDlg('ATTENZIONE !!, in questo PC non risulta installata'+#13+
                   'nessuna versione di MICROSOFT Excel...', mtError, [mbOk], 0);
        exit;
      end;
    
      // Aggiungo
      oExcel.Visible[0] := False;
      oExcel.Caption := 'Export Excel';
      oExcel.Workbooks.Add(Null,0);
    
      oWorkbook.ConnectTo(oExcel.Workbooks[1]);
      oSheet.ConnectTo(oWorkbook.Worksheets[1] as _Worksheet);
    
      Gauge1.MaxValue := QryProc.RecordCount;
      Gauge1.Progress := 0;
    
      QryProc.DisableControls;
    
      // Listo il Nome delle Colonne
      for i := 1 to QRYProc.FieldCount do begin
          if QRYProc.Fields[i-1].FieldName = 'Text01' then
             oSheet.Cells.Item[0,i] := 'Ragione Sociale'
          else if QRYProc.Fields[i-1].FieldName = 'Text02' then
             oSheet.Cells.Item[1,i] := 'Cognome'
          else if QRYProc.Fields[i-1].FieldName = 'Text03' then
             oSheet.Cells.Item[1,i] := 'Nome'
          else if QRYProc.Fields[i-1].FieldName = 'Text04' then
             oSheet.Cells.Item[1,i] := 'Passeggero Collegato'
          else if QRYProc.Fields[i-1].FieldName = 'Text05' then
             oSheet.Cells.Item[1,i] := 'data di nascita'
          else if QRYProc.Fields[i-1].FieldName = 'Text06' then
             oSheet.Cells.Item[1,i] := 'Luogo di nascita'
          else if QRYProc.Fields[i-1].FieldName = 'Text07' then
             oSheet.Cells.Item[1,i] := 'indirizzo'
          else if QRYProc.Fields[i-1].FieldName = 'Text08' then
             oSheet.Cells.Item[1,i] := 'città'
          else if QRYProc.Fields[i-1].FieldName = 'Text09' then
             oSheet.Cells.Item[1,i] := 'Prov.'
          else if QRYProc.Fields[i-1].FieldName = 'Text10' then
             oSheet.Cells.Item[1,i] := 'Telefono'
          else if QRYProc.Fields[i-1].FieldName = 'Text11' then
             oSheet.Cells.Item[1,i] := 'rec. cellulare'
          else if QRYProc.Fields[i-1].FieldName = 'Text12' then
             oSheet.Cells.Item[1,i] := 'e-mail 1'
          else if QRYProc.Fields[i-1].FieldName = 'Text13' then
             oSheet.Cells.Item[1,i] := 'e-mail 2'
          else if QRYProc.Fields[i-1].FieldName = 'Text14' then
             oSheet.Cells.Item[1,i] := 'Divisione 1'
          else if QRYProc.Fields[i-1].FieldName = 'Text15' then
             oSheet.Cells.Item[1,i] := 'Divisione 2'
          else if QRYProc.Fields[i-1].FieldName = 'Text16' then
             oSheet.Cells.Item[1,i] := 'Divisione 3'
          else if QRYProc.Fields[i-1].FieldName = 'Text17' then
             oSheet.Cells.Item[1,i] := 'mod. Acquisizione Cliente'
          else if QRYProc.Fields[i-1].FieldName = 'Text18' then
             oSheet.Cells.Item[1,i] := 'DATA Acquisizione Cliente'
          else if QRYProc.Fields[i-1].FieldName = 'Text19' then
             oSheet.Cells.Item[1,i] := 'PRATICA'
          else if QRYProc.Fields[i-1].FieldName = 'Text20' then
             oSheet.Cells.Item[1,i] := 'descrizione'
          else if QRYProc.Fields[i-1].FieldName = 'Text21' then
             oSheet.Cells.Item[1,i] := 'data Partenza'
          else if QRYProc.Fields[i-1].FieldName = 'Text22' then
             oSheet.Cells.Item[1,i] := 'Importo Pratica'
           else
             oSheet.Cells.Item[1,i] := QRYProc.Fields[i-1].FieldName;
    
         oSheet.Cells.Item[1,i].Interior.Color := clred;
         oSheet.Cells.Item[1,i].Font.Color := clwhite;
         oSheet.Cells.Item[1,i].Font.Bold := true;
         OSheet.Cells.Item[1,i].Font.Size := 12;
      end;
    
      QRYProc.First;
      // Scrivo i Dati
      while (NOT QRYProc.Eof) do begin
           Inc(iRow);
           for iCol:=1 to QRYProc.FieldCount do begin
              oSheet.Cells.Item[iRow,iCol] := QRYProc.Fields[iCol-1].AsString;
    
              if (QRYProc.Fields[1].AsString <> '') then
                 oSheet.Cells.Item[iRow,iCol].Interior.Color := claqua;
              if (iCol = 5) then
                 oSheet.Cells.Item[iRow,iCol].HorizontalAlignment := XlHAlignCenter;
              if (iCol = 18) then
                 oSheet.Cells.Item[iRow,iCol].HorizontalAlignment := XlHAlignCenter;
              if (iCol = 21) then
                 oSheet.Cells.Item[iRow,iCol].HorizontalAlignment := XlHAlignCenter;
              if (iCol = 22) then
                 oSheet.Cells.Item[iRow,iCol].HorizontalAlignment := XlHAlignRight;
           end;
        QRYProc.Next;
        Gauge1.Progress := Gauge1.Progress+1;
      end;
    
      // Rinomino il Foglio
      oSheet.Name := ANameSheet;
      oSheet.Columns.AutoFit;
    
      // Sovrascrivo File
      if fileExists(Afile) then begin
         beep;
         showMessage('FileExists');
         DeleteFile(AFile);
      end;
    
      oSheet.SaveAs(AFile);
      oSheet.Disconnect;
      oSheet.Free;
    
      QRYProc.EnableControls;
    
      oWorkbook.Disconnect;
      oWorkbook.Free;
     
      oExcel.Quit;
      oExcel.Disconnect;
      oExcel.Free;
    end;
    
    Il nome delle colonne utilizza il RIGO 1 e quindi è soggetto allo 'SCROLL' della pagina
    nascondendosi, quindi, all'operatore.
    Ho usato le proprietà 'oSheet.Cells.Item' per manipolare alcuni parametri
    ma non riesco a effettuare il BLOCCO DEL RIGO SUPERIORE che normalmente
    si effettua direttamente su EXCEL a questo scopo.
    Qualche suggerimento ?

  2. #2
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Quote Originariamente inviato da Monti Visualizza il messaggio
    sto esportando alcuni dati da una tabella ad un foglio excel [...]
    ma non riesco a effettuare il BLOCCO DEL RIGO SUPERIORE che normalmente
    si effettua direttamente su EXCEL a questo scopo.
    Potresti provare con qualcosa del genere:

    oSheet.Range("A2").Select();
    oWorkbook.Application.ActiveWindow.FreezePanes := True;
    
    Ciao!
    ℹ️ Leggi di più su _alka_ ...

  3. #3
    Monti non è in linea Scolaretto
    non funziona...
    non riconosce il valore RANGE delimitato in quel modo...

  4. #4
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Quote Originariamente inviato da Monti Visualizza il messaggio
    non funziona...
    non riconosce il valore RANGE delimitato in quel modo...
    Ovvero, qual è l'errore?
    Hai fatto anche qualche ulteriore prova leggendo la documentazione dell'interfaccia COM di Excel o cercando altri esempi?

    Va bene la difficoltà, ma fermarsi subito dopo il primo ostacolo non mi sembra proficuo.
    Se invece hai fatto altre prove, magari con esito parziale, è bene saperlo per capire cosa si potrebbe sperimentare.

    Ciao!
    ℹ️ Leggi di più su _alka_ ...

  5. #5
    Monti non è in linea Scolaretto
    Infatti infatti, ci sto provando..
    Se A2 rappresenta la cella, intanto il range dovrebbe essere racchiuso da [] e rappresentato da almeno due valori [A2;F2] ma non lo accetta.... sto provando con le coordinate row, col. Ma al momento non va

  6. #6
    Hai provato con

    ....Range['A2','F2']....

    ?
    ℹ️ Leggi di più su AntonioG ...

  7. #7
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Quote Originariamente inviato da Monti Visualizza il messaggio
    Infatti infatti, ci sto provando.. non lo accetta.... non va
    Ok, ma quando ci provi, non scrivere "non lo accetta" oppure "non va": ti darà pure un messaggio di errore esplicito, quindi scrivi i tuoi tentativi e riporta il messaggio di errore, altrimenti non è possibile capire quale sia la cosa che da fastidio al compilatore, anche se guardando l'esempio iniziale (che era grossomodo uno pseudocodice), i valori che devi indicare sono due, e si tratta di stringhe, quindi nelle regole del Delphi Pascal (che dovresti conoscere) i testi si indicano con apice singolo e la separazione con la virgola.

    Hai provato quindi queste alternative?
    oSheet.Range['A2'].Select();
    oSheet.Range['A2','F2'].Select();
    

    Quote Originariamente inviato da Monti Visualizza il messaggio
    intanto il range dovrebbe essere racchiuso da [] e rappresentato da almeno due valori [A2;F2]
    Non so se Delphi li richiede forzatamente, ma in realtà il range non deve essere rappresentato da due valori in questo caso, poiché il blocco viene attivato sull'intera riga, e quindi è sufficiente indicare una sola delle sue celle per bloccarla tutta (anche se tu selezionassi da A2 a F2, l'intera riga 2 verrebbe bloccata).

    Ciao!
    ℹ️ Leggi di più su _alka_ ...

  8. #8
    Monti non è in linea Scolaretto
    allora,
    il formato corretto è il seguente:
    oSheet.Range['A1','F1'].Select();
      oWorkbook.Application.ActiveWindow.FreezePanes := True;
    
    Però, in questo modo BLOCCA le prime 12 righe del foglio
    che rappresenta il comando EXCEL 'BLOCCA RIQUADRO'
    Mentre a me necessita che blocchi solo il primo rigo
    costituito dai TITOLI.
    Ora proverò ad INGLOBARE il RANGE all'interno del comando
    oWorkbook.Application.ActiveWindow.FreezePanes := True;
    

  9. #9
    Monti non è in linea Scolaretto
    Errore...
    Il problema non è la sequenza dei comandi bensì la definizione del range..
    Il manuale di Excel dice che per freezare il rigo 1 bisogno selezionare il rigo
    Successivo (2) e poi lanciare il comando BLOCCA RIQUADRO
    Riconducendo a noi inserendo il codice
    oSheet.Range['A2'].Select();
      oWorkbook.Application.ActiveWindow.FreezePanes := True;
    
    Si ottiene il blocco del rigo 1

  10. #10
    L'avatar di _alka_
    _alka_ non è in linea Very Important Person
    Quote Originariamente inviato da Monti Visualizza il messaggio
    Il problema non è la sequenza dei comandi bensì la definizione del range..
    Era una cosa che ti avevo preventivato: non serviva indicare una colonna di destinazione, in quanto il blocco avviene comunque sull'intero rigo, quindi bastava una coordinata.

    Quote Originariamente inviato da Monti Visualizza il messaggio
    Il manuale di Excel dice che per freezare il rigo 1 bisogno selezionare il rigo
    Successivo (2) e poi lanciare il comando BLOCCA RIQUADRO
    E' per quello che si parlava sempre di A2...

    Quote Originariamente inviato da Monti Visualizza il messaggio
    Riconducendo a noi inserendo il codice
    [...]
    Si ottiene il blocco del rigo 1
    Quindi il problema è risolto definitivamente?
    ℹ️ Leggi di più su _alka_ ...

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Creazione file Excel da file csv
    Da pierovb nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 08-03-2018, 20:16
  2. Creazione unico file excel.
    Da therock979 nel forum C#
    Risposte: 1
    Ultimo Post: 26-03-2016, 16:02
  3. creazione file riepilogativo excel
    Da picchi2701 nel forum Microsoft Excel
    Risposte: 3
    Ultimo Post: 18-11-2011, 11:45
  4. [Excel] Problema macro per creazione file csv
    Da daniele1306 nel forum Microsoft Excel
    Risposte: 3
    Ultimo Post: 17-12-2010, 10:43
  5. Creazione file di Word da Excel [Era: Automazioni]
    Da euris nel forum Microsoft Excel
    Risposte: 3
    Ultimo Post: 22-05-2008, 21:48