【发布时间】:2020-08-18 05:41:43
【问题描述】:
我编写了以下简单的 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 多行图表的工作簿(足够远,以至于当文档打开时它们毫无疑问是看不见的);在运行程序之前关闭并重新打开文档(一旦滚动到,图表将已经呈现并存储在内存中)。
【问题讨论】:
-
您可以尝试在导出前将 Excel 实例可见性设置为 true。
-
@TimWilliams
_Application.Visible?我试试看。 -
@TimWilliams no dice =\ 同样的问题。
标签: c# excel export excel-interop