4

我有一个工作表上有多个图表的 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);
}

但只导出空白图片。

请帮我

4

4 回答 4

3

在调用 .Export 时导出至少部分在屏幕上不可见的图表会导致出现空白图像。

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

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);
于 2013-08-06T15:58:08.783 回答
1

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

For i = 1 to N
  DoEvents
Next i

这解决了这个问题。通过一些实验,我发现 N >= 3 有效,但是如果 N = 1 或 2,或者如果我取消循环,则代码返回到输出空白图片。我不明白,但我想我会传递我的观察结果。

于 2016-08-19T20:27:44.530 回答
0

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

对于正在寻找 Python 脚本版本以将 Excel 图表导出为 GIF 或 PNG 格式的任何人,以下是对我有用的代码:

# 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
于 2019-04-28T12:46:53.097 回答
0

我刚刚遇到了这种确切的情况。不幸的是,使用 chart.Activate() 对我不起作用。然而,关于图表必须部分可见的部分给了我一个关于该做什么的线索。我刚刚最大化了窗口,使我的所有图表都可见,并且导出再次开始工作。

Excel.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlMaximized;    
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);
于 2021-10-05T16:08:01.357 回答