c# - System.Runtime.InteropServices.COMException: '远程过程调用失败。(来自 HRESULT 的异常:0x800706BE)' 使用 ChartObject.Add() 时
问题描述
我想在我的 excel 中添加图表,为此我正在使用 Microsoft.Office.Interop.Excel。首先,我正在使用 System.Data.OleDb 进行一些 excel 数据修改。所以我的情况有两种情况
- 我没有使用 System.Data.OleDb 操作,图表被添加到 excel 中。
- 我首先使用 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();
}
所以请帮忙,在此先感谢。
解决方案
推荐阅读
- javascript - 如何获取用户的输入以使用 JS 在视频进度上创建标记?
- typescript - Angular:需要属性绑定
- python - 尝试使用 pip 安装 xgboost 时遇到以下问题,找不到文件/目录,有人可以帮忙吗?
- regex - 使用命令提示符获取两个文本之间的文本的正则表达式
- mysql - 如何在 MySQL 中替换正则表达式模式
- python-3.x - 如何修改散点图图例以显示相同类型句柄的不同格式?
- python - 如何计算TF2.0中两个张量之间的余弦相似度和欧几里得距离?
- c# - ObjectlistView 复选框问题
- flutter - 如何在 Flutter 中获取当前状态?
- mysql - 尝试加入表 Codeigniter 时出现数据库错误