当前位置: 首页 > 知识库问答 >
问题:

将Excel图表导出为图像

宁弘亮
2023-03-14

我编写了以下简单的C#控制台应用程序,用于从Excel工作簿导出所有图表。它工作正常,除非打开文档后图表没有滚动到,在这种情况下会生成一个空的图像文件。

using Excel = Microsoft.Office.Interop.Excel;
using System;
using System.Diagnostics;

namespace ExcelExporter
{
    class ChartExporter
    {
        const string EXPORT_TO_DIRECTORY = @"C:\Users\Sandy\Desktop\Excel\Charts";

        static void Main(string[] args)
        {
            Excel.Application app = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") as Microsoft.Office.Interop.Excel.Application;

            ConsoleColor c = Console.ForegroundColor;
            Console.ForegroundColor = ConsoleColor.Green;
            Console.Write("Export To: ");
            Console.ForegroundColor = c;
            string exportPath = Console.ReadLine();

            if (exportPath == "")
                exportPath = EXPORT_TO_DIRECTORY;

            Excel.Workbook wb = app.ActiveWorkbook;

            foreach (Excel.Worksheet ws in wb.Worksheets)
            {
                Excel.ChartObjects chartObjects = (Excel.ChartObjects)(ws.ChartObjects(Type.Missing));

                foreach (Excel.ChartObject co in chartObjects)
                {
                    Excel.Chart chart = (Excel.Chart)co.Chart;
//                  app.Goto(co, true);
                    chart.Export(exportPath + @"\" + chart.Name + ".png", "PNG", false);
                }
            }

            Process.Start(exportPath);
        }
    }
}

我尝试了几次滚动到该对象的失败尝试;程序底部注释掉的行(app.Goto(co,true) )仅适用于范围。有没有办法滚动到ChartObjects,或者以其他方式确保它们正确导出到图像?

对于测试,使用一个向下1000行的图表的工作簿(足够远,当文档打开时它们毫无疑问是看不见的);在运行程序之前关闭并重新打开文档(一旦滚动到,图表将已呈现并存储在内存中)。


共有3个答案

强烨
2023-03-14

...NET Core 3.1使用Interop.Excel并将VS中的COM ref更改为复制本地

   private static void ExportExcelChart()
    {
        var excelApp = new excel.Application(); 
        var wb = excelApp.Workbooks.Open(@"z:\scratch\acme_inc.xlsx");
        var ws = (excel.Worksheet)wb.Sheets[1];
        var chartObjects= ws.ChartObjects() as IEnumerable;

        foreach (excel.ChartObject co in chartObjects)
        { 
            co.Select();
            excel.Chart chart = (excel.Chart)co.Chart;
            chart.Export($@"z:\{chart.Name}.png", "PNG", false);
        }
        wb.Close();
        excelApp.Quit();
    }
诸彬郁
2023-03-14

我发现下面的方法对我有用

            foreach (Excel.ChartObject co in chartObjects)
            {
                co.Select();
                Excel.Chart chart = (Excel.Chart)co.Chart;
                chart.Export(exportPath + @"\" + chart.Name + ".png", "PNG", false);
            }
杨腾
2023-03-14

VBA,但同样的想法可能适用于C#...

Dim co As ChartObject, sht As Worksheet, x As Long
x = 1
Set sht = ThisWorkbook.Sheets("Sheet1")
For Each co In sht.ChartObjects
    Application.Goto co.TopLeftCell, True
    co.Chart.Export "C:\_stuff\test\chart" & x & ".jpg", "JPG", False
    x = x + 1
Next co
 类似资料:
  • 我有一个excel工作簿,每张工作表有一个图表和多个工作表,我试图将所有图表作为图片导出到PowerPoints中。问题是我的当前代码无法工作。我的代码出现错误: > 简报按预期打开 将复制我在运行前选择的活动工作表的图表 复制的图表粘贴在PowerPoint中 PowerPoint创建下一张幻灯片 现在问题再次复制同一工作表中的同一图表!我希望代码移动到下一张工作表,选择上面的图表,并在下一张幻

  • 问题内容: 我一直试图将Excel中的图表导出为Python中的图像文件(JPG或ING)。我正在看WIn32com。这是我到目前为止所拥有的。 这就是我被困住的地方。我现在需要将所选范围复制到文件中。对文档的任何帮助或指导都可以对我有很大帮助。 我已经基于以下VBA脚本对以上代码进行了建模: 来自以下代码段:http://vbadud.blogspot.com/2010/06/how-to-sa

  • 这个问题涉及一个运行在Ubuntu12.04上的Eclipse Kepler实例。我有一个用例图,我需要将它作为图像文件包含在文档中。我右键点击.di文件,选择导出所有图...然后选择PDF作为文件格式。作为回报,我将得到一个错误窗口,其中包含以下内容: 会话数据: eclipse.buildid=4.3.2.M20140221-1700 java.version=1.6.0_26 java.ve

  • 所有图表都可以导出为 PDF 文件。若要导出当前图表,请点击 。 单一图表 比对图表

  • 我想将股票图表ohlc导出到Excel 我正在使用EPPlus,现在我知道EPPlus不支持绘制股票图表,因此我正在寻找另一个第三方dll,我找到了aspose,但它是一种付费功能。 有人能推荐其他方法导出股票图表用C#代码在Excel中创建股票图表吗? 或者它是可能的创建股票图表ohlc在Excel由C#由EPPlus? 当使用aspal时,我需要在bw代码中使用它,在我保存aspal工作簿的时

  • 我正试图将数据从Excel导入到SQL Server表中,但遇到了这个错误。你能建议如何避免这些吗?