Archive

Posts Tagged ‘Excel’

Inviare una mail (con allegato) utilizzando CDOSYS

November 19th, 2009 Nicola No comments

La libreria CDOSYS, come descritto qui http://msdn.microsoft.com/en-us/library/aa505938.aspx, è una implementazione del protocollo SMTP, e consente di mandare agevolmente mail da sistemi basati su Windows XP e 2000, dove queste librerie sono presenti di default.
Il codice sottostante fa parte di una macro in ambiente Excel 2007, e gira sia sotto XP che Vista.

Public Function inviaMailSMTP(server As String, 
                                         mittente As String, destinatario As String, 
                                         oggetto As String, testo As String, allegato As String) 
                                         As StringDim iMsg As Object
 
Dim iConf As Object
Dim Flds As ObjectOn Error GoTo error_handler
 
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
 
iConf.Load -1
Set Flds = iConf.Fields
With Flds
   .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
   .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = server
   .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 
   .Update
End With
 
With iMsg
   Set .Configuration = iConf
   .To = destinatario
   .CC = ""
   .BCC = ""
   .From = mittente
   .Subject = oggetto
   .TextBody = testo
   'Invio con allegato
   If allegato > "" Then .AddAttachment allegato
   .Send
End With
 
inviaMailSMTP = "Invio corretto."
 
Exit Function
 
error_handler:
   inviaMailSMTP = "Errore: " & Err.Description
End Function

Excel: Impossibile impostare la proprietà LineStyle per la classe Border

January 13th, 2009 Nicola No comments

Si parla di Excel 2000 e 2003, non ho ancora provato sul 2007.
Ho avuto bisogno di aggiungere, via macro vba dei bordi ad alcune celle. Mi sono fatto dire da Excel come fare, registrando una macro. il risultato è stato il seguente:

Range("E30:M30").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

Se lanciate la macro, non va, e segnala il seguente errore:

errore di run-time 1004: Impossibile impostare la proprietà LineStyle per la classe Border

La soluzione all’inghippo l’ho trovata da mamma Microsoft:

http://support.microsoft.com/kb/277577/it

Il motivo, tradotto in automatico, è il seguente:

È visualizzato il messaggio di errore poiché il codice di record macro (riguardanti la proprietà XlInsideHorizontal ) è non valido per un intervallo bordato con solo una riga.

La proprietà XlInsideHorizontal è valida solo se si “bordano” almeno due righe, non una sola.

Quindi danno la soluzione: commentare il blocco riguardante la proprietà XlInsideHorizontal.

In questo modo la macro funzione correttamente.

Leggere i dati da un foglio Excel in Java

December 9th, 2008 Nicola No comments

Java e Excel… mah…

Prendete il foglio Excel, compilate una tabella ed assegnatele un nome:

excel21

A questo punto potete chiudere Excel e disinstallarlo. Non serve infatti che Excel sia installato sulla macchina in cui si trova il file che abbiamo appena creato.

Occorre però essere in ambiente Windows, perchè dobbiamo creare un ODBC verso quel file, utilizzando il driver per Excel della Microsoft. Se l’ODBC si chiama TESTODBC, il seguente codice:

Connection con;
Statement stmt;
ResultSet rs;try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:TESTODBC", "", "");
stmt = con.createStatement();

rs = stmt.executeQuery("SELECT * FROM TABELLAODBC");

while (rs.next()) {
System.out.println(rs.getString(1));
System.out.println(rs.getString(2));
System.out.println(rs.getString(3));
}

}
catch(SQLException e) {
System.out.println("Ops... " + e);
}
catch (ClassNotFoundException cl) {
System.out.println("Ops..." + cl);
}

Restituisce il risultato:

Mario
Bianchi
2
Mario
Rossi
3

Categories: Database, Java, Microsoft Office Tags: , ,

Promemoria: Excel 2007, creare una colonna con i valori distinti di un’altra colonna

December 1st, 2008 Nicola 1 comment

In Excel 2007 c’è una funzione, da menù, che elimina le righe doppie da una colonna selezionata, sotto “Data” –> “Remove Duplicates”

Questo pezzettino di codice fa si che, all’apertura del file, vengano presi i dati presenti nella colonna A del foglio 1, copiati nella colonna A del foglio 2 ed in quest’ultima elimininate tutte le righe doppie.

Sheets("Sheet1").Select
Range("A1:A5").Select
Selection.Copy

Sheets("Sheet2").Select
Range("A1:A1").Select
ActiveSheet.Paste

Application.CutCopyMode = False
ActiveSheet.Range("$A$1:$A$5").RemoveDuplicates Columns:=1, Header:=xlNo

Range("A1").Select

Excel 2007, attivare il Design Mode (modalità struttura)

August 23rd, 2008 Nicola 1 comment

Per attivare la buona vecchia modalità struttura su un foglio excel 2007 occorre prima visualizzare la tab Developer sulla Ribbon. Per farlo è sufficiente andare in

Excel Options – > Popular

e selezionare: Show Developer Tab in the Ribbon

Da qui è possibile passare in Design Mode (Modalità struttura), inserire oggetti e altre cose.

Categories: Microsoft Office Tags: ,