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

Discussione: [VB NET 2010] Inserimento foto in una determinata cella excel

  1. #1
    ljt
    ljt non è in linea Scolaretto
    Post
    88

    [VB NET 2010] Inserimento foto in una determinata cella excel

    Salve,

    vorrei inserire in un foglio excel delle immagini in una determinata cella in modo che vengano salvate nel documento stesso e non solo importate come link.
    In pratica:
    Per incorporare le immagini, cioè salvarle nel documento, ho usato il seguente comando:
    codice:
    oExc.ActiveSheet.Shapes.AddPicture(PercorsoImmagine, False, True, 0, 120, -1, -1)
    Ma così devo specificare quanto spazio (120) devo lasciare dall'inizio del documento.
    Mentre usando il comando:
    codice:
    FoglioExcel.Range("A10").Select()
    FoglioExcel.Pictures.Insert(PercorsoImmagine)
    Mi viene inserito il link all'immagine nella cella A10 ma, se l'immagine viene spostata, nel dcumento excel non viene più visualizzata.

    Qual'è l'istruzioni per salvare e incorporare un'immagine in un foglio excel dando come punto di inserimento una determinata cella e non gli spazi da lasciare dalla testata del documento?

    Grazie a tutti in anticipo

  2. #2
    patel45 non è in linea Scolaretto
    Post
    226
    prova così
    codice:
    With FoglioExcel.Range("A10")
      FoglioExcel.Shapes.AddPicture Filename:=fName, LinkToFile:=False, SaveWithDocument:=True, Left:=.Left, Top:=.Top, Width:=30, Height:=30
    End With

  3. #3
    ljt
    ljt non è in linea Scolaretto
    Post
    88
    Quote Originariamente inviato da patel45 Visualizza il messaggio
    prova così
    codice:
    With FoglioExcel.Range("A10")
      FoglioExcel.Shapes.AddPicture Filename:=fName, LinkToFile:=False, SaveWithDocument:=True, Left:=.Left, Top:=.Top, Width:=30, Height:=30
    End With
    Ciao patel45,
    il codice che mi hai postato funziona.
    Lo riposto perchè, a causa di un problema di formattazione il codice viene visualizzato in modo errato, nonostante fosse stato scritto correttamente.
    codice:
            With FoglioExcel.Range("A10")
                FoglioExcel.Shapes.AddPicture(PercorsoFoto, False, True, .Left, .Top, 130, 200)
            End With
    Dato che ho dovuto modificare le dimensioni della cella, è possibile fare in modo che l'immagine mi venga centrata?
    Ho provato a modificare le opzioni .let e .top con .center, ma, ovviamente, non funziona.

    Grazie

  4. #4
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    15,619
    Blogs
    5
    left e top sono proprietà non opzioni

    Impostale facendo il semplice calcolo sfruttando la larghezza
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  5. #5
    patel45 non è in linea Scolaretto
    Post
    226
    codice:
    With FoglioExcel.Range("A10")
          FoglioExcel.Shapes.AddPicture(PercorsoFoto, False, True, .Left+2, .Top+2, .Width-2, .Height-2)
    End With

  6. #6
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    78
    .Center ti da errore perché non è una proprietà dell'oggetto Range.

    Puoi però sfruttare .Left e .Top per ricalcolarti la nuova posizione e inserire quelli come parametri del metodo:
    codice:
    NuovoLeft = .Left + (.Width - LarghezzaImmagine)/2
    NuovoTop = .Top + (.Height - AltezzaImmagine)/2

  7. #7
    ljt
    ljt non è in linea Scolaretto
    Post
    88
    Quote Originariamente inviato da patel45 Visualizza il messaggio
    codice:
    With FoglioExcel.Range("A10")
          FoglioExcel.Shapes.AddPicture(PercorsoFoto, False, True, .Left+2, .Top+2, .Width-2, .Height-2)
    End With
    In questo modo l'immagine mi viene inserita, ma non mi viene centrata.
    Scusami ma le proprietà .Left+2, .Top+2, .Width-2, .Height-2 cosa restituiscono?
    Se non erro dovrebbero restituire:
    .Top posizione dall'alto.
    .Height posizione dalla sinistra della cella.
    .Widht e .Height la dimensione dell'immagine.

    Sbaglio?
    Scusami delle banalità delle domande.

    Grazie

  8. #8
    ljt
    ljt non è in linea Scolaretto
    Post
    88
    Quote Originariamente inviato da Sgrubak Visualizza il messaggio
    .Center ti da errore perché non è una proprietà dell'oggetto Range.

    Puoi però sfruttare .Left e .Top per ricalcolarti la nuova posizione e inserire quelli come parametri del metodo:
    codice:
    NuovoLeft = .Left + (.Width - LarghezzaImmagine)/2
    NuovoTop = .Top + (.Height - AltezzaImmagine)/2
    Ciao Sgrubak,

    grazie per la risposta.
    In questo modo, da quello che ho capito, dovrebbe calcolare "le coordinate" per centrare l'immagine nella cella in base alle dimensioni della cella e dell'immagine stessa.
    ho provato a scrivere il seguente codice:
    [CODICE]
    With FoglioExcel.Range("A10")
    FoglioExcel.Shapes.AddPicture(PercorsoFoto, False, True, .Left(.Width - 130) / 2, .Top + (.Height - 200) / 2, .Width - 2, .Height - 2)
    End With
    [/CODICE]

    Ma mi restituisce l'errore:
    Nessun membro predefinito trovato per il tipo 'Double'.

    Mi potresti dare qualche delucidazione?

    Grazie infinite.

  9. #9
    Sgrubak non è in linea Scolaretto
    Luogo
    Torrazza Piemonte
    Post
    78
    codice:
    With FoglioExcel.Range("A10")                         '<--- Attento a chiudere i doppi apici e la parentesi in questa riga
    FoglioExcel.Shapes.AddPicture(PercorsoFoto, False, True, .Left(.Width - 130) / 2, .Top + (.Height - 200) / 2, .Width - 2, .Height - 2)
    End With
    Guarda su MSDN come il metodo funziona e quali parametri accetta in ingresso: Shapes.AddPicture

    Vedrai che i parametri Left e Top (che non sono la stessa cosa di .Top e .Left, questi sono le proprietà dell'oggetto Range) sono obbligatori e di tipo Single.
    Con le operazioni di calcolo, probabilmente la "formula" [.Left(.Width - 130) / 2] restituisce un tipo Double e quindi non gli piace, perché non può fare un Cast implicito del valore (ovviamente perché un double potrebbe non starci in un Single).

    Quindi dichiara tu due variabili di tipo Single e poi usa quelle come parametri, o, a discapito della leggibilità del codice usa la funzione CSng direttamente nel metodo.

    Spero di essere stato chiaro.

  10. #10
    patel45 non è in linea Scolaretto
    Post
    226
    Quote Originariamente inviato da ljt Visualizza il messaggio
    In questo modo l'immagine mi viene inserita, ma non mi viene centrata.
    ho sbagliato io
    codice:
    With FoglioExcel.Range("A10")
          FoglioExcel.Shapes.AddPicture(PercorsoFoto, False, True, .Left+2, .Top+2, .Width-4, .Height-4)
    End With
    in pratica lasci un bordo di 2 pixel rispetto alla cella

+ Rispondi al Thread
Pagina 1 di 2 12 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi