0

私は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);
    }

ワークシート要素の値は次のとおりです。

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

1 に答える 1

1

クリップボードはいくつかの形式をサポートしています。明らかに、このXML Spreadsheet形式は、Excelとは異なる浮動小数点値の丸めを行います。メモ帳とまったく同じようにデータを取得する場合は、text代わりに表現を取得してみてください。

もちろん、astextをコピーしても、提供されるすべての詳細情報がXML Spreadsheet得られるわけではありませんが、データをどのように処理するかによって異なります。

別の方法は、両方の表現を取得することです。XML Spreadsheetフォーマットを取得して詳細データを取得し、フォーマットを使用してtext表示文字列を取得します。

于 2012-04-24T19:34:11.583 に答える