从 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>
剪贴板支持多种格式。显然,XML Spreadsheet
格式对基础浮点值的舍入与 excel 不同。如果要完全按照记事本的方式获取数据,请尝试改为获取text
表示形式。
当然,按text
复制不会获得XML Spreadsheet
为您提供的所有详细信息,但这完全取决于您要对数据执行的操作。
另一种方法是获取这两种表示形式。获取XML Spreadsheet
格式以获取详细数据,并使用text
格式获取显示字符串。