代码之家  ›  专栏  ›  技术社区  ›  Phobis

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

  •  5
  • Phobis  · 技术社区  · 16 年前

    我正在使用微软的DocumentFormat.OpenXml库生成OpenXml。我想弄清楚如何把这个文档放到我的剪贴板上,这样我就可以把我的数据粘贴到Excel中(就像它是从Excel复制的一样)。当我从Excel中复制时,我能够看到OpenXml格式的数据从Excel中出来。我需要做相反的事情,从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);
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   David Thielen    15 年前

    你不能。我已经跟微软谈过了,Office不会接受剪贴板中的OpenXML格式,也不会从Office以外的任何应用程序拖放(他们还声称Office本身不使用这种格式,但ClipSpy显示他们使用了这种格式——在平面包格式中)

    HTML是您最好的选择。

        2
  •  1
  •   Ivan Peevski    15 年前

    我已经手工构建了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>
    

    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)