我使用Microsoft的DocumentFormat.OpenXML库生成OpenXml。我想弄清楚如何将这个文档放到我的剪贴板中,这样我就可以将我的数据粘贴到Excel中(好像它是从Excel复制的)。当我从Excel中复制时,我能够看到来自Excel的OpenXml格式化数据。我需要反过来,复制出WPF应用程序,并使用高级Excel格式粘贴到Excel(因此需要OpenXML)。
以下是我到目前为止的摘要:
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);
答案 0 :(得分:1)
你做不到。我和微软一直在讨论这个问题,Office不会在剪贴板中接受OpenXML格式,也不会从Office以外的任何应用程序中拖放。 (他们还声称Office本身不使用这种格式,但ClipSpy表明他们这样做 - 采用扁平封装格式。)
HTML是你最好的选择。
答案 1 :(得分:1)
我手动构建了XML(不是通过OpenXML),已被excel接受。
标题的一些有趣细节:
注意第二行。
我发送的完整XML(用于测试):
<?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)