2009-11-11 3 views
2

interface к объекту диаграммы в Excel только позволяет получить доступ к изображению, представляющий диаграмму с помощью двух методов:Использование Excel Interop, чтобы захватить изображение диаграммы Excel без записи на диск или с использованием буфера обмена

  • экспорта, который сохраняет изображение в файл
  • CopyPicture, который сохраняет изображение в буфер обмена

Оба этих варианта являются проблематичными (сохранение в файл очень медленно, и сохранение в буфер обмена может затирать пользовательские данные).

Есть ли лучший способ сделать это? Единственный способ, с помощью которого я могу думать, - создать временный диск с дисковой памятью и смонтировать его под словом «% TEMP% \ tmp_ram_disk», чтобы параметр сохранения на диск не был медленным, но обязательно, как это сделать или если это возможно. Это проект C#.

ответ

0

Один из вариантов, который может работать, - использовать файл с отображением памяти. Конечно, диск может быть задействован там, поэтому вы должны профилировать стандартный экспорт на диск и использовать файл с отображением памяти (предполагая, что медленность дискового ввода-вывода является вашей единственной проблемой с этим подходом).

У них нет поддержки в формате .Net, но там, вероятно, много реализаций.

+0

Метод Export принимает только имя файла в виде строки. Если у меня есть файл с отображением памяти в качестве объекта в моей программе, будет ли операционная система знать об этом при вызове _Chart.Export («% TEMP% \ chart.png»)? –

+0

Моя интуиция говорит «да», окна были бы достаточно умны, но потом я еще не пробовал. –

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 «Галерея динамической диаграммы» образца here, или вы можете скачать бесплатную пробную версию here и попробовать сами.

Отказ от ответственности: У меня есть SpreadsheetGear LLC