C# 将Excel图表导出为图像
我编写了以下简单的C#控制台应用程序,用于从Excel工作簿导出所有图表。除非打开文档后图表还没有滚动到,否则它工作正常,在这种情况下会生成一个空图像文件C# 将Excel图表导出为图像,c#,excel,export,excel-interop,C#,Excel,Export,Excel Interop,我编写了以下简单的C#控制台应用程序,用于从Excel工作簿导出所有图表。除非打开文档后图表还没有滚动到,否则它工作正常,在这种情况下会生成一个空图像文件 using Excel = Microsoft.Office.Interop.Excel; using System; using System.Diagnostics; namespace ExcelExporter { class ChartExporter { const string EXPORT_T
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);
)仅适用于范围有没有办法滚动到ChartObject
s,或者以其他方式确保它们正确导出到图像?
对于测试,使用一个向下1000多行图表的工作簿(足够远,当文档打开时,它们无疑是看不见的);在运行程序之前关闭并重新打开文档(一旦滚动到,图表将已呈现并存储在内存中)。VBA,但同样的想法可能适用于C#
我发现下面的方法对我有用
foreach (Excel.ChartObject co in chartObjects)
{
co.Select();
Excel.Chart chart = (Excel.Chart)co.Chart;
chart.Export(exportPath + @"\" + chart.Name + ".png", "PNG", false);
}
.NET Core 3.1使用Interop.Excel并将VS中的COM引用更改为“复制本地”
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();
}
您可以在导出之前尝试将Excel实例可见性设置为true。@TimWilliams?我要试试。@TimWilliams no dice=\同样的问题。创造了奇迹(而且速度也很快!)。对于任何寻找C#等价物的人(正如我上面的代码所示):
app.Goto(co.TopLeftCell,true)代码>
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();
}