1

Excel スプレッドシートに次のような値のデータがあります: 31% と 69%

クリップボードを解析した後、.31 および .69 として値を取得します。31 と 69、または 31% と 69% を期待しています。

このデータをクリップボードから解析する C# プログラムがあります。

const string ClipboardFormat = "XML Spreadsheet";
if (Clipboard.ContainsData(ClipboardFormat))

{

  object clipData = Clipboard.GetData(ClipboardFormat);
  MemoryStream ms = clipData as MemoryStream;
  XmlDocument xml = new XmlDocument();
  xml.Load(ms);

  XmlNodeList table = xml.GetElementsByTagName("Table");

  foreach (XmlNode row in table[0].ChildNodes)
  {
    foreach (XmlNode cell in row.ChildNodes)
    {

    GridView.SetRowCellValue(iRowIndex, GridView.Columns[iColIndex], cell.InnerText);
    iColIndex++;
    }
  iRowIndex++;
  }

cell.InnerText は、値が 31 と 69 または 31% と 69% であると予想しているため、常に .31 と .69 の値を返します。「XML スプレッドシート」形式を使用したいのは、探している正しい日付形式 [2 月 14 日から 2014 年 2 月 1 日を取得] を取得するのに役立つからです。

「XML スプレッドシート」DataFormat を使用してこれを解決する方法を教えてください。

4

2 に答える 2

1

ご存じのとおり、Excel ではパーセント データは 1 の一部として保存されるため、Excel セルに「50%」と表示されている場合、実際には xls ファイルには「0.50」が保存されています。私は3つのオプションを考えることができます:

  1. DevExpress Gridview を使用している場合 (ご覧のとおり - ご覧のとおり)、次のコードを使用して、データを 1 のシェアではなくパーセントで表示できます。

    //myPercentColumn - a column in which you want to put your percentile data...
    myPercentColumn.DisplayFormat.FormatType = FormatType.Numeric;
    myPercentColumn.DisplayFormat.FormatString = "p0";
    
  2. Excel のセル形式を「テキスト」に変更します。Excel の数式でそのセルの値を使用できないため、最悪のオプションです。

  3. 値を 100 で乗算する (または、乗算後に文字列に変換し、"%" を追加する) ように、C# コードで値を解析します。

于 2012-08-31T02:59:42.400 に答える
0

値「61%」を含むセルがある場合、実際にはこれはVALUE 0.61ですが、パーセントとしてフォーマットされています。

Excel はこれを次のようにクリップボードにコピーします。

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#000000"/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
  <Style ss:ID="s69">
   <NumberFormat ss:Format="0%"/>
  </Style>
 </Styles>
 <Worksheet ss:Name="Tabelle1">
  <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1"
   ss:DefaultColumnWidth="60" ss:DefaultRowHeight="14.5">
   <Row>
    <Cell ss:StyleID="s69"><Data ss:Type="Number">0.61</Data></Cell>
   </Row>
  </Table>
 </Worksheet>
</Workbook>

残念ながら、値を適切に抽出するには、ある程度の努力が必要です。<CELL> タグでは、次の属性に注意してください。

ss:StyleID="s69"

<Styles> セクションを調べると、このスタイルと <NUMBERFORMAT> タグが見つかります。

<NumberFormat ss:Format="0%"/>

実際、「0% は、VALUE 0.61 に適用される FORMAT です。

フォーマットを抽出するのは少し複雑ですが、実際には、すべての情報は XML テキストにあります。

于 2015-02-17T09:04:41.603 に答える