<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Excel</title><link>http://blog.shareoffice.it/webmaster/category/10.aspx</link><description>Post ed articoli interessanti su Excel</description><managingEditor>Fulvio Giaccari</managingEditor><dc:language>it-IT</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Fulvio Giaccari</dc:creator><title>LiveCRM.it il primo Microsoft Dynamics CRM Hosting Provider</title><link>http://blog.shareoffice.it/webmaster/archive/2009/05/21/10172.aspx</link><pubDate>Thu, 21 May 2009 07:50:00 GMT</pubDate><guid>http://blog.shareoffice.it/webmaster/archive/2009/05/21/10172.aspx</guid><description>&lt;p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"&gt;&lt;b&gt;&lt;font face="Calibri"&gt;LIVECRM.IT  : IL PRIMO HOSTING PROVIDER PER IL NOLEGGIO DEL MICROSOFT DYNAMICS CRM 4.0&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;I&gt;&lt;FONT face=Calibri&gt;SB Soft S.r.l. mette a disposizione i suoi server per il noleggio del potente software targato Microsoft&amp;#174;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/I&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;o:p&gt;&lt;FONT face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri&gt;Per la prima volta in Italia e in Europa, il CRM 4.0 viene venduto in modalit&amp;#224; Hosting grazie a SB Soft S.r.l., che, in collaborazione con Microsoft&amp;#174;, permette di noleggiare il CRM 4.0 attraverso il sito web &lt;/FONT&gt;&lt;A href="http://www.livecrm.it/"&gt;&lt;SPAN style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none"&gt;&lt;FONT face=Calibri&gt;www.livecrm.it&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri&gt;Tutta la potenza del software leader nel mondo per la gestione dei clienti da oggi pu&amp;#242; essere noleggiato a partire da &amp;#8364; 25,00 + iva al mese. Inoltre, viene data la possibilit&amp;#224; alle aziende di scegliere tra il ventaglio delle soluzioni presentate sul sito quella pi&amp;#249; vicina alle loro esigenze, oppure di utilizzare il software gratuitamente per 30 giorni prima dell&amp;#8217;acquisto.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri&gt;SB Soft S.r.l. ha anche in cantiere un accordo con Poste Italiane per arricchire il software di un componente per l&amp;#8217;invio di telegrammi e raccomandate direttamente dal software.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri&gt;Microsoft Italia ha espresso grande soddisfazione per questo progetto perch&amp;#233; consente alle aziende, in un momento di incertezza economica, di approcciarsi a questa piattaforma senza eccessivi investimenti iniziali per il potenziamento delle proprie capacit&amp;#224; operative e della forza vendita.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri&gt;Microsoft Dynamics CRM 4.0 &amp;#232; un&amp;#8217;applicazione di gestione delle relazioni con i clienti completamente integrata, pensata per le aziende di qualsiasi dimensione. L&amp;#8217;integrazione nativa con Microsoft Outlook permette alle persone di accedere facilmente al sistema mentre l&amp;#8217;interfaccia utente simile ad Outlook diminuisce costi e tempi di formazione. In particolare, Microsoft Dynamics CRM consente al personale di vendita di un&amp;#8217;azienda di gestire le informazioni dei clienti o prospect in modo pi&amp;#249; efficiente, spendendo meno tempo in attivit&amp;#224; amministrative e pi&amp;#249; tempo in attivit&amp;#224; commerciali. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri&gt;Per maggiori informazioni sul prodotto collegarsi al sito &lt;/FONT&gt;&lt;A href="http://www.livecrm.it/"&gt;&lt;FONT face=Calibri&gt;www.livecrm.it&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri&gt; oppure telefonare allo 0832.331040&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"&gt;&lt;FONT face=Calibri&gt;&amp;#8220;Sono molto lieto che un&amp;#8217;azienda come SB Soft abbia scelto di distribuire Dynamics CRM in modalit&amp;#224; hosting&lt;SPAN style="COLOR: #1f497d"&gt; - &amp;nbsp;&lt;/SPAN&gt;dichiara &lt;B&gt;Giovanni Stifano Direttore Divisione Dynamics Microsoft Italia -&lt;/B&gt;&lt;SPAN style="COLOR: #1f497d"&gt; &lt;/SPAN&gt;perch&amp;#233; questa modalit&amp;#224; rappresenta un approccio vincente per le aziende che l&amp;#8217;hanno adottato. &amp;#8220;Abbiamo potuto constatare non solo un importante riduzione nei &amp;nbsp;tempi e nei costi di start up ma anche di quelli mensili a fronte, inoltre, di un rischio per l&amp;#8217;investimento notevolmente ridotto&amp;#8221;.&lt;/FONT&gt;&lt;/P&gt;&lt;/bloghelper&gt;?&gt;&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;img src ="http://blog.shareoffice.it/webmaster/aggbug/10172.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><b><font face="Calibri">LIVECRM.IT  : IL PRIMO HOSTING PROVIDER PER IL NOLEGGIO DEL MICROSOFT DYNAMICS CRM 4.0<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><o:p></o:p></FONT></B></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><I><FONT face=Calibri>SB Soft S.r.l. mette a disposizione i suoi server per il noleggio del potente software targato Microsoft&#174;<o:p></o:p></FONT></I></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><o:p><FONT face=Calibri>&nbsp;</FONT></o:p></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"><FONT face=Calibri>Per la prima volta in Italia e in Europa, il CRM 4.0 viene venduto in modalit&#224; Hosting grazie a SB Soft S.r.l., che, in collaborazione con Microsoft&#174;, permette di noleggiare il CRM 4.0 attraverso il sito web </FONT><A href="http://www.livecrm.it/"><SPAN style="COLOR: windowtext; TEXT-DECORATION: none; text-underline: none"><FONT face=Calibri>www.livecrm.it</FONT></SPAN></A></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"><FONT face=Calibri>Tutta la potenza del software leader nel mondo per la gestione dei clienti da oggi pu&#242; essere noleggiato a partire da &#8364; 25,00 + iva al mese. Inoltre, viene data la possibilit&#224; alle aziende di scegliere tra il ventaglio delle soluzioni presentate sul sito quella pi&#249; vicina alle loro esigenze, oppure di utilizzare il software gratuitamente per 30 giorni prima dell&#8217;acquisto.</FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"><FONT face=Calibri>SB Soft S.r.l. ha anche in cantiere un accordo con Poste Italiane per arricchire il software di un componente per l&#8217;invio di telegrammi e raccomandate direttamente dal software.</FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"><FONT face=Calibri>Microsoft Italia ha espresso grande soddisfazione per questo progetto perch&#233; consente alle aziende, in un momento di incertezza economica, di approcciarsi a questa piattaforma senza eccessivi investimenti iniziali per il potenziamento delle proprie capacit&#224; operative e della forza vendita.</FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"><FONT face=Calibri>Microsoft Dynamics CRM 4.0 &#232; un&#8217;applicazione di gestione delle relazioni con i clienti completamente integrata, pensata per le aziende di qualsiasi dimensione. L&#8217;integrazione nativa con Microsoft Outlook permette alle persone di accedere facilmente al sistema mentre l&#8217;interfaccia utente simile ad Outlook diminuisce costi e tempi di formazione. In particolare, Microsoft Dynamics CRM consente al personale di vendita di un&#8217;azienda di gestire le informazioni dei clienti o prospect in modo pi&#249; efficiente, spendendo meno tempo in attivit&#224; amministrative e pi&#249; tempo in attivit&#224; commerciali. </FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"><FONT face=Calibri>Per maggiori informazioni sul prodotto collegarsi al sito </FONT><A href="http://www.livecrm.it/"><FONT face=Calibri>www.livecrm.it</FONT></A><FONT face=Calibri> oppure telefonare allo 0832.331040</FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"><FONT face=Calibri></FONT>&nbsp;</P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: justify"><FONT face=Calibri>&#8220;Sono molto lieto che un&#8217;azienda come SB Soft abbia scelto di distribuire Dynamics CRM in modalit&#224; hosting<SPAN style="COLOR: #1f497d"> - &nbsp;</SPAN>dichiara <B>Giovanni Stifano Direttore Divisione Dynamics Microsoft Italia -</B><SPAN style="COLOR: #1f497d"> </SPAN>perch&#233; questa modalit&#224; rappresenta un approccio vincente per le aziende che l&#8217;hanno adottato. &#8220;Abbiamo potuto constatare non solo un importante riduzione nei &nbsp;tempi e nei costi di start up ma anche di quelli mensili a fronte, inoltre, di un rischio per l&#8217;investimento notevolmente ridotto&#8221;.</FONT></P></bloghelper>?></font></b></p><img src ="http://blog.shareoffice.it/webmaster/aggbug/10172.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fulvio Giaccari</dc:creator><title>LiveCRM is online</title><link>http://blog.shareoffice.it/webmaster/archive/2009/05/15/10163.aspx</link><pubDate>Fri, 15 May 2009 12:57:00 GMT</pubDate><guid>http://blog.shareoffice.it/webmaster/archive/2009/05/15/10163.aspx</guid><description>&lt;p&gt;&lt;strong&gt;&lt;font size="5"&gt;What is SaaS? (Software-as-a-Service)&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;Instead of owning software - and all the investment, maintenance, and depreciation it entails – you can simply rent use of that software from &lt;strong&gt;&lt;a href="http://www.livecrm.it/home.aspx"&gt;LiveCRM&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Save on: &lt;br /&gt;- Hardware&lt;br /&gt;- Software purchase and updates&lt;br /&gt;- Microsoft Certified Support&lt;br /&gt;- Power&lt;br /&gt;- Security devices&lt;br /&gt;- Remote access devices&lt;br /&gt;- Administration&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Set up is fast&lt;br /&gt;&lt;/strong&gt;Your choice of application(s) can be available to all your team members within hours, compared to months with a physical installation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use it from Anywhere&lt;br /&gt;&lt;/strong&gt;SaaS also offers increased mobility. Workers at multiple office locations, on the road, or at home can use the same essential documents, data, and tools. All you need is Internet access. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;For companies of all sizes&lt;/strong&gt;. &lt;br /&gt;According to a 2006 survey by Forrester Research, SaaS is a good deal for companies with 100 - 499 employees. And "For companies with 50-100 users, SaaS is a slam dunk," says Ray Wang. View the entire report at: Forrester: The ROI Of SaaS. &lt;/p&gt;
&lt;p&gt;See how SaaS with LiveCRM is a better way to use software. We offer a &lt;strong&gt;30-day, money back guarantee&lt;/strong&gt;, and full Microsoft Certified support teams that enable you to be productive within minutes. &lt;br /&gt;&lt;/p&gt;&lt;img src ="http://blog.shareoffice.it/webmaster/aggbug/10163.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p><strong><font size="5">What is SaaS? (Software-as-a-Service)</font></strong><br />Instead of owning software - and all the investment, maintenance, and depreciation it entails – you can simply rent use of that software from <strong><a href="http://www.livecrm.it/home.aspx">LiveCRM</a></strong>.</p>
<p>Save on: <br />- Hardware<br />- Software purchase and updates<br />- Microsoft Certified Support<br />- Power<br />- Security devices<br />- Remote access devices<br />- Administration</p>
<p><strong>Set up is fast<br /></strong>Your choice of application(s) can be available to all your team members within hours, compared to months with a physical installation.</p>
<p><strong>Use it from Anywhere<br /></strong>SaaS also offers increased mobility. Workers at multiple office locations, on the road, or at home can use the same essential documents, data, and tools. All you need is Internet access. </p>
<p><strong>For companies of all sizes</strong>. <br />According to a 2006 survey by Forrester Research, SaaS is a good deal for companies with 100 - 499 employees. And "For companies with 50-100 users, SaaS is a slam dunk," says Ray Wang. View the entire report at: Forrester: The ROI Of SaaS. </p>
<p>See how SaaS with LiveCRM is a better way to use software. We offer a <strong>30-day, money back guarantee</strong>, and full Microsoft Certified support teams that enable you to be productive within minutes. <br /></p><img src ="http://blog.shareoffice.it/webmaster/aggbug/10163.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fulvio Giaccari</dc:creator><title>How to close an Office application with .NET</title><link>http://blog.shareoffice.it/webmaster/archive/2008/07/16/9637.aspx</link><pubDate>Wed, 16 Jul 2008 15:45:00 GMT</pubDate><guid>http://blog.shareoffice.it/webmaster/archive/2008/07/16/9637.aspx</guid><description>&lt;p&gt;To close Office application after you open it, you must use this method:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;System.Runtime.InteropServices.Marshal.ReleaseComObject&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;For more information you can visit Microsoft knowledge base: &lt;a href="http://support.microsoft.com/default.aspx?scid=KB;EN-US;q317109"&gt;http://support.microsoft.com/default.aspx?scid=KB;EN-US;q317109&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hi to all&lt;/p&gt;
&lt;p&gt;Fulvio&lt;/p&gt;&lt;img src ="http://blog.shareoffice.it/webmaster/aggbug/9637.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>To close Office application after you open it, you must use this method:</p>
<p><strong>System.Runtime.InteropServices.Marshal.ReleaseComObject</strong> </p>
<p>For more information you can visit Microsoft knowledge base: <a href="http://support.microsoft.com/default.aspx?scid=KB;EN-US;q317109">http://support.microsoft.com/default.aspx?scid=KB;EN-US;q317109</a></p>
<p>Hi to all</p>
<p>Fulvio</p><img src ="http://blog.shareoffice.it/webmaster/aggbug/9637.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fulvio Giaccari</dc:creator><title>Articolo VSTO 2005 su Excell, Word ed ASP.NET 2.0</title><link>http://blog.shareoffice.it/webmaster/archive/2006/10/07/7923.aspx</link><pubDate>Sat, 07 Oct 2006 10:13:00 GMT</pubDate><guid>http://blog.shareoffice.it/webmaster/archive/2006/10/07/7923.aspx</guid><description>&lt;p&gt;Ciao a tutti,&lt;/p&gt;
&lt;p&gt;un articolo che ho scritto per Microsoft MSDN corporate su VSTO 2005 RC2 Excel, Word e Webservices in ASP.NET 2.0&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa701256(office.11).aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa701256(office.11).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ciao a tutti e buona programmazione&lt;/p&gt;
&lt;p&gt;Fulvio&lt;/p&gt;&lt;img src ="http://blog.shareoffice.it/webmaster/aggbug/7923.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Ciao a tutti,</p>
<p>un articolo che ho scritto per Microsoft MSDN corporate su VSTO 2005 RC2 Excel, Word e Webservices in ASP.NET 2.0</p>
<p><a href="http://msdn2.microsoft.com/en-us/library/aa701256(office.11).aspx">http://msdn2.microsoft.com/en-us/library/aa701256(office.11).aspx</a></p>
<p>Ciao a tutti e buona programmazione</p>
<p>Fulvio</p><img src ="http://blog.shareoffice.it/webmaster/aggbug/7923.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fulvio Giaccari</dc:creator><title>Inserire un grafico in Excel utilizzado i VSTO 2005</title><link>http://blog.shareoffice.it/webmaster/archive/2006/06/01/5878.aspx</link><pubDate>Thu, 01 Jun 2006 16:54:00 GMT</pubDate><guid>http://blog.shareoffice.it/webmaster/archive/2006/06/01/5878.aspx</guid><description>&lt;p&gt;Ciao a tutti. Uno dei problemi che molti utenti mi hanno posto è quello di riuscire ad inserire all'interno di un foglio di Excel un grafico utilizzando solo il codice.&lt;/p&gt;
&lt;p&gt;Per fare questo dovete utilizzare il namespace Microsoft.Office.Tools.Excel.Chart. &lt;br /&gt;Per prima cosa create un nuovo progetto Office Ecel Workbook. Selezionate il "foglio1" (Sheet1 se avete Office in lingua inglese), ed inserite all'interno dell'evento Foglio1_Startup (Sheet1_Startup se è in inglese Office) le seguenti righe di codice:&lt;/p&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;&lt;font color="#000000"&gt;Dim employeeData As Microsoft.Office.Tools.Excel.Chart&lt;br /&gt;        employeeData = Me.Controls.AddChart(25, 110, 200, 150, "employees")&lt;br /&gt;        employeeData.ChartType = Excel.XlChartType.xl3DPie&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000"&gt;        ' Setto le celle da cui prelevare i dati.&lt;br /&gt;        'A5 Setterà il titolo del grafico&lt;br /&gt;        'Da B5 a D5 setterò i tre valori&lt;br /&gt;        Dim chartRange As Excel.Range = Me.Range("A5", "D5")&lt;br /&gt;        employeeData.SetSourceData(chartRange)&lt;/font&gt;&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;&lt;font size="2"&gt;Spero sia utile, "Happy Programming"&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size="2"&gt;Fulvio&lt;/font&gt;&lt;/p&gt;&lt;img src ="http://blog.shareoffice.it/webmaster/aggbug/5878.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Ciao a tutti. Uno dei problemi che molti utenti mi hanno posto è quello di riuscire ad inserire all'interno di un foglio di Excel un grafico utilizzando solo il codice.</p>
<p>Per fare questo dovete utilizzare il namespace Microsoft.Office.Tools.Excel.Chart. <br />Per prima cosa create un nuovo progetto Office Ecel Workbook. Selezionate il "foglio1" (Sheet1 se avete Office in lingua inglese), ed inserite all'interno dell'evento Foglio1_Startup (Sheet1_Startup se è in inglese Office) le seguenti righe di codice:</p><font color="#0000ff" size="2">
<p><font color="#000000">Dim employeeData As Microsoft.Office.Tools.Excel.Chart<br />        employeeData = Me.Controls.AddChart(25, 110, 200, 150, "employees")<br />        employeeData.ChartType = Excel.XlChartType.xl3DPie</font></p>
<p><font color="#000000">        ' Setto le celle da cui prelevare i dati.<br />        'A5 Setterà il titolo del grafico<br />        'Da B5 a D5 setterò i tre valori<br />        Dim chartRange As Excel.Range = Me.Range("A5", "D5")<br />        employeeData.SetSourceData(chartRange)</font></p></font>
<p><font size="2">Spero sia utile, "Happy Programming"</font></p>
<p><font size="2">Fulvio</font></p><img src ="http://blog.shareoffice.it/webmaster/aggbug/5878.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fulvio Giaccari</dc:creator><title>TIP: Come evitare all'applicazione Office di chiederci se vogliamo salvare il documento modificato</title><link>http://blog.shareoffice.it/webmaster/archive/2006/02/21/4020.aspx</link><pubDate>Tue, 21 Feb 2006 12:17:00 GMT</pubDate><guid>http://blog.shareoffice.it/webmaster/archive/2006/02/21/4020.aspx</guid><description>&lt;p&gt;Durante un progetto Office con VSTO 2005 e Visual Studio 2005 mi è capitato di voler evitare di far richiedere all'applicazione Office di visualizzare la DialogBox per il salvataggio del documento all'utente.&lt;/p&gt;
&lt;p&gt;Ho risolto questo piccolo inconveniente inserendo nell'evento &lt;strong&gt;ThisDocument_BeforeClose &lt;/strong&gt;la seguente riga di codice:&lt;/p&gt;&lt;font size="2"&gt;Application.ActiveDocument.Saved =&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;True&lt;/font&gt; 
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#000000" size="3"&gt;In questo modo diremo all'applicazione Office che il documento è già stato salvato. Quindi alla chiusura dell'applicazione non ci verrà richiesto il salvataggio.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#000000" size="3"&gt;Ciao a tutti e buona programmazione&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#0000ff" size="2"&gt;&lt;font color="#000000" size="3"&gt;Fulvio&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src ="http://blog.shareoffice.it/webmaster/aggbug/4020.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Durante un progetto Office con VSTO 2005 e Visual Studio 2005 mi è capitato di voler evitare di far richiedere all'applicazione Office di visualizzare la DialogBox per il salvataggio del documento all'utente.</p>
<p>Ho risolto questo piccolo inconveniente inserendo nell'evento <strong>ThisDocument_BeforeClose </strong>la seguente riga di codice:</p><font size="2">Application.ActiveDocument.Saved =</font><font color="#0000ff" size="2">True</font> 
<p><font color="#0000ff" size="2"><font color="#000000" size="3">In questo modo diremo all'applicazione Office che il documento è già stato salvato. Quindi alla chiusura dell'applicazione non ci verrà richiesto il salvataggio.</font></font></p>
<p><font color="#0000ff" size="2"><font color="#000000" size="3">Ciao a tutti e buona programmazione</font></font></p>
<p><font color="#0000ff" size="2"><font color="#000000" size="3">Fulvio</font></font></p><img src ="http://blog.shareoffice.it/webmaster/aggbug/4020.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fulvio Giaccari</dc:creator><title>Excel e Word per interagire con il Back-End di un sito ASP.NET 2.0</title><link>http://blog.shareoffice.it/webmaster/archive/2006/01/20/3715.aspx</link><pubDate>Fri, 20 Jan 2006 18:45:00 GMT</pubDate><guid>http://blog.shareoffice.it/webmaster/archive/2006/01/20/3715.aspx</guid><description>&lt;p&gt;Tecnologie utilizzate:&lt;/p&gt;
&lt;p&gt;-         Visual Studio 2005&lt;/p&gt;
&lt;p&gt;-         SQL 2005 Server Std&lt;/p&gt;
&lt;p&gt;-         VSTO 2005&lt;/p&gt;
&lt;p&gt;-         ASP.NET 2.0&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Obiettivi: &lt;/p&gt;
&lt;p&gt;-         Panoramica VSTO e Framework 2.0&lt;/p&gt;
&lt;p&gt;-         Panoramica potenzialità Task Pane di Word ed Excel&lt;/p&gt;
&lt;p&gt;-         Creazione Webservice con VS 2005 e Framework 2.0 per agganciarsi ai dati&lt;/p&gt;
&lt;p&gt;-         Utilizzo dei VSTO per creare documenti Excel e Word che interagiscano con i webservice &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Software Richiesto:&lt;/p&gt;
&lt;p&gt;-         Windows 2003 Server Std&lt;/p&gt;
&lt;p&gt;-         Office 2003 Professional&lt;/p&gt;
&lt;p&gt;-         VSTO 2005&lt;/p&gt;
&lt;p&gt;-         Visual Studio 2005 Professional&lt;/p&gt;
&lt;p&gt;-         SQL Server 2005 std&lt;/p&gt;
&lt;p&gt;-         IIS e ASP.NET 2.0&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Grazie all’avvento del nuovo framework 2.0 e Visual Studio 2005 microsoft ha puntato decisamente alla programmazione Office introducendo I Visual Studio tools for Office 2005. A differenza dei precedenti (VSTO 2003), la programmazione Office è notevolmente migliorata grazie anche alla possibilità di poter avere integrato nel IDE di Visual Studio quello di Word o di Excel. Quindi oggi creare delle applicazioni office che possano interagire con I componenti che creiamo è molto più semplice. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;In questo articolo andremo ad analizzare alcuni aspetti della nuova programmazione Office. Gli aspetti che andremo a toccare sono: Webservice, TaskPane, Word ed Excel.&lt;/p&gt;
&lt;p&gt;L’applicazione che ho creato per questo articolo riprende il sito web AdventureWorks utilizzato durante gli eventi di lancio di Visual Studio 2005 (comunque sarà inserito nel file che andrete a scaricare). Questo sito è stato creato con la tecnologia ASP.NET 2.0 e come database usa SQL Server standard 2005. Creeremo due webservice: il primo che si occuperà di estrapolare tutti gli impiegati addetti alle vendite in base al territorio scelto e riempirà una lettera di ringraziamento scritta in Word 2003, il secondo si occuperà di estrapolare tutti gli acquisti avvenuti in un determinato periodo per popolare un diagramma su Excel 2003.&lt;/p&gt;
&lt;p&gt;Di seguito troverete lo schema logico che la nostra applicazione seguirà:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.shareoffice.it/webmaster/gallery/image/145.aspx" target="_blank"&gt;http://blog.shareoffice.it/webmaster/gallery/image/145.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Creazione webservice con Visual Studio 2005 e connettiamolo a SQL Server 2005&lt;/p&gt;
&lt;p&gt;Prima di tutto creiamo un progetto vuoto che chiameremo AdventureWorks. A questo progetto vuoto aggiungiamo un progetto ASP.NET (il linguaggio utilizzato da me è il VB.NET) che chiameremo AdventureWeb. &lt;/p&gt;
&lt;p&gt;NB: Nel progetto che potrete scaricare troverete anche il sito AdventureWorks completo&lt;/p&gt;
&lt;p&gt;Per prima cosa aggiungiamo al nostro progetto web un primo webservice che chiameremo AdvOrders.asmx. Questo webservice verrà utilizzato dall’applicazione Excel per generare i grafici di fatturato in base ad ogni anno fiscale.&lt;/p&gt;
&lt;p&gt;Visualizziamo il codice del webservice appena aggiunto al nostro progetto web e creiamo una funzione che chiameremo “Verify” .&lt;/p&gt;
&lt;p&gt;NB: Questa funzione ho l’abitudine di crearla per verificare se il webservice è raggiungibile. E’ inutile che lanci una funzione senza prima aver controllato se il webservice è raggiungibile dalla mia applicazione. Immaginate di avere una funzione fondamentale (come quella del nostro esempio) nel webservice. Se quest’ultimo non è raggiungibile bloccherà tutta la nostra applicazione.&lt;/p&gt;
&lt;p&gt;Il codice da inserire nel behind code del webservice:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            "Returns “OK” if Webservice in online", _&lt;/p&gt;
&lt;p&gt;              EnableSession:=False)&amp;gt; _&lt;/p&gt;
&lt;p&gt;              Public Function Verify() As String&lt;/p&gt;
&lt;p&gt;                  Return "OK"&lt;/p&gt;
&lt;p&gt;            End Function&lt;/p&gt;
&lt;p&gt;La funzione restituisce il valore “OK”.&lt;/p&gt;
&lt;p&gt;Adesso possiamo passare a creare la funzione che genera il DataSet che utilizzeremo per il riempire l’oggetto ListObject del foglio di Excel.&lt;/p&gt;
&lt;p&gt;Per prima cosa dobbiamo importare i NameSpace SQL, inseriamo nel codice del webservice le seguenti righe di codice:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Imports System.Web&lt;/p&gt;
&lt;p&gt;Imports System.Data&lt;/p&gt;
&lt;p&gt;Imports System.Data.SqlClient&lt;/p&gt;
&lt;p&gt;Imports System.Web.Services&lt;/p&gt;
&lt;p&gt;Imports System.Web.Services.Protocols&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Importati i NameSpace principali di SQL possiamo creare la funzione che andrà a creare il DataSet. Questa funzione la chiameremo “RequestData”. Questa funzione si connetterà al Database SQL 2005 e lancerà una query che andrà ad estrapolare dalla tabella Sales.SalesOrderDetail tutti gli importi e li sommerà in base all’anno. (ES: Verranno estrapolati tutti gli ordini del anno 2004 e verranno sommati).&lt;/p&gt;
&lt;p&gt;La funzione si presenterà così:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;"Returns dataset with information about orders", _&lt;/p&gt;
&lt;p&gt;            EnableSession:=False, BufferResponse:=True, CacheDuration:=600000)&amp;gt; _&lt;/p&gt;
&lt;p&gt;            Public Function RequestData() As DataSet&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                  Dim OrdersData As New DataSet 'This is the dataset to return&lt;/p&gt;
&lt;p&gt;                  Dim ConnectionToSql As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("ConnectionSql"))&lt;/p&gt;
&lt;p&gt;                  ConnectionToSql.Open()&lt;/p&gt;
&lt;p&gt;                  Dim daLinks As New SqlDataAdapter("SELECT TOP (100) PERCENT SUM(Sales.SalesOrderDetail.LineTotal) AS Total, DATEPART(yy, Sales.SalesOrderHeader.OrderDate) AS Year FROM Sales.SalesOrderDetail INNER JOIN Sales.SalesOrderHeader ON Sales.SalesOrderDetail.SalesOrderID = Sales.SalesOrderHeader.SalesOrderID GROUP BY DATEPART(yy, Sales.SalesOrderHeader.OrderDate)ORDER BY Year", ConnectionToSql)&lt;/p&gt;
&lt;p&gt;                  daLinks.Fill(OrdersData, "View1")&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                  Return OrdersData&lt;/p&gt;
&lt;p&gt;            End Function&lt;/p&gt;
&lt;p&gt;Adesso che abbiamo completato il webservice, salviamolo pubblichiamolo sul server web con IIS 6.0 e le ASP.NET 2.0 abilitate.&lt;/p&gt;
&lt;p&gt;NB: Ricordatevi di settare la stringa di connessione al DB nel file web.config&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Creazione Foglio di excel per la generazione del grafico con i dati estrapolati dal Webservice.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Aggiungiamo alla soluzione AdventureWorks un progetto Excel scritto con il linguaggio Visual Basic .NET. Chiamiamo il progetto DiagramOrder.&lt;/p&gt;
&lt;p&gt;Visual Studio 2005 ci chiederà se vogliamo creare un documento Excel vuoto con il nome DiagramOrder.xls. Accettiamo premendo OK.&lt;/p&gt;
&lt;p&gt;Come potrete notare si aprirà l’IDE di Excel 2003 all’interno di Visual Studio 2005.&lt;/p&gt;
&lt;p&gt;Aggiungiamo una referenza al webservice precedentemente creato facendo click con il tasto destro sul progetto excel e selezionando la voce “Add Web Reference”.&lt;/p&gt;
&lt;p&gt;Visual Studio ci chiederà dove possiamo trovare il webservice e selezioniamo la voce “Webservice in this solution” e chiamiamola “AdvWebservice”.&lt;/p&gt;
&lt;p&gt;Trasciniamo dalla “Toolbox” di VS il controllo ListObject nella casella A-5 del foglio1 di Excel e chiamiamolo “List1”.&lt;/p&gt;
&lt;p&gt;Referenziamo nel progetto il namespace del webservice:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Imports DiagramOrder.AdvWebservice&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Inseriamo nello startup del foglio il seguente codice:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;'Verify if Webservice is online&lt;/p&gt;
&lt;p&gt;            If AdvWebService.Verify.ToString = "OK" Then&lt;/p&gt;
&lt;p&gt;                  'If Webservice is online i create a new dataset and fill List1&lt;/p&gt;
&lt;p&gt;                  Dim ds As New DataSet&lt;/p&gt;
&lt;p&gt;                  ds = AdvWebService.RequestData&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                  List1.AutoSetDataBoundColumnHeaders = True 'Autoset cell&lt;/p&gt;
&lt;p&gt;                  List1.DataSource = ds&lt;/p&gt;
&lt;p&gt;                  List1.DataMember = "View1"&lt;/p&gt;
&lt;p&gt;            Else&lt;/p&gt;
&lt;p&gt;                  'If Webservice is Down, excel write a message to the user&lt;/p&gt;
&lt;p&gt;                  MessageBox.Show("Attenction: The webservice is unreacheable", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly, False)&lt;/p&gt;
&lt;p&gt;            End If&lt;/p&gt;
&lt;p&gt;Questo codice ci permette di verificare se effettivamente il webservice è online, se questo viene raggiunto, creiamo un DataSet e riempiamo il controllo List1 precedentemente creato.&lt;/p&gt;
&lt;p&gt;Ritorniamo al nostro foglio di excel, selezioniamo il controllo ListObject. Si aprirà un menu che ci permetterà di aggiungere il grafico (&amp;lt;&amp;lt; graph.bmp &amp;gt;&amp;gt;).&lt;/p&gt;
&lt;p&gt;Si[FG1]  aprirà il wizard per la creazione del grafico. Selezioniamo il grafico Istogramma “3D non in pila” e premiamo sul pulsante “OK”.&lt;/p&gt;
&lt;p&gt;Excel ci chiederà di selezionare la fonte di dati, selezioniamo il menu “Serie”. Nel campo “Nome” inseriamo “=Foglio1!$A$5”, nel campo “Valori” inseriamo “=Foglio1!$A$6”, nel campo “Etichette asse categorie (X)” inseriamo “=Foglio1!$B$6”.&lt;/p&gt;
&lt;p&gt;Premiamo il tasto “Fine” per concludere il wizard.&lt;/p&gt;
&lt;p&gt;Facciamo click con il tasto destro del mouse sul progetto “DiagramOrder”, selezioniamo la voce Debug e facciamo click su “Start new instance”. Visual Studio 2005 lancerà l’applicazione e sarà simile a questa:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.shareoffice.it/webmaster/gallery/image/175.aspx" target="_blank"&gt;http://blog.shareoffice.it/webmaster/gallery/image/175.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Creazione webservice per estrapolare i dati degli impiegati addetti alle vendite&lt;/p&gt;
&lt;p&gt;Questo webservice verrà utilizzato dalla nostra applicazione Word 2003 per riempire in maniera automatica una lettera di ringraziamento per il lavoro svolto e il fatturato raggiunto.&lt;/p&gt;
&lt;p&gt;Questo webservice sarà composto da 4 funzioni di tipo public. &lt;/p&gt;
&lt;p&gt;1)     Verify (Questa funzione verrà utilizzata dall’applicazione word 2003 per verificare se il webservice è raggiungibile&lt;/p&gt;
&lt;p&gt;2)     TerritoryReturn (Questa funzione estrapola tutti i territori dal database)&lt;/p&gt;
&lt;p&gt;3)     ListEmployeeSales (Questa funzione estrapola tutti i commerciali in base al territorio di appartenenza)&lt;/p&gt;
&lt;p&gt;4)     EmployeeInformation (Questa funzione estrapola le informazioni di un dipendente in base al suo ID)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Per prima cosa creiamo un nuovo webservice all’interno del progetto web AdventureWeb, chiamiamo questo webservice EmployeeSales.asmx .&lt;/p&gt;
&lt;p&gt;Creiamo la funzione TerritoriReturn che andrà ad estrapolare tutti i territori dal DB e restituirà un oggetto DataSet contenente tutti i dati sui territori:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;'Return all Territory from Database&lt;/p&gt;
&lt;p&gt;            "Return all Territory", _&lt;/p&gt;
&lt;p&gt;              EnableSession:=False)&amp;gt; _&lt;/p&gt;
&lt;p&gt;              Public Function TerritoryReturn() As DataSet&lt;/p&gt;
&lt;p&gt;                  Dim TerritoryTable As New DataSet&lt;/p&gt;
&lt;p&gt;                  Dim ConnectionToSQL As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("ConnectionSql"))&lt;/p&gt;
&lt;p&gt;                  Dim daLinks As New SqlDataAdapter("SELECT Sales.SalesTerritory.*" _&lt;/p&gt;
&lt;p&gt;                  &amp;amp; "FROM Sales.SalesTerritory", ConnectionToSQL)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                  ConnectionToSQL.Open()&lt;/p&gt;
&lt;p&gt;                  daLinks.Fill(TerritoryTable, "Territory")&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                  Return TerritoryTable&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                  ConnectionToSQL.Close()&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            End Function&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Creaiamo la funzione LIstEmployeeSales che estrapolerà tutti gli impiegati addetti alle vendite in base ad un determinato territorio e restituirà un DataSet:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;'Return a DataSet with Sales Employee selected by Territory&lt;/p&gt;
&lt;p&gt;            "Returns dataset with information about Sales Employee", _&lt;/p&gt;
&lt;p&gt;            EnableSession:=False, BufferResponse:=True, CacheDuration:=600000)&amp;gt; _&lt;/p&gt;
&lt;p&gt;            Public Function ListEmployeeSales(ByVal Territory As String) As DataSet&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                  Dim SalesData As New DataSet 'This is the dataset to return&lt;/p&gt;
&lt;p&gt;                  Dim ConnectionToSql As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("ConnectionSql"))&lt;/p&gt;
&lt;p&gt;                  ConnectionToSql.Open()&lt;/p&gt;
&lt;p&gt;                  Dim daLinks As New SqlDataAdapter("SELECT Person.Contact.FirstName, Person.Contact.LastName, Sales.SalesTerritory.TerritoryID, HumanResources.Employee.EmployeeID " _&lt;/p&gt;
&lt;p&gt;      &amp;amp; "FROM Person.Contact INNER JOIN HumanResources.Employee ON Person.Contact.ContactID = HumanResources.Employee.ContactID " _&lt;/p&gt;
&lt;p&gt;      &amp;amp; "INNER JOIN Sales.SalesPerson AS SalesPerson_1 ON HumanResources.Employee.EmployeeID = SalesPerson_1.SalesPersonID " _&lt;/p&gt;
&lt;p&gt;      &amp;amp; "INNER JOIN Sales.SalesTerritory ON SalesPerson_1.TerritoryID = Sales.SalesTerritory.TerritoryID " _&lt;/p&gt;
&lt;p&gt;      &amp;amp; "WHERE (SalesPerson_1.TerritoryID = " &amp;amp; Territory &amp;amp; ")", ConnectionToSql)&lt;/p&gt;
&lt;p&gt;                  daLinks.Fill(SalesData, "SalesEmployeeTable")&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                  Return SalesData&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                  ConnectionToSql.Close()&lt;/p&gt;
&lt;p&gt;            End Function&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;L’ultima funzione che andremo a creare è quella che estrapola tutte le informazioni relative al dipendente (via, città, CAP, ecc …) in base ad un ID. La funzione restituirà un DataSet con tutte l informazioni estrapolate.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            'Return all information about Sales Employee&lt;/p&gt;
&lt;p&gt;            "Return all information about sales employee", _&lt;/p&gt;
&lt;p&gt;            EnableSession:=False)&amp;gt; _&lt;/p&gt;
&lt;p&gt;            Public Function EmployeeInformation(ByVal EmployeeID As String) As DataSet&lt;/p&gt;
&lt;p&gt;                  Dim EmployeeInfo As New DataSet&lt;/p&gt;
&lt;p&gt;                  Dim ConnectionToSQL As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("ConnectionSql"))&lt;/p&gt;
&lt;p&gt;                  Dim daLinks As New SqlDataAdapter("SELECT Person.Contact.FirstName, Person.Contact.LastName, Sales.SalesTerritory.TerritoryID, HumanResources.Employee.EmployeeID, " _&lt;/p&gt;
&lt;p&gt;                  &amp;amp; "Person.Address.AddressLine1, Person.Address.City, Person.Address.PostalCode, SalesPerson_1.SalesLastYear, SalesPerson_1.SalesQuota " _&lt;/p&gt;
&lt;p&gt;                  &amp;amp; "FROM Person.Contact INNER JOIN " _&lt;/p&gt;
&lt;p&gt;                    &amp;amp; "HumanResources.Employee ON Person.Contact.ContactID = HumanResources.Employee.ContactID INNER JOIN " _&lt;/p&gt;
&lt;p&gt;                  &amp;amp; "Sales.SalesPerson AS SalesPerson_1 ON HumanResources.Employee.EmployeeID = SalesPerson_1.SalesPersonID INNER JOIN " _&lt;/p&gt;
&lt;p&gt;                  &amp;amp; "Sales.SalesTerritory ON SalesPerson_1.TerritoryID = Sales.SalesTerritory.TerritoryID INNER JOIN " _&lt;/p&gt;
&lt;p&gt;                    &amp;amp; "HumanResources.EmployeeAddress ON HumanResources.Employee.EmployeeID = HumanResources.EmployeeAddress.EmployeeID INNER JOIN " _&lt;/p&gt;
&lt;p&gt;                  &amp;amp; "Person.Address ON HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID AND " _&lt;/p&gt;
&lt;p&gt;                    &amp;amp; "HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID AND " _&lt;/p&gt;
&lt;p&gt;                  &amp;amp; "HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID AND " _&lt;/p&gt;
&lt;p&gt;                  &amp;amp; "HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID " _&lt;/p&gt;
&lt;p&gt;                  &amp;amp; "WHERE (HumanResources.Employee.EmployeeID = " &amp;amp; EmployeeID &amp;amp; ")", ConnectionToSQL)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                  ConnectionToSQL.Open()&lt;/p&gt;
&lt;p&gt;                  daLinks.Fill(EmployeeInfo, "EmployeeInformation")&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                  Return EmployeeInfo&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                  ConnectionToSQL.Close()&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            End Function&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Ripubblichiamo nuovamente il progetto web AdwentureWeb sul server con IIS 6 o 5 e le ASP.NET 2.0 abilitate.&lt;/p&gt;
&lt;p&gt;NB: Per testare il corretto funzionamento del webservice possiamo lanciare un’istanza di Debug su Visual Studio 2005. I webservice, essendo lanciati in modalità localhost, dovrebbero darci la possibilità di inserire i dati per verificare il corretto funzionamento delle funzioni appena scritte.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.shareoffice.it/webmaster/gallery/image/178.aspx"&gt;http://blog.shareoffice.it/webmaster/gallery/image/178.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.shareoffice.it/webmaster/gallery/image/179.aspx"&gt;http://blog.shareoffice.it/webmaster/gallery/image/179.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Creazione applicazione word 2003 e TaskPane&lt;/p&gt;
&lt;p&gt;Cosa dovrà fare l’applicazione:&lt;/p&gt;
&lt;p&gt;Questa applicazione word, dovrà connettersi al webservice e visualizzare sul tast pane i territori all’interno di un controllo “DropDownList”. Una volta selezionato il territorio dovremo prmere il pulsante “Search” per estrapolare tutti gli addetti alle vendite del territorio selezionato.&lt;/p&gt;
&lt;p&gt;Apparirà sul TaskPane un altro controllo DropDownList che verrà popolato con i cognomi dei dipendenti. &lt;/p&gt;
&lt;p&gt;Selezioneremo il cognome che ci interessa e premendo il tasto “Select Employee” verranno estrapolati tutti i dati relativi a quel dipendente e verranno popolati tutti i bookmark sul foglio di Word 2003&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Una volta creato il webservice possiamo passare alla creazione della lettera (che renderemo dinamica grazia ai VSTO 2005) scritta in Word 2003.&lt;/p&gt;
&lt;p&gt;Per prima cosa aggiungiamo alla soluzione AdwentureWorks un nuovo progetto Office Word 2003 scritto in Visual Basic .NET. Questo progetto lo chiamiamo CongratulationLetter. Come per il progetto Excel, Visual Studio 2005 ci richiederà se vogliamo utilizzare come template un documento word già scritto in precedenza o se vogliamo utilizzare un documento word bianco. &lt;/p&gt;
&lt;p&gt;Selezioniamo la voce “Copy an existing document” e premiamo il tasto “Browse … “.&lt;/p&gt;
&lt;p&gt;Selezioniamo il documento word CongratulationLetter.doc (si trova all’interno della soluzione che scaricherete insieme a questo articolo), premete il tasto “OK” per confermare. Se tutto è andato bene, Visual Studio dovrebbe presentarsi così:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Come per Excel anche l’IDE di Word 2003 verrà integrato all’interno di Visual Studio 2005.&lt;/p&gt;
&lt;p&gt;NB: Come avrete potuto notare, all’interno del documento word vi sono già dei Bookmark (parole all’interno di parentesi quadre di colore grigio chiaro). I Bookmark per i VSTO 2005 sono a tutti gli effetti degli oggetti e quindi hanno delle proprietà. Per dare un’occhiata alle proprietà di ogni singolo bookmark, basta posizionare il cursore all’interno del bookmark.&lt;/p&gt;
&lt;p&gt;Per prima cosa dobbiamo creare l’ “Actions Pane Controls”  che andremo a caricare all’interno del TaskPane. Facciamo click con il tasto destro del mouse ad aggiungiamo una nuova cartella che chiameremo “TaskPane”.&lt;/p&gt;
&lt;p&gt;Aggiungiamo all’interno di questa cartella un nuovo “Item” di tipo “Actions Pane Control” e chiamiamolo “TaskMenu.vb”.&lt;/p&gt;
&lt;p&gt;Aggiungiamo a questo oggetto i seguenti controlli:&lt;/p&gt;
&lt;p&gt;N° 2 DropDownList&lt;/p&gt;
&lt;p&gt;N° 3 Label&lt;/p&gt;
&lt;p&gt;N° 2 Button&lt;/p&gt;
&lt;p&gt;Una volta aggiunti i controlli, graficamente dovrebbe apparire così:&lt;/p&gt;
&lt;p&gt;&amp;lt;&amp;lt; TaskMenu1.bmp &amp;gt;&amp;gt;&lt;/p&gt;
&lt;p&gt;Andiamo nel Behindcode del controllo “TaskMenu.vb”. Per prima cosa dobbiamo popolare il primo DropDownList  (nel mio progetto si chiama ListTerritory):&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;      Private Sub TaskMenu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load&lt;/p&gt;
&lt;p&gt;            Dim Ds As New DataSet&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            Ds = AdvWebService.TerritoryReturn&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            ListTerritory.DataSource = Ds&lt;/p&gt;
&lt;p&gt;            ListTerritory.DisplayMember = "Territory.Name"&lt;/p&gt;
&lt;p&gt;            ListTerritory.ValueMember = "Territory.TerritoryID"&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;      End Sub&lt;/p&gt;
&lt;p&gt;Poi dobbiamo creare la funzione per i due pulsanti:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click&lt;/p&gt;
&lt;p&gt;            ListEmployee.Visible = True&lt;/p&gt;
&lt;p&gt;            Label3.Visible = True&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            Dim Ds2 As New DataSet&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            Ds2 = AdvWebService.ListEmployeeSales(ListTerritory.SelectedValue.ToString)&lt;/p&gt;
&lt;p&gt;            ListEmployee.DataSource = Ds2&lt;/p&gt;
&lt;p&gt;            ListEmployee.DisplayMember = "SalesEmployeeTable.LastName"&lt;/p&gt;
&lt;p&gt;            ListEmployee.ValueMember = "SalesEmployeeTable.EmployeeID"&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;      End Sub&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click&lt;/p&gt;
&lt;p&gt;            Dim Ds3 As New DataSet&lt;/p&gt;
&lt;p&gt;            Ds3.Clear()&lt;/p&gt;
&lt;p&gt;            Ds3 = AdvWebService.EmployeeInformation(ListEmployee.SelectedValue.ToString)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            Dim FName As New Binding("Text", Ds3, "EmployeeInformation.FirstName")&lt;/p&gt;
&lt;p&gt;            Dim LName As New Binding("Text", Ds3, "EmployeeInformation.LastName")&lt;/p&gt;
&lt;p&gt;            Dim AddressL As New Binding("Text", Ds3, "EmployeeInformation.AddressLine1")&lt;/p&gt;
&lt;p&gt;            Dim PCode As New Binding("Text", Ds3, "EmployeeInformation.PostalCode")&lt;/p&gt;
&lt;p&gt;            Dim City As New Binding("Text", Ds3, "EmployeeInformation.City")&lt;/p&gt;
&lt;p&gt;            Dim DearName As New Binding("Text", Ds3, "EmployeeInformation.FirstName")&lt;/p&gt;
&lt;p&gt;            Dim TotalSales As New Binding("Text", Ds3, "EmployeeInformation.SalesLastYear")&lt;/p&gt;
&lt;p&gt;            Dim TotalRevenue As New Binding("Text", Ds3, "EmployeeInformation.SalesQuota")&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.FirstName.DataBindings.Clear()&lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.FirstName.DataBindings.Add(FName)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.LastName.DataBindings.Clear()&lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.LastName.DataBindings.Add(LName)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.address.DataBindings.Clear()&lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.address.DataBindings.Add(AddressL)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.zip.DataBindings.Clear()&lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.zip.DataBindings.Add(PCode)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.city.DataBindings.Clear()&lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.city.DataBindings.Add(City)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.Dear.DataBindings.Clear()&lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.Dear.DataBindings.Add(DearName)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.TotalSales.DataBindings.Clear()&lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.TotalSales.DataBindings.Add(TotalSales)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.revenue.DataBindings.Clear()&lt;/p&gt;
&lt;p&gt;            CongratulationLetter.Globals.ThisDocument.revenue.DataBindings.Add(TotalRevenue)&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;      End Sub&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Ora passiamo al Behindcode del documento word. Aggiungiamo all’interno della subroutine “ThisDocument_Startup” le seguenti linee di codice:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            'Add to Taskpane the usercontrol TaskMenu.vb&lt;/p&gt;
&lt;p&gt;            Me.ActionsPane.Controls.Add(ActionMenu)&lt;/p&gt;
&lt;p&gt;            Me.ActionsPane.Visible = True&lt;/p&gt;
&lt;p&gt;In questo modo stiamo aggiungendo al documento word l’ “Action Task Pane” contenente il controllo TaskMenu.&lt;/p&gt;
&lt;p&gt;Lanciamo il debug dell’applicazione “CongratulationLetter.doc” e noteremo che al cambiare del territorio e del dipendente cambieranno anche i dati presenti nel documento word.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.shareoffice.it/webmaster/gallery/image/180.aspx"&gt;http://blog.shareoffice.it/webmaster/gallery/image/180.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Conclusioni&lt;/p&gt;
&lt;p&gt;In questo progetto abbiamo visto come le applicazioni office 2003 possano interagire con i webservice presenti su di un sito web. Immaginate quante altre applicazioni possono essere create per ogni singola necessità (fatture, documenti di trasporto, cedolini ecc ecc).&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src ="http://blog.shareoffice.it/webmaster/aggbug/3715.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Tecnologie utilizzate:</p>
<p>-         Visual Studio 2005</p>
<p>-         SQL 2005 Server Std</p>
<p>-         VSTO 2005</p>
<p>-         ASP.NET 2.0</p>
<p> </p>
<p>Obiettivi: </p>
<p>-         Panoramica VSTO e Framework 2.0</p>
<p>-         Panoramica potenzialità Task Pane di Word ed Excel</p>
<p>-         Creazione Webservice con VS 2005 e Framework 2.0 per agganciarsi ai dati</p>
<p>-         Utilizzo dei VSTO per creare documenti Excel e Word che interagiscano con i webservice </p>
<p> </p>
<p>Software Richiesto:</p>
<p>-         Windows 2003 Server Std</p>
<p>-         Office 2003 Professional</p>
<p>-         VSTO 2005</p>
<p>-         Visual Studio 2005 Professional</p>
<p>-         SQL Server 2005 std</p>
<p>-         IIS e ASP.NET 2.0</p>
<p> </p>
<p> </p>
<p>Grazie all’avvento del nuovo framework 2.0 e Visual Studio 2005 microsoft ha puntato decisamente alla programmazione Office introducendo I Visual Studio tools for Office 2005. A differenza dei precedenti (VSTO 2003), la programmazione Office è notevolmente migliorata grazie anche alla possibilità di poter avere integrato nel IDE di Visual Studio quello di Word o di Excel. Quindi oggi creare delle applicazioni office che possano interagire con I componenti che creiamo è molto più semplice. </p>
<p> </p>
<p>In questo articolo andremo ad analizzare alcuni aspetti della nuova programmazione Office. Gli aspetti che andremo a toccare sono: Webservice, TaskPane, Word ed Excel.</p>
<p>L’applicazione che ho creato per questo articolo riprende il sito web AdventureWorks utilizzato durante gli eventi di lancio di Visual Studio 2005 (comunque sarà inserito nel file che andrete a scaricare). Questo sito è stato creato con la tecnologia ASP.NET 2.0 e come database usa SQL Server standard 2005. Creeremo due webservice: il primo che si occuperà di estrapolare tutti gli impiegati addetti alle vendite in base al territorio scelto e riempirà una lettera di ringraziamento scritta in Word 2003, il secondo si occuperà di estrapolare tutti gli acquisti avvenuti in un determinato periodo per popolare un diagramma su Excel 2003.</p>
<p>Di seguito troverete lo schema logico che la nostra applicazione seguirà:</p>
<p><a href="http://blog.shareoffice.it/webmaster/gallery/image/145.aspx" target="_blank">http://blog.shareoffice.it/webmaster/gallery/image/145.aspx</a></p>
<p>Creazione webservice con Visual Studio 2005 e connettiamolo a SQL Server 2005</p>
<p>Prima di tutto creiamo un progetto vuoto che chiameremo AdventureWorks. A questo progetto vuoto aggiungiamo un progetto ASP.NET (il linguaggio utilizzato da me è il VB.NET) che chiameremo AdventureWeb. </p>
<p>NB: Nel progetto che potrete scaricare troverete anche il sito AdventureWorks completo</p>
<p>Per prima cosa aggiungiamo al nostro progetto web un primo webservice che chiameremo AdvOrders.asmx. Questo webservice verrà utilizzato dall’applicazione Excel per generare i grafici di fatturato in base ad ogni anno fiscale.</p>
<p>Visualizziamo il codice del webservice appena aggiunto al nostro progetto web e creiamo una funzione che chiameremo “Verify” .</p>
<p>NB: Questa funzione ho l’abitudine di crearla per verificare se il webservice è raggiungibile. E’ inutile che lanci una funzione senza prima aver controllato se il webservice è raggiungibile dalla mia applicazione. Immaginate di avere una funzione fondamentale (come quella del nostro esempio) nel webservice. Se quest’ultimo non è raggiungibile bloccherà tutta la nostra applicazione.</p>
<p>Il codice da inserire nel behind code del webservice:</p>
<p> </p>
<p>            "Returns “OK” if Webservice in online", _</p>
<p>              EnableSession:=False)&gt; _</p>
<p>              Public Function Verify() As String</p>
<p>                  Return "OK"</p>
<p>            End Function</p>
<p>La funzione restituisce il valore “OK”.</p>
<p>Adesso possiamo passare a creare la funzione che genera il DataSet che utilizzeremo per il riempire l’oggetto ListObject del foglio di Excel.</p>
<p>Per prima cosa dobbiamo importare i NameSpace SQL, inseriamo nel codice del webservice le seguenti righe di codice:</p>
<p> </p>
<p>Imports System.Web</p>
<p>Imports System.Data</p>
<p>Imports System.Data.SqlClient</p>
<p>Imports System.Web.Services</p>
<p>Imports System.Web.Services.Protocols</p>
<p> </p>
<p>Importati i NameSpace principali di SQL possiamo creare la funzione che andrà a creare il DataSet. Questa funzione la chiameremo “RequestData”. Questa funzione si connetterà al Database SQL 2005 e lancerà una query che andrà ad estrapolare dalla tabella Sales.SalesOrderDetail tutti gli importi e li sommerà in base all’anno. (ES: Verranno estrapolati tutti gli ordini del anno 2004 e verranno sommati).</p>
<p>La funzione si presenterà così:</p>
<p> </p>
<p>"Returns dataset with information about orders", _</p>
<p>            EnableSession:=False, BufferResponse:=True, CacheDuration:=600000)&gt; _</p>
<p>            Public Function RequestData() As DataSet</p>
<p> </p>
<p>                  Dim OrdersData As New DataSet 'This is the dataset to return</p>
<p>                  Dim ConnectionToSql As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("ConnectionSql"))</p>
<p>                  ConnectionToSql.Open()</p>
<p>                  Dim daLinks As New SqlDataAdapter("SELECT TOP (100) PERCENT SUM(Sales.SalesOrderDetail.LineTotal) AS Total, DATEPART(yy, Sales.SalesOrderHeader.OrderDate) AS Year FROM Sales.SalesOrderDetail INNER JOIN Sales.SalesOrderHeader ON Sales.SalesOrderDetail.SalesOrderID = Sales.SalesOrderHeader.SalesOrderID GROUP BY DATEPART(yy, Sales.SalesOrderHeader.OrderDate)ORDER BY Year", ConnectionToSql)</p>
<p>                  daLinks.Fill(OrdersData, "View1")</p>
<p> </p>
<p>                  Return OrdersData</p>
<p>            End Function</p>
<p>Adesso che abbiamo completato il webservice, salviamolo pubblichiamolo sul server web con IIS 6.0 e le ASP.NET 2.0 abilitate.</p>
<p>NB: Ricordatevi di settare la stringa di connessione al DB nel file web.config</p>
<p> </p>
<p>Creazione Foglio di excel per la generazione del grafico con i dati estrapolati dal Webservice.</p>
<p> </p>
<p>Aggiungiamo alla soluzione AdventureWorks un progetto Excel scritto con il linguaggio Visual Basic .NET. Chiamiamo il progetto DiagramOrder.</p>
<p>Visual Studio 2005 ci chiederà se vogliamo creare un documento Excel vuoto con il nome DiagramOrder.xls. Accettiamo premendo OK.</p>
<p>Come potrete notare si aprirà l’IDE di Excel 2003 all’interno di Visual Studio 2005.</p>
<p>Aggiungiamo una referenza al webservice precedentemente creato facendo click con il tasto destro sul progetto excel e selezionando la voce “Add Web Reference”.</p>
<p>Visual Studio ci chiederà dove possiamo trovare il webservice e selezioniamo la voce “Webservice in this solution” e chiamiamola “AdvWebservice”.</p>
<p>Trasciniamo dalla “Toolbox” di VS il controllo ListObject nella casella A-5 del foglio1 di Excel e chiamiamolo “List1”.</p>
<p>Referenziamo nel progetto il namespace del webservice:</p>
<p> </p>
<p>Imports DiagramOrder.AdvWebservice</p>
<p> </p>
<p>Inseriamo nello startup del foglio il seguente codice:</p>
<p> </p>
<p>'Verify if Webservice is online</p>
<p>            If AdvWebService.Verify.ToString = "OK" Then</p>
<p>                  'If Webservice is online i create a new dataset and fill List1</p>
<p>                  Dim ds As New DataSet</p>
<p>                  ds = AdvWebService.RequestData</p>
<p> </p>
<p>                  List1.AutoSetDataBoundColumnHeaders = True 'Autoset cell</p>
<p>                  List1.DataSource = ds</p>
<p>                  List1.DataMember = "View1"</p>
<p>            Else</p>
<p>                  'If Webservice is Down, excel write a message to the user</p>
<p>                  MessageBox.Show("Attenction: The webservice is unreacheable", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly, False)</p>
<p>            End If</p>
<p>Questo codice ci permette di verificare se effettivamente il webservice è online, se questo viene raggiunto, creiamo un DataSet e riempiamo il controllo List1 precedentemente creato.</p>
<p>Ritorniamo al nostro foglio di excel, selezioniamo il controllo ListObject. Si aprirà un menu che ci permetterà di aggiungere il grafico (&lt;&lt; graph.bmp &gt;&gt;).</p>
<p>Si[FG1]  aprirà il wizard per la creazione del grafico. Selezioniamo il grafico Istogramma “3D non in pila” e premiamo sul pulsante “OK”.</p>
<p>Excel ci chiederà di selezionare la fonte di dati, selezioniamo il menu “Serie”. Nel campo “Nome” inseriamo “=Foglio1!$A$5”, nel campo “Valori” inseriamo “=Foglio1!$A$6”, nel campo “Etichette asse categorie (X)” inseriamo “=Foglio1!$B$6”.</p>
<p>Premiamo il tasto “Fine” per concludere il wizard.</p>
<p>Facciamo click con il tasto destro del mouse sul progetto “DiagramOrder”, selezioniamo la voce Debug e facciamo click su “Start new instance”. Visual Studio 2005 lancerà l’applicazione e sarà simile a questa:</p>
<p><a href="http://blog.shareoffice.it/webmaster/gallery/image/175.aspx" target="_blank">http://blog.shareoffice.it/webmaster/gallery/image/175.aspx</a></p>
<p>Creazione webservice per estrapolare i dati degli impiegati addetti alle vendite</p>
<p>Questo webservice verrà utilizzato dalla nostra applicazione Word 2003 per riempire in maniera automatica una lettera di ringraziamento per il lavoro svolto e il fatturato raggiunto.</p>
<p>Questo webservice sarà composto da 4 funzioni di tipo public. </p>
<p>1)     Verify (Questa funzione verrà utilizzata dall’applicazione word 2003 per verificare se il webservice è raggiungibile</p>
<p>2)     TerritoryReturn (Questa funzione estrapola tutti i territori dal database)</p>
<p>3)     ListEmployeeSales (Questa funzione estrapola tutti i commerciali in base al territorio di appartenenza)</p>
<p>4)     EmployeeInformation (Questa funzione estrapola le informazioni di un dipendente in base al suo ID)</p>
<p> </p>
<p>Per prima cosa creiamo un nuovo webservice all’interno del progetto web AdventureWeb, chiamiamo questo webservice EmployeeSales.asmx .</p>
<p>Creiamo la funzione TerritoriReturn che andrà ad estrapolare tutti i territori dal DB e restituirà un oggetto DataSet contenente tutti i dati sui territori:</p>
<p> </p>
<p>'Return all Territory from Database</p>
<p>            "Return all Territory", _</p>
<p>              EnableSession:=False)&gt; _</p>
<p>              Public Function TerritoryReturn() As DataSet</p>
<p>                  Dim TerritoryTable As New DataSet</p>
<p>                  Dim ConnectionToSQL As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("ConnectionSql"))</p>
<p>                  Dim daLinks As New SqlDataAdapter("SELECT Sales.SalesTerritory.*" _</p>
<p>                  &amp; "FROM Sales.SalesTerritory", ConnectionToSQL)</p>
<p> </p>
<p>                  ConnectionToSQL.Open()</p>
<p>                  daLinks.Fill(TerritoryTable, "Territory")</p>
<p> </p>
<p>                  Return TerritoryTable</p>
<p> </p>
<p>                  ConnectionToSQL.Close()</p>
<p> </p>
<p>            End Function</p>
<p> </p>
<p>Creaiamo la funzione LIstEmployeeSales che estrapolerà tutti gli impiegati addetti alle vendite in base ad un determinato territorio e restituirà un DataSet:</p>
<p> </p>
<p>'Return a DataSet with Sales Employee selected by Territory</p>
<p>            "Returns dataset with information about Sales Employee", _</p>
<p>            EnableSession:=False, BufferResponse:=True, CacheDuration:=600000)&gt; _</p>
<p>            Public Function ListEmployeeSales(ByVal Territory As String) As DataSet</p>
<p> </p>
<p>                  Dim SalesData As New DataSet 'This is the dataset to return</p>
<p>                  Dim ConnectionToSql As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("ConnectionSql"))</p>
<p>                  ConnectionToSql.Open()</p>
<p>                  Dim daLinks As New SqlDataAdapter("SELECT Person.Contact.FirstName, Person.Contact.LastName, Sales.SalesTerritory.TerritoryID, HumanResources.Employee.EmployeeID " _</p>
<p>      &amp; "FROM Person.Contact INNER JOIN HumanResources.Employee ON Person.Contact.ContactID = HumanResources.Employee.ContactID " _</p>
<p>      &amp; "INNER JOIN Sales.SalesPerson AS SalesPerson_1 ON HumanResources.Employee.EmployeeID = SalesPerson_1.SalesPersonID " _</p>
<p>      &amp; "INNER JOIN Sales.SalesTerritory ON SalesPerson_1.TerritoryID = Sales.SalesTerritory.TerritoryID " _</p>
<p>      &amp; "WHERE (SalesPerson_1.TerritoryID = " &amp; Territory &amp; ")", ConnectionToSql)</p>
<p>                  daLinks.Fill(SalesData, "SalesEmployeeTable")</p>
<p> </p>
<p>                  Return SalesData</p>
<p> </p>
<p>                  ConnectionToSql.Close()</p>
<p>            End Function</p>
<p> </p>
<p>L’ultima funzione che andremo a creare è quella che estrapola tutte le informazioni relative al dipendente (via, città, CAP, ecc …) in base ad un ID. La funzione restituirà un DataSet con tutte l informazioni estrapolate.</p>
<p> </p>
<p>            'Return all information about Sales Employee</p>
<p>            "Return all information about sales employee", _</p>
<p>            EnableSession:=False)&gt; _</p>
<p>            Public Function EmployeeInformation(ByVal EmployeeID As String) As DataSet</p>
<p>                  Dim EmployeeInfo As New DataSet</p>
<p>                  Dim ConnectionToSQL As New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("ConnectionSql"))</p>
<p>                  Dim daLinks As New SqlDataAdapter("SELECT Person.Contact.FirstName, Person.Contact.LastName, Sales.SalesTerritory.TerritoryID, HumanResources.Employee.EmployeeID, " _</p>
<p>                  &amp; "Person.Address.AddressLine1, Person.Address.City, Person.Address.PostalCode, SalesPerson_1.SalesLastYear, SalesPerson_1.SalesQuota " _</p>
<p>                  &amp; "FROM Person.Contact INNER JOIN " _</p>
<p>                    &amp; "HumanResources.Employee ON Person.Contact.ContactID = HumanResources.Employee.ContactID INNER JOIN " _</p>
<p>                  &amp; "Sales.SalesPerson AS SalesPerson_1 ON HumanResources.Employee.EmployeeID = SalesPerson_1.SalesPersonID INNER JOIN " _</p>
<p>                  &amp; "Sales.SalesTerritory ON SalesPerson_1.TerritoryID = Sales.SalesTerritory.TerritoryID INNER JOIN " _</p>
<p>                    &amp; "HumanResources.EmployeeAddress ON HumanResources.Employee.EmployeeID = HumanResources.EmployeeAddress.EmployeeID INNER JOIN " _</p>
<p>                  &amp; "Person.Address ON HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID AND " _</p>
<p>                    &amp; "HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID AND " _</p>
<p>                  &amp; "HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID AND " _</p>
<p>                  &amp; "HumanResources.EmployeeAddress.AddressID = Person.Address.AddressID " _</p>
<p>                  &amp; "WHERE (HumanResources.Employee.EmployeeID = " &amp; EmployeeID &amp; ")", ConnectionToSQL)</p>
<p> </p>
<p>                  ConnectionToSQL.Open()</p>
<p>                  daLinks.Fill(EmployeeInfo, "EmployeeInformation")</p>
<p> </p>
<p>                  Return EmployeeInfo</p>
<p> </p>
<p>                  ConnectionToSQL.Close()</p>
<p> </p>
<p>            End Function</p>
<p> </p>
<p>Ripubblichiamo nuovamente il progetto web AdwentureWeb sul server con IIS 6 o 5 e le ASP.NET 2.0 abilitate.</p>
<p>NB: Per testare il corretto funzionamento del webservice possiamo lanciare un’istanza di Debug su Visual Studio 2005. I webservice, essendo lanciati in modalità localhost, dovrebbero darci la possibilità di inserire i dati per verificare il corretto funzionamento delle funzioni appena scritte.</p>
<p> </p>
<p><a href="http://blog.shareoffice.it/webmaster/gallery/image/178.aspx">http://blog.shareoffice.it/webmaster/gallery/image/178.aspx</a></p>
<p><a href="http://blog.shareoffice.it/webmaster/gallery/image/179.aspx">http://blog.shareoffice.it/webmaster/gallery/image/179.aspx</a></p>
<p> </p>
<p>Creazione applicazione word 2003 e TaskPane</p>
<p>Cosa dovrà fare l’applicazione:</p>
<p>Questa applicazione word, dovrà connettersi al webservice e visualizzare sul tast pane i territori all’interno di un controllo “DropDownList”. Una volta selezionato il territorio dovremo prmere il pulsante “Search” per estrapolare tutti gli addetti alle vendite del territorio selezionato.</p>
<p>Apparirà sul TaskPane un altro controllo DropDownList che verrà popolato con i cognomi dei dipendenti. </p>
<p>Selezioneremo il cognome che ci interessa e premendo il tasto “Select Employee” verranno estrapolati tutti i dati relativi a quel dipendente e verranno popolati tutti i bookmark sul foglio di Word 2003</p>
<p> </p>
<p>Una volta creato il webservice possiamo passare alla creazione della lettera (che renderemo dinamica grazia ai VSTO 2005) scritta in Word 2003.</p>
<p>Per prima cosa aggiungiamo alla soluzione AdwentureWorks un nuovo progetto Office Word 2003 scritto in Visual Basic .NET. Questo progetto lo chiamiamo CongratulationLetter. Come per il progetto Excel, Visual Studio 2005 ci richiederà se vogliamo utilizzare come template un documento word già scritto in precedenza o se vogliamo utilizzare un documento word bianco. </p>
<p>Selezioniamo la voce “Copy an existing document” e premiamo il tasto “Browse … “.</p>
<p>Selezioniamo il documento word CongratulationLetter.doc (si trova all’interno della soluzione che scaricherete insieme a questo articolo), premete il tasto “OK” per confermare. Se tutto è andato bene, Visual Studio dovrebbe presentarsi così:</p>
<p> </p>
<p>Come per Excel anche l’IDE di Word 2003 verrà integrato all’interno di Visual Studio 2005.</p>
<p>NB: Come avrete potuto notare, all’interno del documento word vi sono già dei Bookmark (parole all’interno di parentesi quadre di colore grigio chiaro). I Bookmark per i VSTO 2005 sono a tutti gli effetti degli oggetti e quindi hanno delle proprietà. Per dare un’occhiata alle proprietà di ogni singolo bookmark, basta posizionare il cursore all’interno del bookmark.</p>
<p>Per prima cosa dobbiamo creare l’ “Actions Pane Controls”  che andremo a caricare all’interno del TaskPane. Facciamo click con il tasto destro del mouse ad aggiungiamo una nuova cartella che chiameremo “TaskPane”.</p>
<p>Aggiungiamo all’interno di questa cartella un nuovo “Item” di tipo “Actions Pane Control” e chiamiamolo “TaskMenu.vb”.</p>
<p>Aggiungiamo a questo oggetto i seguenti controlli:</p>
<p>N° 2 DropDownList</p>
<p>N° 3 Label</p>
<p>N° 2 Button</p>
<p>Una volta aggiunti i controlli, graficamente dovrebbe apparire così:</p>
<p>&lt;&lt; TaskMenu1.bmp &gt;&gt;</p>
<p>Andiamo nel Behindcode del controllo “TaskMenu.vb”. Per prima cosa dobbiamo popolare il primo DropDownList  (nel mio progetto si chiama ListTerritory):</p>
<p> </p>
<p>      Private Sub TaskMenu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load</p>
<p>            Dim Ds As New DataSet</p>
<p> </p>
<p>            Ds = AdvWebService.TerritoryReturn</p>
<p> </p>
<p>            ListTerritory.DataSource = Ds</p>
<p>            ListTerritory.DisplayMember = "Territory.Name"</p>
<p>            ListTerritory.ValueMember = "Territory.TerritoryID"</p>
<p> </p>
<p>      End Sub</p>
<p>Poi dobbiamo creare la funzione per i due pulsanti:</p>
<p> </p>
<p>Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click</p>
<p>            ListEmployee.Visible = True</p>
<p>            Label3.Visible = True</p>
<p> </p>
<p>            Dim Ds2 As New DataSet</p>
<p> </p>
<p>            Ds2 = AdvWebService.ListEmployeeSales(ListTerritory.SelectedValue.ToString)</p>
<p>            ListEmployee.DataSource = Ds2</p>
<p>            ListEmployee.DisplayMember = "SalesEmployeeTable.LastName"</p>
<p>            ListEmployee.ValueMember = "SalesEmployeeTable.EmployeeID"</p>
<p> </p>
<p>      End Sub</p>
<p> </p>
<p>      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click</p>
<p>            Dim Ds3 As New DataSet</p>
<p>            Ds3.Clear()</p>
<p>            Ds3 = AdvWebService.EmployeeInformation(ListEmployee.SelectedValue.ToString)</p>
<p> </p>
<p>            Dim FName As New Binding("Text", Ds3, "EmployeeInformation.FirstName")</p>
<p>            Dim LName As New Binding("Text", Ds3, "EmployeeInformation.LastName")</p>
<p>            Dim AddressL As New Binding("Text", Ds3, "EmployeeInformation.AddressLine1")</p>
<p>            Dim PCode As New Binding("Text", Ds3, "EmployeeInformation.PostalCode")</p>
<p>            Dim City As New Binding("Text", Ds3, "EmployeeInformation.City")</p>
<p>            Dim DearName As New Binding("Text", Ds3, "EmployeeInformation.FirstName")</p>
<p>            Dim TotalSales As New Binding("Text", Ds3, "EmployeeInformation.SalesLastYear")</p>
<p>            Dim TotalRevenue As New Binding("Text", Ds3, "EmployeeInformation.SalesQuota")</p>
<p> </p>
<p> </p>
<p>            CongratulationLetter.Globals.ThisDocument.FirstName.DataBindings.Clear()</p>
<p>            CongratulationLetter.Globals.ThisDocument.FirstName.DataBindings.Add(FName)</p>
<p> </p>
<p>            CongratulationLetter.Globals.ThisDocument.LastName.DataBindings.Clear()</p>
<p>            CongratulationLetter.Globals.ThisDocument.LastName.DataBindings.Add(LName)</p>
<p> </p>
<p>            CongratulationLetter.Globals.ThisDocument.address.DataBindings.Clear()</p>
<p>            CongratulationLetter.Globals.ThisDocument.address.DataBindings.Add(AddressL)</p>
<p> </p>
<p>            CongratulationLetter.Globals.ThisDocument.zip.DataBindings.Clear()</p>
<p>            CongratulationLetter.Globals.ThisDocument.zip.DataBindings.Add(PCode)</p>
<p> </p>
<p>            CongratulationLetter.Globals.ThisDocument.city.DataBindings.Clear()</p>
<p>            CongratulationLetter.Globals.ThisDocument.city.DataBindings.Add(City)</p>
<p> </p>
<p>            CongratulationLetter.Globals.ThisDocument.Dear.DataBindings.Clear()</p>
<p>            CongratulationLetter.Globals.ThisDocument.Dear.DataBindings.Add(DearName)</p>
<p> </p>
<p>            CongratulationLetter.Globals.ThisDocument.TotalSales.DataBindings.Clear()</p>
<p>            CongratulationLetter.Globals.ThisDocument.TotalSales.DataBindings.Add(TotalSales)</p>
<p> </p>
<p>            CongratulationLetter.Globals.ThisDocument.revenue.DataBindings.Clear()</p>
<p>            CongratulationLetter.Globals.ThisDocument.revenue.DataBindings.Add(TotalRevenue)</p>
<p> </p>
<p>      End Sub</p>
<p> </p>
<p> </p>
<p> </p>
<p>Ora passiamo al Behindcode del documento word. Aggiungiamo all’interno della subroutine “ThisDocument_Startup” le seguenti linee di codice:</p>
<p> </p>
<p>            'Add to Taskpane the usercontrol TaskMenu.vb</p>
<p>            Me.ActionsPane.Controls.Add(ActionMenu)</p>
<p>            Me.ActionsPane.Visible = True</p>
<p>In questo modo stiamo aggiungendo al documento word l’ “Action Task Pane” contenente il controllo TaskMenu.</p>
<p>Lanciamo il debug dell’applicazione “CongratulationLetter.doc” e noteremo che al cambiare del territorio e del dipendente cambieranno anche i dati presenti nel documento word.</p>
<p> </p>
<p><a href="http://blog.shareoffice.it/webmaster/gallery/image/180.aspx">http://blog.shareoffice.it/webmaster/gallery/image/180.aspx</a></p>
<p> </p>
<p>Conclusioni</p>
<p>In questo progetto abbiamo visto come le applicazioni office 2003 possano interagire con i webservice presenti su di un sito web. Immaginate quante altre applicazioni possono essere create per ogni singola necessità (fatture, documenti di trasporto, cedolini ecc ecc).</p>
<p> </p><img src ="http://blog.shareoffice.it/webmaster/aggbug/3715.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fulvio Giaccari</dc:creator><title>Dove richiedere o scaricare i Visual Studio Tools for Office (VSTO)</title><link>http://blog.shareoffice.it/webmaster/archive/2005/12/29/3442.aspx</link><pubDate>Thu, 29 Dec 2005 10:23:00 GMT</pubDate><guid>http://blog.shareoffice.it/webmaster/archive/2005/12/29/3442.aspx</guid><description>&lt;p&gt;Ciao a tutti.&lt;br /&gt;Molti di voi mi hanno scritto chiedendomi come mai non trovano tra i progetti di Visual Studio 2005 quelli Office.&lt;br /&gt;Questo plug-in (si chiama VSTO 2005) lo si può avere o con Office Professional o lo si può scaricare con l'abbonamento MSDN.&lt;br /&gt;Se volete richiedere un CD trial contenente anche i VSTO potete farlo andando su questo link:&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/trial/"&gt;http://msdn.microsoft.com/trial/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ciao a tutti e buona programmazione&lt;/p&gt;
&lt;p&gt;Fulvio&lt;/p&gt;
&lt;p&gt;================================================&lt;br /&gt;Fulvio Giaccari [MCAD/MCSD/MCT]&lt;br /&gt;Responsabile Usergroup&lt;br /&gt;ShareOffice.it - Usergroup Italiano Sviluppatori Office&lt;br /&gt;Blog: &lt;a href="http://blog.shareoffice.it/webmaster"&gt;http://blog.shareoffice.it/webmaster&lt;/a&gt;&lt;br /&gt;================================================&lt;/p&gt;&lt;img src ="http://blog.shareoffice.it/webmaster/aggbug/3442.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Ciao a tutti.<br />Molti di voi mi hanno scritto chiedendomi come mai non trovano tra i progetti di Visual Studio 2005 quelli Office.<br />Questo plug-in (si chiama VSTO 2005) lo si può avere o con Office Professional o lo si può scaricare con l'abbonamento MSDN.<br />Se volete richiedere un CD trial contenente anche i VSTO potete farlo andando su questo link:<br /><a href="http://msdn.microsoft.com/trial/">http://msdn.microsoft.com/trial/</a></p>
<p>Ciao a tutti e buona programmazione</p>
<p>Fulvio</p>
<p>================================================<br />Fulvio Giaccari [MCAD/MCSD/MCT]<br />Responsabile Usergroup<br />ShareOffice.it - Usergroup Italiano Sviluppatori Office<br />Blog: <a href="http://blog.shareoffice.it/webmaster">http://blog.shareoffice.it/webmaster</a><br />================================================</p><img src ="http://blog.shareoffice.it/webmaster/aggbug/3442.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fulvio Giaccari</dc:creator><title>Recensione libro "Excel e VBA"</title><link>http://blog.shareoffice.it/webmaster/archive/2005/11/17/2855.aspx</link><pubDate>Thu, 17 Nov 2005 11:58:00 GMT</pubDate><guid>http://blog.shareoffice.it/webmaster/archive/2005/11/17/2855.aspx</guid><description>&lt;p&gt;Qui troverete la mia recensione su questo utilissimo compendio su Microsoft Excel e VBA scritto da Gianni Giaccaglini.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.shareoffice.it/webmaster/articles/2854.aspx"&gt;http://blog.shareoffice.it/webmaster/articles/2854.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src ="http://blog.shareoffice.it/webmaster/aggbug/2855.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Qui troverete la mia recensione su questo utilissimo compendio su Microsoft Excel e VBA scritto da Gianni Giaccaglini.</p>
<p><a href="http://blog.shareoffice.it/webmaster/articles/2854.aspx">http://blog.shareoffice.it/webmaster/articles/2854.aspx</a></p><img src ="http://blog.shareoffice.it/webmaster/aggbug/2855.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Fulvio Giaccari</dc:creator><title>VSTO Day del 27 Settembre 2005 (Slide)</title><link>http://blog.shareoffice.it/webmaster/archive/2005/09/30/1853.aspx</link><pubDate>Fri, 30 Sep 2005 16:08:00 GMT</pubDate><guid>http://blog.shareoffice.it/webmaster/archive/2005/09/30/1853.aspx</guid><wfw:comment>http://blog.shareoffice.it/webmaster/comments/1853.aspx</wfw:comment><comments>http://blog.shareoffice.it/webmaster/archive/2005/09/30/1853.aspx#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blog.shareoffice.it/webmaster/comments/commentRss/1853.aspx</wfw:commentRss><trackback:ping>http://blog.shareoffice.it/webmaster/services/trackbacks/1853.aspx</trackback:ping><description>&lt;p&gt;Ciao a tutti. Scusate per il ritardo con cui inserisco le slide ma sono stato incasinatissimo!!!&lt;/p&gt;
&lt;p&gt;Volevo ringraziarvi tutti per aver partecipato così numerosi all'evento (e soprattutto per non esservi addormentati dopo pranzo!!).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.shareoffice.it/progetti/VSTO_Settembre/Slide_settembre_vsto_2005_avanzato.zip"&gt;Fate click qui per fare il download delle mie slide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ciao&lt;/p&gt;
&lt;p&gt;Fulvio&lt;/p&gt;&lt;img src ="http://blog.shareoffice.it/webmaster/aggbug/1853.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>Ciao a tutti. Scusate per il ritardo con cui inserisco le slide ma sono stato incasinatissimo!!!</p>
<p>Volevo ringraziarvi tutti per aver partecipato così numerosi all'evento (e soprattutto per non esservi addormentati dopo pranzo!!).</p>
<p><a href="http://www.shareoffice.it/progetti/VSTO_Settembre/Slide_settembre_vsto_2005_avanzato.zip">Fate click qui per fare il download delle mie slide</a>.</p>
<p>Ciao</p>
<p>Fulvio</p><img src ="http://blog.shareoffice.it/webmaster/aggbug/1853.aspx" width = "1" height = "1" /></body></item></channel></rss>