将十进制值从Excel复制到C#会导致仅复制显示的值

时间:2017-02-27 09:21:19

标签: c# wpf excel

我正在尝试将excel电子表格中的一些值复制到C#WPF应用中。我注意到当我在Excel中选择单元格并将它们复制到剪贴板中然后将其粘贴到WPF应用程序时,我得到的显示值不是实际值,即考虑值为2.232323的单元格。如果在“格式化单元格”窗口中的Excel中,我只设置了一个小数位,那么excel将显示2.2。如果现在我将它复制到WPF然后我得到2.2而不是2.232323。我注意到Notepad做了同样的事情。有没有办法获得真正的价值?我用来复制单元格的代码:

DataObject o = (DataObject)Clipboard.GetDataObject();
string[] pastedRows = Regex.Split(o.GetData(DataFormats.Text).ToString().TrimEnd(Environment.NewLine.ToCharArray()), Environment.NewLine);

1 个答案:

答案 0 :(得分:1)

试试这个:

IDataObject dataObject = Clipboard.GetDataObject();
System.IO.MemoryStream stream = dataObject.GetData("XML Spreadsheet") as System.IO.MemoryStream;
if(stream != null)
{
    stream.SetLength(stream.Length - 1);
    XElement xml = XElement.Load(stream);
    XNamespace ns = "urn:schemas-microsoft-com:office:spreadsheet";

    double actualValue;
    var data = xml.Descendants(ns + "Data").Where(x => (string)x.Attribute(ns + "Type") == "Number");
    if(data != null && data.Any())
    {
        actualValue = (double)data.First();
        MessageBox.Show(actualValue.ToString());
    }

    stream.Dispose();
}