Paste from Excel into C# app, retaining full precision

后端 未结 2 1322
夕颜
夕颜 2021-01-12 04:38

I have data in an Excel spreadsheet with values like this:

  • 0.69491375
  • 0.31220394

The cells are formatted as Percentage, and set to disp

2条回答
  •  一个人的身影
    2021-01-12 05:28

    Also not a complete answer either, but some further insights into the problem:

    When you copy a single Excel cell then what will end up in the clipboard is a complete Excel workbook which contains a single spreadsheet which in turn contains a single cell:

    var dataObject = Clipboard.GetDataObject();
    var mstream = (MemoryStream)dataObject.GetData("XML Spreadsheet");
    
    // Note: For some reason we need to ignore the last byte otherwise
    // an exception will occur...
    mstream.SetLength(mstream.Length - 1);
    
    var xml = XElement.Load(mstream);
    

    Now, when you dump the content of the XElement to the console you can see that you indeed get a complete Excel Workbook. Also the "XML Spreadsheet" format contains the internal representation of the numbers stored in the cell. So I guess you could use Linq-To-Xml or similar to fetch the data you need:

    XNamespace ssNs = "urn:schemas-microsoft-com:office:spreadsheet";
    
    var numbers = xml.Descendants(ssNs + "Data").
                  Where(e => (string)e.Attribute(ssNs + "Type") == "Number").
                  Select(e => (double)e);
    

    I've also tried to read the Biff formats using the Excel Data Reader however the resulting DataSets always came out empty...

提交回复
热议问题