C# Excel.Chart.Export不工作

C# Excel.Chart.Export不工作,c#,excel,C#,Excel,我有一个excel文件,在一张纸上有多个图表。我从excel中获取图表并将其保存到图片中 我的代码: workSheet = workBook.Sheets[1] as Excel._Worksheet; Excel.ChartObjects chartObjects =(Excel.ChartObjects)workSheet.ChartObjects(Type.Missing); int chartCount = chartObjects.Count; for (int j = 1; j &

我有一个excel文件,在一张纸上有多个图表。我从excel中获取图表并将其保存到图片中

我的代码:

workSheet = workBook.Sheets[1] as Excel._Worksheet;
Excel.ChartObjects chartObjects =(Excel.ChartObjects)workSheet.ChartObjects(Type.Missing);
int chartCount = chartObjects.Count;
for (int j = 1; j <= chartCount; j++)
{
     Excel.ChartObject chart = (Excel.ChartObject)chartObjects.Item(j);
     path = Path.Combine(Application.StartupPath, @"Img\" + chart.Chart.Name + ".bmp");
     chart.Chart.Export(path, "BMP", true);
}
工作表=工作簿。工作表[1]为Excel。\u工作表;
Excel.ChartObjects ChartObjects=(Excel.ChartObjects)工作表.ChartObjects(Type.Missing);
int chartCount=chartObjects.Count;

对于(int j=1;j<p>)在调用.Outlook时屏幕上至少部分可见的导出图表会导致空白图像。

在导出图表之前,请尝试添加一行代码以激活要导出的图表(我遇到了相同的问题,这对我很有效):


我遇到了同样的问题并尝试了.Activate技巧,但没有任何帮助。基于图表需要至少部分可见的评论,我在.Export行之前尝试了一个简单的延迟循环:

For i = 1 to N
  DoEvents
Next i
这就解决了问题。通过一些实验,我发现N>=3起作用,但是如果N=1或2,或者如果我取出循环,代码会返回到输出空白图片。我不明白,但我想我会把我的观察结果传给大家。

谢谢@Xiaofu 您在导出之前关于图表激活的信息真的帮助了我,因为我花了将近一天的时间在我的小Python项目上寻找解决方案。干杯

对于任何希望使用Python脚本版本将Excel图表导出为GIF或PNG格式的人,以下代码适用于我:

Excel.ChartObject chart = (Excel.ChartObject)chartObjects.Item(j);
path = Path.Combine(Application.StartupPath, @"Img\" + chart.Chart.Name + ".bmp");
chart.Activate(); //New line
chart.Chart.Export(path, "BMP", true);
# Python function to export an Excel chart to a GIF image format
# Ref: https://stackoverflow.com/questions/11110752/export-charts-from-excel-as-images-using-python
def ChartExport(cwd, fileName):
    app = win32.Dispatch('Excel.Application')
    workbook_file_name = cwd + fileName
    workbook = app.Workbooks.Open(Filename=workbook_file_name)

    # WARNING: The following line will cause the script to discard any unsaved changes in your workbook
    app.DisplayAlerts = False

    i = 1   # There are multiple charts on the worksheet. So using a number suffix to add the output gif filename
    for sheet in workbook.Worksheets:
        for chartObject in sheet.ChartObjects():
            #print('i = ', i, ' -- ', sheet.Name + ':' + chartObject.Name)
            chartObject.Activate()  # This line was added after finding exporting problem with 2nd and 3rd charts. Thanks Xiaofu Ref: https://stackoverflow.com/questions/15911536/excel-chart-export-not-working
            chartObject.Chart.Export(cwd + '\\chart' + str(i) + '.gif')  # Export chart to a gif file format
            i += 1

    workbook.Close(SaveChanges=False, Filename=workbook_file_name)
    return

它是否适用于其他文件类型(例如.PNG或.JPG)?不适用于任何文件类型
@
“Img\”+chart.chart.Name+“.bmp”)
之前的
@
是什么。我创建了位图类型的图片文件,但它只是一个空文件hmmmm well c#不是我的专长,但在Excel中,我知道你需要做
。导出(文件路径为字符串,文件类型为字符串,交互式为布尔值)
。只要正确连接路径,这看起来应该可以工作。