首页 > 解决方案 > System.Runtime.InteropServices.COMException: '远程过程调用失败。(来自 HRESULT 的异常:0x800706BE)' 使用 ChartObject.Add() 时

问题描述

我想在我的 excel 中添加图表,为此我正在使用 Microsoft.Office.Interop.Excel。首先,我正在使用 System.Data.OleDb 进行一些 excel 数据修改。所以我的情况有两种情况

  1. 我没有使用 System.Data.OleDb 操作,图表被添加到 excel 中。
  2. 我首先使用 System.Data.OleDb 操作,然后尝试添加图表,在这种情况下,它给出了上述错误

代码如下:

这是我使用 OLEDB 修改 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);
        }
    }

这是图表:

错误在这一行:

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();
    }

所以请帮忙,在此先感谢。

标签: c#exceloledboffice-interop

解决方案


推荐阅读