从 excel 读取复制的十进制值

本文关键字:十进制 复制 excel 读取 | 更新日期: 2023-09-27 18:32:19

我正在从 excel 工作表中复制一个值 8.03,并使用下面的代码从剪贴板中读取 C# 中的该值。出来的值是 8.0299999999999994 而不是 8.03。当我查看下面的 xml 时,值为 8.0299999999999994。xlsx 的 zip 文件中的 sheet1.xml 的值也为 8.0299999999999994。但是当我将值复制到记事本时,该值在 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);
    }

工作表元素具有以下值:

 <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>

从 excel 读取复制的十进制值

剪贴板支持多种格式。显然,XML Spreadsheet格式对基础浮点值的舍入与 excel 不同。如果要完全按照记事本的方式获取数据,请尝试改为获取text表示形式。

当然,按text复制不会获得XML Spreadsheet为您提供的所有详细信息,但这完全取决于您要对数据执行的操作。

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