get data from clipboard (copied from Powerpoint)

chriscode

SCENARIO

  • My users will copy so data from Powerpoint (thus placing it into the clipboard)

THE PROBLEM

  • When trying to read “Art::Text Clipformat” Powerpoint crashes when the GetData() method is evaluated.

SOURCE CODE - ORIGINAL - WITH THE PROBLEM

[STAThread]
static void Main(string[] args)
{

            var dataobject = System.Windows.Forms.Clipboard.GetDataObject();

            String[] formats = dataobject.GetFormats();
            foreach (String format in formats)
            {
                var streamTest = (System.IO.Stream)dataobject.GetData(format);
            }
}

UPDATED QUESTION AND ANSWER

  • How can I read "Text Clipformat" without crashing?

Answer: as per @gnud: Use System.Windows.Clipboard instead of System.Windows.Forms.Clipboard.

gnud

So, this code worked for me to get the contents of the clipboard in the Art::Text clipformat, modify it, and paste it back in with a different text and "field type". The custom field type shows up in the PPTX file after saving.

I have no idea if this is "safe" or compatible with anything at all - you should probably read the documentation of the drawingml format to figure that out.

 var input = System.Windows.Clipboard.GetData("Art::Text ClipFormat") as MemoryStream;

// Take a copy of the data into a writable stream
var strm = new MemoryStream();
input.CopyTo(strm);
strm.Position = 0;

using (var p = new ZipArchive(strm, ZipArchiveMode.Update, leaveOpen: true))
{
    var drawingEntryName = "clipboard/drawings/drawing1.xml";       
    var drawing = p.GetEntry(drawingEntryName);
    XDocument doc;
    
    using (var drawingStream = drawing.Open())
    {
        doc = XDocument.Load(drawingStream);
    }
        
    var NS_DrawingMl = XNamespace.Get(@"http://schemas.openxmlformats.org/drawingml/2006/main");
    var fieldXmlNode = doc.Descendants(NS_DrawingMl + "fld").Single();
            
    fieldXmlNode.Attribute("type").SetValue("mycustomtype2");
    // Replace the ID to avoid two fields with same ID in document. Might cause trouble? I don't know.
    fieldXmlNode.Attribute("id").SetValue(Guid.NewGuid().ToString("B").ToUpper());
    
    var tNode = fieldXmlNode.Descendants(NS_DrawingMl + "t").Single();
    tNode.Value = "21.05.2021"; 

    using (var drawingSaveStream = drawing.Open())
    {
        doc.Save(drawingSaveStream);
    }
}

strm.Position = 0;
var clipboardData = new DataObject("Art::Text ClipFormat", strm);

System.Windows.Clipboard.Clear();
System.Windows.Clipboard.SetDataObject(clipboardData);

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Getting a copied email from the clipboard

From Dev

Prevent line numbers from being copied to clipboard

From Dev

Paste Copied File From Clipboard To File System

From Dev

Prevent Excel from clearing copied data for pasting, after certain operations, without Office clipboard

From Dev

Preserve contents of clipboard when a programs from text from copied exits

From Dev

Copied data to clipboard get lost whenever I close the frame

From Dev

How to prevent Ditto clipboard manager from saving text copied in KeepPassXC?

From Dev

Protecting raw JSON data from being copied

From Dev

Wrong data copied to struct from void pointer

From Dev

Wrong data copied to struct from void pointer

From Dev

Android - Get text from clipboard whenever user copy to clipboard

From Dev

Android how to get string from clipboard onPrimaryClipChanged?

From Dev

C++ Get string from Clipboard on Linux

From Dev

Get text to jtextfield From clipboard Java

From Dev

Android how to get string from clipboard onPrimaryClipChanged?

From Dev

R data.table fread from clipboard

From Dev

pasting data from my clipboard to a different workbook

From Dev

R data.table fread from clipboard

From Dev

Paste Data from clipboard is not working on Iphone

From Dev

how can I paste copied-clipboard text to a file from terminal?

From Dev

how can I paste copied-clipboard text to a file from terminal?

From Dev

Get CustomLayoutPtr from CustomLayoutsPtr in PowerPoint API

From Dev

Get CustomLayoutPtr from CustomLayoutsPtr in PowerPoint API

From Dev

From Excel get the dimensions of a shape in PowerPoint with VBA

From Dev

Copy data from Excel to powerpoint with vba

From Dev

Copy data from Excel to powerpoint with vba

From Dev

How to paste data from Excel into PowerPoint

From Dev

Should I always call ContainsData before I get data from the Clipboard?

From Dev

Prevent CopyQ clipboard manager from keeping data from KeePass

Related Related

  1. 1

    Getting a copied email from the clipboard

  2. 2

    Prevent line numbers from being copied to clipboard

  3. 3

    Paste Copied File From Clipboard To File System

  4. 4

    Prevent Excel from clearing copied data for pasting, after certain operations, without Office clipboard

  5. 5

    Preserve contents of clipboard when a programs from text from copied exits

  6. 6

    Copied data to clipboard get lost whenever I close the frame

  7. 7

    How to prevent Ditto clipboard manager from saving text copied in KeepPassXC?

  8. 8

    Protecting raw JSON data from being copied

  9. 9

    Wrong data copied to struct from void pointer

  10. 10

    Wrong data copied to struct from void pointer

  11. 11

    Android - Get text from clipboard whenever user copy to clipboard

  12. 12

    Android how to get string from clipboard onPrimaryClipChanged?

  13. 13

    C++ Get string from Clipboard on Linux

  14. 14

    Get text to jtextfield From clipboard Java

  15. 15

    Android how to get string from clipboard onPrimaryClipChanged?

  16. 16

    R data.table fread from clipboard

  17. 17

    pasting data from my clipboard to a different workbook

  18. 18

    R data.table fread from clipboard

  19. 19

    Paste Data from clipboard is not working on Iphone

  20. 20

    how can I paste copied-clipboard text to a file from terminal?

  21. 21

    how can I paste copied-clipboard text to a file from terminal?

  22. 22

    Get CustomLayoutPtr from CustomLayoutsPtr in PowerPoint API

  23. 23

    Get CustomLayoutPtr from CustomLayoutsPtr in PowerPoint API

  24. 24

    From Excel get the dimensions of a shape in PowerPoint with VBA

  25. 25

    Copy data from Excel to powerpoint with vba

  26. 26

    Copy data from Excel to powerpoint with vba

  27. 27

    How to paste data from Excel into PowerPoint

  28. 28

    Should I always call ContainsData before I get data from the Clipboard?

  29. 29

    Prevent CopyQ clipboard manager from keeping data from KeePass

HotTag

Archive