2

Excel中图表对象的接口只允许通过两种方法访问表示图表的图像:

  • 导出,将图像保存到文件
  • CopyPicture,将图像保存到剪贴板

这两个选项都有问题(保存到文件真的很慢,保存到剪贴板可能会破坏用户数据)。

有一个更好的方法吗?我能想到的唯一方法是使用创建一个临时 ram 磁盘并将其安装在 '%TEMP%\tmp_ram_disk\' 下,这样保存到磁盘的选项就不会很慢,但要确定如何做到这一点或者如果它甚至可能。这是一个 C# 项目。

4

2 回答 2

0

SpreadsheetGear for .NET可以加载 Excel 工作簿并使用几行代码从图表返回图像:

namespace GetChartImage
{
    class Program
    {
        static void Main(string[] args)
        {
            // Open the workbook.
            var workbook = SpreadsheetGear.Factory.GetWorkbook(@"t:\tmp\Chart.xlsx");
            // Get a chart named "Chart 1" on the sheet named "Sheet1".
            var chart = workbook.Worksheets["Sheet1"].Shapes["Chart 1"].Chart;
            // Get a System.Drawing.Bitmap image of the chart.
            var bitmap = new SpreadsheetGear.Drawing.Image(chart).GetBitmap();
            // Save it to a file and launch just to see that it worked.
            bitmap.Save(@"t:\tmp\Chart.png", System.Drawing.Imaging.ImageFormat.Png);
            System.Diagnostics.Process.Start(@"t:\tmp\Chart.png");
        }
    }
}

SpreadsheetGear 不支持所有 Excel 图表功能(目前),但您可以在此处的实时 ASP.NET“动态图表库”示例中查看它可以做什么的代表性示例,或者您可以在此处下载免费试用版并自己尝试。

免责声明:我拥有 SpreadsheetGear LLC

于 2009-11-13T03:29:39.757 回答
0

一种可行的选择是使用内存映射文件。当然,磁盘可能会涉及到磁盘,因此您应该分析标准导出到磁盘与使用内存映射文件的对比(假设磁盘 i/o 的缓慢是您对这种方法的唯一关注)。

他们在 .Net 中还没有开箱即用的支持,但那里可能有很多实现。

于 2009-11-11T17:14:57.123 回答