1

我在 Excel 电子表格中有数据,其值如下:31% 和 69%

解析剪贴板后,我得到的值为 0.31 和 0.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 总是给我 0.31 和 0.69 的值,而我期望值 31 和 69 或 31% 和 69%。我想使用“XML 电子表格”格式,因为它可以帮助我找到我正在寻找的正确日期格式 [Feb-14 给我 02/01/2014]。

请建议我如何使用“XML 电子表格”数据格式解决此问题。

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. 解析 C# 代码中的值,例如将值乘以 100(或在相乘后将其转换为字符串,并添加“%”)。

于 2012-08-31T02:59:42.400 回答
0

如果您有一个包含值“61%”的单元格,那么实际上,这是VALUE 0.61,但格式化为 percent

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 的格式。

提取格式有点复杂,但实际上所有信息都在 XML 文本中。

于 2015-02-17T09:04:41.603 回答