Excel中图表对象的interface仅允许通过两种方法访问代表图表的图像:
这两个选项都存在问题(保存到文件非常慢,保存到剪贴板可能会破坏用户数据)。
有更好的方法吗?我能想到的唯一方法是使用创建临时ram磁盘并将其挂载在'%TEMP%\ tmp_ram_disk \'下,以便“保存到磁盘”选项不会很慢,但确定如何做到这一点或者如果它甚至可能。这是一个C#项目。
答案 0 :(得分:0)
可能有效的一个选项是使用内存映射文件。当然磁盘可以参与其中,因此您应该将标准导出配置文件与使用内存映射文件进行配置(假设磁盘I / O的缓慢是您唯一关心的方法)。
他们在.Net中没有开箱即用的支持,但可能还有很多实现。
答案 1 :(得分: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“动态图表库”示例here中看到它可以做的代表性示例,或者您可以免费下载审判here并亲自尝试。
免责声明:我拥有SpreadsheetGear LLC