Consuming Web Service from Excel

Previous versions of Microsoft Office Applications were able to access web services using Microsoft Office Web Service Toolkit. But the Web Services Toolkit is not a Microsoft supported product.

Microsoft Visual Studio 2008 / 2010 provides support for creating Office 2007 / 2010 application.

And easily make calls to Web Services.

Using this article you can learn how to consume a web service and create an add-on for Excel.

Step 1: Creating an Excel 2010 workbook solution in Visual Studio 2010.

CnsWbSrvc1.jpg

Step 2: Open Sheet1.cs for viewing the code:

CnsWbSrvc2.jpg

Step 3: Add a Service reference:

CnsWbSrvc3.jpg

CnsWbSrvc4.jpg

public static void BindWorkSheet()

{

    List<ItemList> itemlist = new List<ItemList>();

    ItemList_Filter[] filters = null;

    ItemList_Service service = new ItemList_Service();

    ICredentials credntial = new System.Net.NetworkCredential(ConfigurationSettings.AppSettings["username"].ToString(), ConfigurationSettings.AppSettings["password"].ToString(), ConfigurationSettings.AppSettings["domain"].ToString());

    service.Credentials = credntial;

    itemlist = service.ReadMultiple(filters, string.Empty, 0).ToList();

    if (itemlist != null)

    {

        if (itemlist.Count() > 0)

        {                  

            Excel.Worksheet sheet = Globals.ThisWorkbook.Worksheets[1];                                

            sheet.ClearArrows();

            General general = new General();

            DataTable dt = general.ToDataTable(itemlist);

            if (dt != null)

            {

                if (dt.Rows.Count > 0)

                {

                    for (int j = 1; j <= dt.Columns.Count; j++)

                    {

                        if (dt.Columns[j - 1].ColumnName != null)

                        {

                            ((Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, j]).Value2 =
                                dt.Columns[j - 1].ColumnName.ToString();

                            ((Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, j]).Font.Bold
                                 = "true";

                            ((Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, j]).Font.Color
                                 = System.Drawing.Color.Black;

                        }

                    }

                    for (int i = 1; i <= dt.Rows.Count; i++)

                    {

                        for (int j = 1; j <= dt.Columns.Count; j++)

                        {

                            if (dt.Rows[i - 1][j - 1] != null)

                            {

                                ((Microsoft.Office.Interop.Excel.Range)sheet.Cells[i+1, j]).Value2 = dt.Rows[i - 1][j - 1].ToString();                                       

                                ((Microsoft.Office.Interop.Excel.Range)sheet.Cells[i+1, j]).Font.Color = System.Drawing.Color.Black;

                            } 

                        }

                    }

                }

            } 

        }

    }

}


Step 4: Build and run the application.

CnsWbSrvc5.jpg


Step 5: Create the Refresh Add-On so the user can get fresh data every time.

Add a Ribbon control to the project:

CnsWbSrvc6.jpg

CnsWbSrvc7.jpg

On the refresh button click, rebind the Excel file:

private void btnrefresh_Click(object sender, RibbonControlEventArgs e)
{
    ExcelDynamicNAV.
Sheet1.BindWorkSheet();
}


Step 6: Your app.setting file is like:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
        </sectionGroup>
    </configSections>
    <system.serviceModel>
        <bindings />
        <client />
    </system.serviceModel>
    <applicationSettings>
        <ExcelDynamicNAV.Properties.Settings>
            <setting name="ExcelDynamicNAV_ItemListRef_ItemList_Service"
                serializeAs="String">
                <value>Web service URL</value>
            </setting>
        </ExcelDynamicNAV.Properties.Settings>     
    </applicationSettings>
  <appSettings>
    <!-- Web service Credentials -->
    <add key="username" value=""/>
    <add key="password" value=" "/>
    <add key="domain" value=" "/>
  </appSettings>
</configuration>


Similar Articles