System.Runtime.InteropServices.COMException: 'The remote procedure call failed. (Exception from HRESULT: 0x800706BE)' when using ChartObject.Add()

0

I want to add charts in my excel and for that I am using Microsoft.Office.Interop.Excel. First I am doing some excel data modifications using System.Data.OleDb. So there are two cases in my situation

  1. I am not using System.Data.OleDb operations and the charts get added to excel.
  2. I am using System.Data.OleDb operations first and then trying to add the charts and in this case its giving the above error

The code is as follow :

This is where i am using OLEDB to modify data in excel :

static void Step1(OleDbConnection pathConnection)
    {
        Console.WriteLine("Creating new sheet 'DataWithTimePerTask' and adding columns 'Total Time including setup' and 'Total Time only for script'");
        var app = ConfigurationManager.AppSettings;
        string query1 = app["createDataWithTimePerTaskTable"];
        string query2 = app["selectEndedSetup"];
        string query3 = app["selectEndedStarted"];

        try
        {
            OleDbCommand cmd = new OleDbCommand(query1, pathConnection);
            cmd.ExecuteNonQuery();
            cmd = new OleDbCommand(query2, pathConnection);
            using (OleDbDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    if(dr[0].ToString() != "" && dr[1].ToString() != "")
                    {
                        TimeSpan time = Convert.ToDateTime(dr[0].ToString()) - Convert.ToDateTime(dr[1].ToString());
                        OleDbCommand command = new OleDbCommand(string.Format("update [DataWithTimePerTask$] set [Total Time including setup]=\"{0}\" where [ATP Task Id]={1}", time, dr[2]), pathConnection);
                        command.ExecuteNonQuery();
                    }
                }
            }
            cmd = new OleDbCommand(query3, pathConnection);
            using (OleDbDataReader dr = cmd.ExecuteReader())
            {
                while (dr.Read())
                {
                    if (dr[0].ToString() != "" && dr[1].ToString() != "")
                    {
                        TimeSpan time = Convert.ToDateTime(dr[0].ToString()) - Convert.ToDateTime(dr[1].ToString());
                        OleDbCommand command = new OleDbCommand(string.Format("update [DataWithTimePerTask$] set [Total Time only for script]=\"{0}\" where [ATP Task Id]={1}", time, dr[2]), pathConnection);
                        command.ExecuteNonQuery();
                    }
                }
            }
        }
        catch(Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

This is for the charts :

The error is at this line :

var chartObject = charts.Add(60, 10, 300, 300) as Microsoft.Office.Interop.Excel.ChartObject;

static void CreateChart(string filename)
    {
        string topLeft = "B1";
        string bottomRight = "B";
        string topLeft1 = "A1";
        string bottomRight1 = "A";

        var application = new Application();
        var workbook = application.Workbooks.Open(filename);
        var worksheet = workbook.Worksheets[1] as
            Microsoft.Office.Interop.Excel.Worksheet;

        var charts = worksheet.ChartObjects() as
        Microsoft.Office.Interop.Excel.ChartObjects;
        var chartObject = charts.Add(60, 10, 300, 300) as
            Microsoft.Office.Interop.Excel.ChartObject; // The error is on this line
        var chart = chartObject.Chart;


        bottomRight += worksheet.UsedRange.Columns["B:B", Type.Missing].Rows.Count;
        bottomRight1 += worksheet.UsedRange.Columns["A:A", Type.Missing].Rows.Count;
        // Set chart range.
        var range = worksheet.get_Range(topLeft, bottomRight);
        chart.SetSourceData(range);
        var series = chart.SeriesCollection();
        series[1].Name = "abc";
        series[1].XValues = worksheet.get_Range(topLeft1, bottomRight1);
        series[1].ChartType = XlChartType.xlLine;

        workbook.Save();
        workbook.Close();
        application.Quit();
    }

So please help , Thanks in advance.

c#
excel
oledb
office-interop

0 Answers

Nobody has answered this question yet.


User contributions licensed under CC BY-SA 3.0