从excel读取复制的十进制值

时间:2012-04-24 19:26:40

标签: c# excel-2007 copy-paste

我从excel表复制值8.03,并使用下面的代码从剪贴板中读取C#中的值。出来的值是8.0299999999999994而不是8.03。当我看下面的xml时,值为8.0299999999999994。 xlsx的zip文件中的sheet1.xml也具有值8.02999999999999994。但是当我将值复制到记事本时,该值将被复制到8.03。如果在记事本中将值复制为8.03,我该怎么办?

DataObject retrievedData =  Clipboard.GetDataObject() as DataObject;
    if (retrievedData.GetDataPresent("XML Spreadsheet"))
    {
        var sourceDataReader = new XmlTextReader(retrievedData.GetData("XML Spreadsheet") as System.IO.Stream);
         var doc = XDocument.Load(reader);
         var excelWorksheeet = doc.Element("Worksheet");
         XNamespace ns = "urn:schemas-microsoft-com:office:spreadsheet";
         XName worksheetName = ns + "Worksheet";
         var worksheetElement = doc.Root.Element(worksheetName);
    }

worksheetElement的值为:

 <Worksheet ss:Name="Sheet1" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns="urn:schemas-microsoft-com:office:spreadsheet">
   <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" ss:DefaultRowHeight="15">
     <Row>
       <Cell>
         <Data ss:Type="Number">8.0299999999999994</Data> 
       </Cell>
      </Row>
    </Table>
  </Worksheet>

1 个答案:

答案 0 :(得分:1)

剪贴板支持多种格式。显然,XML Spreadsheet格式对基础浮点值的舍入与excel不同。如果您想完全像记事本一样获取数据,请尝试获取text表示。

当然,复制为text无法获得XML Spreadsheet为您提供的所有详细信息,但这一切都取决于您对数据的处理方式。

另一种方法是获得两种表示。获取XML Spreadsheet格式以获取详细数据并使用text格式获取显示字符串。