2009-11-11 29 views
2

interface到图表对象在Excel中只允许以两种方法获得表示图表的图像:使用Excel互操作抓住Excel图表的图像,而不写入磁盘或使用剪贴板

  • 出口,其图像保存到一个文件
  • CopyPicture,将图像保存到剪贴板

这两个选项是有问题的(保存到文件实在是太慢了,并保存到剪贴板可能破坏用户数据)。

有没有更好的方法来做到这一点?我能想到的唯一方法是使用创建一个临时RAM磁盘并将其挂载在'%TEMP%\ tmp_ram_disk \'下面,以便保存到磁盘选项不会很慢,但是确定该怎么做或者甚至可能。这是一个C#项目。

回答

0

可能工作的一个选项是使用内存映射文件。当然,磁盘可能会涉及到,因此您应该将标准导出到磁盘与使用内存映射文件进行配置(假设磁盘I/O的缓慢是您唯一关心的方法)。

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

+0

Export方法只接受文件名作为字符串。如果我的程序中有一个内存映射文件作为对象,当_Chart.Export(“%TEMP%\ chart.png”)被调用时,操作系统是否会意识到它? – 2009-11-11 22:30:55

+0

我的直觉说是的,windows会很聪明,但是我没有尝试过。 – 2009-11-11 23:00:03

0

可以加载一个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“Dynamic Chart Gallery”示例here中做什么,或者您可以下载免费试用版here并自行试用。

声明:我自己的SpreadsheetGear LLC