我使用Microsoft的DocumentFormat.OpenXML库生成OpenXml。我很想弄清楚如何将这个文档放到我的剪贴板中,以便我可以将数据粘贴到Excel中(就像它是从Excel复制的)。当我从Excel中复制时,我能够看到OpenXml格式化的数据来自Excel。我需要做相反的事情,从WPF应用程序中复制出来,然后使用高级Excel格式粘贴到Excel中(因此需要使用OpenXML)。如何将OpenXML放到剪贴板上以便粘贴到Excel中?
这里是我到目前为止的代码段:
MemoryStream documentStream = new MemoryStream();
SpreadsheetDocument spreadsheet = SpreadsheetDocument.Create(documentStream, SpreadsheetDocumentType.Workbook, true);
// create the workbook
spreadsheet.AddWorkbookPart();
Stream workbookStream = spreadsheet.WorkbookPart.GetStream();
spreadsheet.WorkbookPart.Workbook = new Workbook(); // create the worksheet
spreadsheet.WorkbookPart.AddNewPart<WorksheetPart>();
spreadsheet.WorkbookPart.WorksheetParts.First().Worksheet = new Worksheet();
...
const string SPREADSHEET_FORMAT = "XML Spreadsheet";
Clipboard.SetData(SPREADSHEET_FORMAT, clipboardData);
在ClipSpy *显示格式为* XML,但但是,它不是您声称的OpenXML扁平封装格式 - 如果仔细观察,您会注意到它实际上是2003 XML格式,而不是2007年(及更高版本)的OpenXML扁平封装格式。这两种格式不可互换。 – BrainSlugs83 2013-06-13 03:11:41
@ BrainSlugs83还使用SpreadsheetML格式。但是SpreadsheetML不支持图像,您可以在工作表之间复制/粘贴图像。所以他们也以某种方式提供XLSX。 – 2013-06-13 14:13:49
支持图像的剪贴板对象提供了其他格式 - 这些格式都不是OpenXML扁平包,也不是OpenXML二进制包(zip文件)。尽管有一些Biff格式 - 其中之一是“Biff12”,其中包含一个xlsb(非OpenXML zip文件;可以使用打包API打开,但它包含二进制文件而不是XML)。我还没有看到剪贴板中的任何OpenXML格式。 – BrainSlugs83 2013-06-14 00:15:34