2009-11-11 22 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

相關問題