Come sostituire vba con Python in excel

XLWINGS e’ un buon prodotto, leggero e free. Permette di collegare del codice python a dei fogli excel potendo cosi’ sostituire il vba interno a con moduli python esterni con tutti i vantaggi del caso (e qualche piccolo svantaggio). Procedere cosi’:

  • Installare Office
  • Impostare policy in windows, da powershell COME AMMINISTRATORE: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
  • Controllare che sia tutto ok digitando python dovrebbe apparire la console simile a questa (uscire con control+Z):
  • Installare l’estensione xlwings che collega excel a python con: pip install xlwings
  • Installare i vari componenti aggiuntivi con (aspettare la fine, dura un po’): pip install “xlwings[all]”
  • Aggiungere l’addin a excel con: xlwings addin install
  • Se tutto ok in excel saranno visibili i nuovi settaggi:
  • Settare l’addin all’interno di VBA editor, prima abilitando gli oggetti developer in excel con file→Options→ Customize ribbon → Developer poi Visual Basic –> Tool–>Reference click su xlwings:
  • Tutto pronto! Per creare un nuovo foglio excel con un minimo di configurazione andare in una cartella del pc e lanciare: xlwings quickstart test verra’ creata una cartella test con un foglio di excel e un modulo python collegato.
  • Seguire poi la documentazione da qui https://docs.xlwings.org/en/stable/quickstart.html
VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

VBA/excel macro per leggere un file csv

Creare una macro e inserire questo codice:

Dim FileDaLeggere As String
Dim riga As String

FileDaLeggere = “C:\temp\ciao.csv”

On Error Resume Next

Range(“A1”).Activate
row_number = 0
Open FileDaLeggere For Input As #1

Do Until EOF(1)
Line Input #1, riga
campi = Split(riga, “,”)
ActiveCell.Offset(row_number, 0).Value = Replace(campi(0), Chr(34), “”)
ActiveCell.Offset(row_number, 1).Value = Replace(campi(1), Chr(34), “”)
ActiveCell.Offset(row_number, 2).Value = Replace(campi(2), Chr(34), “”)
row_number = row_number + 1
Loop

Close #1

Sostituire FileDaLeggere con il file effettivo e campi(0) , campi(1) etc con il numero della colonna interessata.

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)

VBA/excel macro per scrivere un file csv

Creare una nuova macro e inserire questo codice:

Dim FileDaScrivere As String
Dim campo As String
Dim rng As Range
Dim riga As Integer

FileDaScrivere = “C:\temp\ciao.csv”
Open FileDaScrivere For Output As #1

For riga = 1 To 10
campo = ActiveSheet.Range(“A” & riga)
Write #1, campo,
campo = ActiveSheet.Range(“B” & riga)
Write #1, campo,
campo = ActiveSheet.Range(“C” & riga)
Write #1, campo,
campo = ActiveSheet.Range(“D” & riga)
Write #1, campo
Next riga

Close #1

Cambiare il percorso di output e le colonne da scrivere (FileDaScrivere e ActiveSheet.Range).

 

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)

Excel shortcut

Cercavo una scorciatoia da tastiera in excel e mi sono imbattuto sulla pagina ufficiale con tutti gli shortcut … sono rimasto impressionato.

La pagina e’ questa:

https://support.office.com/en-us/article/Excel-keyboard-shortcuts-and-function-keys-for-Windows-1798d9d5-842a-42b8-9c99-9b7213f0040f

Quando ho tempo la leggo tutta 🙂

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)

Schermata grigia in excel 2016

Installando Office2016 può succedere che all’apertura dei documenti xls e xlsx (documenti excel) non si aprano correttamente ma si visualizzi una schermata grigia. In realtà si viene aperto solo excel ma non il documento. Ho letto commenti in internet che mi fanno sorridere in quanto affermano fantomatiche incompatibilità con Openoffice suggerendo di disinstallare quest’ultimo. In realtà il problema è che Office 2016 non si è installato correttamente (specialmente se già esiste una versione precedente) e la soluzione è quella di reinstallare office 2016 (o di rimuoverlo definitivamente 🙂 )

VN:F [1.9.22_1171]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Compatibilità Macro Office/Openoffice/libreoffice

Segnalo questo post dove si spiega come rendere operative le macro di Microsoft Office sulla piattaforma OpenOffice/LibreOffice:

https://forum.openoffice.org/it/forum/viewtopic.php?f=6&t=1574

In breve vanno aggiunte le istruzioni in testa alla macro per renderle compatibili:

Rem Attribute VBA_ModuleType=VBAModule
Option VBASupport 1

Segnalo che macro complesse vanno riscritte nativamente

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Excel e VBA

Oggi ho dovuto scrivere delle macro in excel che scorrevano celle e impostavano vari calcoli. Ho riassunto alcune funzioni come promemoria, se avete bisogno o volete giocare con le macro:

  • Aprite excel
  • premete ALT+F8 per gestire le macro
  • Nuova Macro e inserite il codice seguente:

Dim sh As Worksheet

Dim lRiga As Long
Dim lCol As Long
Dim Contatore As Integer

Sheets(“Foglio1”).Select
Set sh = ThisWorkbook.Worksheets(“Foglio1”)

‘————————————–
Contatore = 0

With sh
 For lRiga = 1 To 5
  For lCol = 1 To 3
   ‘—– Test contenuto di una cella
   ‘ If .Cells(lRiga, lCol).Value = “www” Then
   ‘ Range(.Cells(lRiga, lCol).Address) = “TROVATO”
   ‘ End If
                    
   ‘—– Coordinate cella
   ‘ MsgBox “Coordinate cella –> ” + .Cells(lRiga, lCol).Address
                 
   ‘—– Imposto un Contatore
   Contatore = Contatore + 1
   ‘ MsgBox (“Contatore –> ” & Contatore)
                    
   ‘—– Visualizzo il Contenuto di una Cella
   MsgBox “Contenuto cella –> ” & .Cells(lRiga, lCol).Value
                    
   ‘—– Imposto il contenuto di una cella variabile
   ‘ Range(.Cells(lRiga, lCol).Address) = Contatore
                 
   ‘—– Imposto il contenuto della cella successiva
   ‘ Range(.Cells(lRiga, (lCol + 1)).Address) = “X”
                 
   ‘—– Imposto il contenuto della riga successiva
   ‘ Range(.Cells((lRiga + 1), lCol).Address) = “X”
                    
  Next
 Next
End With

Set sh = Nothing

‘ Determinare il numero righe esistenti
    
‘NumeroRighe = ContaRighe(“Tutti”, 1, 4)
MsgBox “Il numero dell’ ultima riga occupata nelle prime 4 colonne è :   ” & NumeroRighe
    
End Sub

Function ContaRighe(WS$, MinCol, MaxCol)

Dim Contatore
For COLONNA = MinCol To MaxCol
Ur = Worksheets(WS$).Cells(65536, COLONNA).End(xlUp).Row ‘ Ur = Ultima riga
valore = Worksheets(WS$).Cells(Ur, COLONNA).Value
If Contatore < Ur And valore <> “” Then
 Contatore = Ur
End If
Next COLONNA
ContaRighe = Contatore

End Function

Allego un foglio già pronto scaricabile da qui –> Prove_Excel

 

VN:F [1.9.22_1171]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.22_1171]
Rating: 0 (from 0 votes)

Utilizzo i cookie per essere sicuro che tu possa avere la migliore esperienza sul mio sito. Se continui ad utilizzare questo sito assumo che tu ne sia felice.. maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi