如何将OpenXML放到剪贴板上以便粘贴到Excel中?

我使用Microsoft的DocumentFormat.OpenXML库生成OpenXml。 我想弄清楚如何将这个文件放到我的剪贴板中,这样我就可以把我的数据粘贴到Excel中(就好像它是从Excel复制的)。 当我从Excel中复制时,我可以看到OpenXml格式的数据来自Excel。 我需要做相反的事情,复制一个WPF应用程序,并使用高级Excel格式(因此需要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); 

你不能。 我已经通过这与微软和Office不会接受剪贴板中的OpenXML格式,或从任何应用程序从办公室以外的任何应用程序的拖放。 (他们还声称Office本身不使用这种格式,但ClipSpy表明他们使用扁平封装格式。

HTML是你最好的select。

我已经手动构build了XML(而不是通过OpenXML),这已被Excel接受。

关于标题的一些有趣的细节:

注意第二行。

完整的XML我正在发送(用于testing):

 <?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <Styles> <Style ss:ID="Default" ss:Name="Normal"> <Alignment ss:Vertical="Bottom"/> <Borders/> <Font/> <Interior/> <NumberFormat/> <Protection/> </Style> <Style ss:ID="s21"> <NumberFormat ss:Format="Currency"/> </Style> <Style ss:ID="s22"> <Interior ss:Color="#FFFF00" ss:Pattern="Solid"/> </Style> </Styles> <Worksheet ss:Name="Sheet2"> <Table ss:ExpandedColumnCount="256" ss:ExpandedRowCount="65536" x:FullColumns="1" x:FullRows="1" ss:DefaultRowHeight="13.2"> <Row> <Cell> <Data ss:Type="String">test</Data> </Cell> <Cell ss:StyleID="s21"> <Data ss:Type="Number">1.12</Data> </Cell> <Cell> <Data ss:Type="Number">1.1213</Data> </Cell> <Cell ss:StyleID="s21"> <Data ss:Type="Number">12.12121</Data> </Cell> <Cell ss:StyleID="s22"> <Data ss:Type="String">test</Data> </Cell> </Row> </Table> </Worksheet> </Workbook> 

代码发送到剪贴板(VB.Net):

 Dim xml As String = File.ReadAllText("excel.xml") Dim xmlStream As Stream = New MemoryStream() xmlStream.Write(System.Text.ASCIIEncoding.ASCII.GetBytes(xml), 0, xml.Length) Clipboard.SetData("XML Spreadsheet", xmlStream)