首页 文章

使用C#将Excel图表工作表复制到剪贴板

提问于
浏览
0

我正在写一个C#应用程序 .

其中一项任务是打开Excel电子表格并将图表表格粘贴到C#应用程序中 . 请注意我指的是一个CHART SHEET ...而不是普通工作表中嵌入的图表对象 .

我有理由想在这里做到准确 .

我使用普通的COM从C#到Excel进行通信......

using using Microsoft.Office.Interop.Excel;

在普通工作表中嵌入图表的情况下,API可以正常工作 . 我从工作簿中检索工作表,从工作表中获取chartObject并在chartObject上发布副本按预期工作,即剪贴板的内容就像从Excel本身启动了副本一样 .

处理图表时情况有所不同 . 我从工作簿中获取了Charts,然后获得了我感兴趣的Chart实例 . 一切都很好 . 但是,在此处对图表发出Copy()不会导致剪贴板看起来像是从Excel启动操作 . CopyPicture也没有帮助,因为pic真的被炸成了不成比例而剪贴板缺少通常的PNG,GIFF,JPEG格式 - Clipboard.getImage()返回null,而doI看到图像在剪贴板中 . Copy()仅在剪贴板上创建预览,数据对象和OLE私有数据格式而不是更多...

//this does not work - it is for chart sheets
Excel.Charts charts = wb.Charts;
Excel.Chart chart = charts["mychartname"];
chart.Copy(); or chart.CopyPicture();    <-- these do not work as expected...


// this works fine but only covers embedded charts
Excel.ChartObjects charts = ws.ChartObjects;
Excel.ChartObject chart = charts["mychartname"];
chart.Copy();

为什么ChartObject上的Copy与Chart上的Copy不同?复制()是一个微不足道的操作...并且看到它不在Chart上工作是一个巨大的惊喜......

有解决方法吗?无论复制操作是从我的C#app以编程方式启动还是通过Excel本身的用户操作,我基本上都希望剪贴板看起来一样 .

如果图表表听起来很陌生......它基本上只是一张表,上面只有一张图表 . 您可以先创建一个基本的嵌入式图表,然后将其(设计选项卡)移动到专用工作表 .

谢谢 .

1 回答

  • 0

    经过一些反复试验,我发现了一个简单且非常可接受的解决方案

    而不是在Chart实例上调用Copy(),从Chart获取ChartArea并在其上调用Copy .

    Excel.Charts charts = wb.Charts;
    Excel.Chart chart = charts["mychartname"];
    Excel.ChartArea chartArea = chart.ChartArea;
    chartArea.Copy();
    

    记得COM发布所有中间COM对象:)

相关问题