Используйте Excel Interop для захвата изображения диаграммы Excel без записи на диск или с использованием буфера обмена. - PullRequest
2 голосов
/ 11 ноября 2009

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 13 ноября 2009

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

0 голосов
/ 11 ноября 2009

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

Они не имеют встроенной поддержки в .Net, но, вероятно, существует множество реализаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...