【发布时间】:2019-02-14 23:24:42
【问题描述】:
我尝试将 excel 文件中的单元格范围保存到图片中。 我使用了 interop.excel api 中的 CopyPicture 方法,所以图片应该在剪贴板上。 例如,当我在 word 文档上按 ctrl+v 时,我得到了图片,但我无法通过代码成功获取它。 GetImageFromClipBoard 方法返回的数据为空。
public void SaveAsImage()
{
var usedRange = ws.UsedRange;
int startRow = usedRange.Row;
int endRow = startRow + usedRange.Rows.Count - 1;
int startColumn = usedRange.Column;
int endColumn = startColumn + usedRange.Columns.Count - 1;
Xl.Range rng = wb.ActiveSheet.Range[ws.Cells[1, 1],
ws.Cells[endRow, endColumn]];
rng.CopyPicture(Xl.XlPictureAppearance.xlScreen,
Xl.XlCopyPictureFormat.xlBitmap);
Image image = GetImageFromClipBoard();
image.Save("image.bmp", System.Drawing.Imaging.ImageFormat.Bmp);
}
[STAThread]
private Image GetImageFromClipBoard()
{
IDataObject clipboardData = Clipboard.GetDataObject();
Exception threadEx = null;
Thread staThread = new Thread(
delegate ()
{
try
{
clipboardData = Clipboard.GetDataObject();
}
catch (Exception ex)
{
threadEx = ex;
}
});
staThread.SetApartmentState(ApartmentState.STA);
staThread.Start();
staThread.Join();
return (Bitmap)clipboardData.GetData(DataFormats.Bitmap);
}
【问题讨论】:
标签: c# interop clipboard excel-interop image-formats