<?xml version="1.0" encoding="iso-8859-1"?><feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="it-it"><title>PeppeDotNet Blog - Category: VSTO</title><link rel="alternate" type="text/html" href="http://www.peppedotnet.it/Blog/"/><tagline type="text/html">www.peppedotnet.it/Blog/</tagline><id>http://www.peppedotnet.it/Blog/</id><modified>2006-12-27T18:42:7+01:00</modified><author><name>Marchi Giuseppe</name><url>http://www.peppedotnet.it/Blog/</url></author><entry><title>Come selezionare un range di celle ed assegnargli una funzione</title><id>/Blog/SelectCellsRangeAndAssignFunction.aspx</id><created>2006-12-27T18:42:7+01:00</created><content type="text/html" mode="escaped">Continua la mia esplorazione su VSTO e la sua implementazione per quanto riguarda Excel. Sono rimasto stupito dal fatto che credo che non ci sia una classe per rappresentare la singola cella (o almeno in questa versione che ho io del runtime, che non è la Second Edition, quella uscita poco tempo fa).
&lt;br /&gt;C'è invece un tipo per rappresentare un range di celle; il tipo cui mi riferisco è Range, sotto il namespace Microsoft.Office.Interop.Excel e ogni foglio del workbook ne implementa una proprietà, utile appunto per selezionare un insieme di più celle.
&lt;br /&gt;Ecco come selezionare le prime 10 celle della colonna B e assegnargli come valore il risultato di un'operazione di percentuale:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;private&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Foglio3_Startup(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, System.EventArgs e)
&lt;br /&gt;{
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.Range[&lt;span style="color: #A31515"&gt;"B1"&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"B10"&lt;/span&gt;].FormulaLocal = &lt;span style="color: #A31515"&gt;"=(A1/10)*100"&lt;/span&gt;;
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Ecco, questo codice riporta la medesima formula in tutte le prime 10 righe della colonna B, incrementando il valore dei riferimenti alle celle inseriti all'interno della formula stessa. Quindi, A1 nella seconda riga diventerà A2, nella terza A3 e così via.
&lt;br /&gt;
&lt;br /&gt;Se volessimo invece mantere il valore A1 presente nella formula, come valore fisso dobbiamo modificare la formula come segue:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;private&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Foglio3_Startup(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, System.EventArgs e)
&lt;br /&gt;{
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.Range[&lt;span style="color: #A31515"&gt;"B1"&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"B10"&lt;/span&gt;].FormulaLocal = &lt;span style="color: #A31515"&gt;"=(A$1/10)*100"&lt;/span&gt;;
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;Chiaramente, alla proprietà FormulaLocal possiamo assegnare stringhe contenenti tutte le funzioni presenti all'interno di Excel.
&lt;br /&gt;Inoltre, la classe Range, ci permette anche di selezionare una singola cella, in modo tale da poterne modificare il contenuto o assegnare delle funzioni. Basta semplicemente dare come cella d'inizio e di fine del range, la medesima cella che vogliamo selezionare.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;private&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; Foglio3_Startup(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, System.EventArgs e)
&lt;br /&gt;{
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.Range[&lt;span style="color: #A31515"&gt;"C1"&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"C1"&lt;/span&gt;].Value2 = &lt;span style="color: #A31515"&gt;"Media percentuali"&lt;/span&gt;;
&lt;br /&gt;        &lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.Range[&lt;span style="color: #A31515"&gt;"C2"&lt;/span&gt;, &lt;span style="color: #A31515"&gt;"C2"&lt;/span&gt;].FormulaLocal = &lt;span style="color: #A31515"&gt;"=SOMMA(B1:B10)"&lt;/span&gt;;
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;</content><link rel="alternate" type="text/html" href="/Blog/SelectCellsRangeAndAssignFunction.aspx" /><issued>2006-12-27T18:42:7+01:00</issued><modified>2006-12-27T18:42:7+01:00</modified></entry><entry><title>VSTO ed Excel ... primo impatto</title><id>/Blog/VSTOExcelPrimoImpatto.aspx</id><created>2006-12-27T15:50:9+01:00</created><content type="text/html" mode="escaped">Era da tanto che mi ero promesso di iniziare a fare qualcosa con i Visual Studio Tools for Office (VSTO), e in queste vacanze ho finalmente trovato il tempo.
&lt;br /&gt;Inizialmente ero veramente incuriosito dal prodotto, perchè lavorando con sharepoint sono sempre stato molto interessato dalle integrazioni che esistono tra i prodotti del pacchetto Office e il resto, e fin'ora non sono rimasto per niente deluso.
&lt;br /&gt;In passato avevlo lavorato un pò con le macro in VBA, e devo dire che con questo nuovo prodotto non c'è proprio storia... In pratica, è possibile attaccare degli assembly scritti e compilati con il .NET Framework 2.0 a dei documenti Word, Excel o scrivere degli add-in per Outlook.
&lt;br /&gt;Una volta installato infatti, VSTO aggiunge un nuovo insieme di template per Visual Studio:&lt;ul&gt;&lt;li&gt;Excel Workbook&lt;/li&gt;&lt;li&gt;Excel Template&lt;/li&gt;&lt;li&gt;Outlook add-in&lt;/li&gt;&lt;li&gt;Word Document&lt;/li&gt;&lt;li&gt;Word Template&lt;/li&gt;&lt;/ul&gt;Dati quindi i &lt;a href="http://www.peppedotnet.it/Articoli/Leggere_dati_da_Excel.aspx" title="Leggere dati da Excel con OleDB "&gt;miei&lt;/a&gt; &lt;a href="http://www.peppedotnet.it/Articoli/Scrivere_dati_su_Excel.aspx" title="Creare nuovi fogli di lavoro Excel, con .NET "&gt;lavori&lt;/a&gt; nel passato, ho deciso subito di provare l'integrazione con Excel.
&lt;br /&gt;Ragazzi se ce ne sono da fare di cose... E' possibile scrivere codice in delle classi rappresentanti il singolo foglio di lavoro o l'intero workbook (la classe ThisWorkbook), iterare tra tutte le colonne e le celle di ogni foglio, inserire nuovi valori e delle funzioni all'interno delle celle e aggiungere all'interno di un qualsiasi foglio una buona parte dei controlli per windows form presenti nel .NET Framework 2.0, qunidi avere pulsanti, caselle di testo o di scelta e tanto altro pronti per interagire con il foglio attivo.
&lt;br /&gt;Chiaramente poi, è possibile effettuare una quantità di operazioni decisamente superiore a quanto era possibile fare con le Macro scritte in VBA.
&lt;br /&gt;Nell'integrazione con Excel, una volta creato un nuovo progetto, è possibile utilizzare la classe statica Globals per poter richiamare uno dei fogli presenti o l'intero workbook:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;Globals.Foglio1.Cells[1, &lt;span style="color: #A31515"&gt;"A"&lt;/span&gt;] = &lt;span style="color: #A31515"&gt;"Hello VSTO !"&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;inoltre è possibile inserire del codice per gestire gli eventi di starup e di shutdown del file di Excel:
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;private&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; InternalStartup()
&lt;br /&gt;{
&lt;br /&gt;      &lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.Startup += &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; System.EventHandler(ThisWorkbook_Startup);
&lt;br /&gt;      &lt;span style="color: #0000FF"&gt;this&lt;/span&gt;.Shutdown += &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; System.EventHandler(ThisWorkbook_Shutdown);
&lt;br /&gt;
&lt;br /&gt;      &lt;span style="color: #0000FF"&gt;private&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; ThisWorkbook_Startup(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, System.EventArgs e)
&lt;br /&gt;      {
&lt;br /&gt;            MessageBox.Show(&lt;span style="color: #A31515"&gt;"Workbook startup !"&lt;/span&gt;);
&lt;br /&gt;      }
&lt;br /&gt;
&lt;br /&gt;      &lt;span style="color: #0000FF"&gt;private&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; ThisWorkbook_Shutdown(&lt;span style="color: #0000FF"&gt;object&lt;/span&gt; sender, System.EventArgs e)
&lt;br /&gt;      {}            
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;e inserire del controlli Windows Form all'interno dell'actions pane, presente sulla sinistra di ogni file del pacchetto Office 2003.
&lt;br /&gt;
&lt;br /&gt;&lt;div class="code"&gt;&lt;pre&gt;&lt;span style="color: #0000FF"&gt;private&lt;/span&gt; &lt;span style="color: #0000FF"&gt;void&lt;/span&gt; InternalStartup()
&lt;br /&gt;{
&lt;br /&gt;    &lt;span style="color: #008200"&gt;//...
&lt;/span&gt;

&lt;br /&gt;    System.Windows.Forms.Label copyright = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; System.Windows.Forms.Label();
&lt;br /&gt;    copyright.Font = &lt;span style="color: #0000FF"&gt;new&lt;/span&gt; System.Drawing.Font(&lt;span style="color: #A31515"&gt;"Verdana"&lt;/span&gt;, 10, FontStyle.Bold);
&lt;br /&gt;    copyright.ForeColor = Color.Orange;
&lt;br /&gt;    copyright.Text = &lt;span style="color: #A31515"&gt;"Copyright by peppedotnet.it"&lt;/span&gt;;
&lt;br /&gt;    copyright.Height = 100;
&lt;br /&gt;    copyright.TextAlign = ContentAlignment.BottomLeft;
&lt;br /&gt;    Globals.ThisWorkbook.ActionsPane.Controls.Add(copyright);
&lt;br /&gt;
&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;br /&gt;In questi giorni è uscita la seconda edizione del runtime dei Tools for Office. &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=F5539A90-DC41-4792-8EF8-F4DE62FF1E81&amp;displaylang=it" title="Microsoft Visual Studio 2005 Tools per Office Second Edition Runtime (VSTO 2005 SE) (x86)"&gt;Qui per il download&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;Spero di riuscire a postare anche altro in questi giorni, perchè il prodotto ne vale davvero la pena.</content><link rel="alternate" type="text/html" href="/Blog/VSTOExcelPrimoImpatto.aspx" /><issued>2006-12-27T15:50:9+01:00</issued><modified>2006-12-27T15:50:9+01:00</modified></entry></feed>