2012-08-30 198 views
1

我有数据的Excel电子表格,像这样的值:31%和69%粘贴到剪贴板使用XMLSpreadsheet

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

请建议我如何使用“XML Spreadsheet”DataFormat解决此问题。

回答

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公式中使用该单元格值。在您的C#代码中解析值,例如将值乘以100(或者在乘以之后将其转换为字符串,然后添加“%”)。

+0

我的问题不是如何在GridView中显示“%”,所以你的选项1和3不是我正在寻找的。我想从Excel中接收数据为50或50%,而不是0.5,同时仍然使用“XML Spreadsheet”数据格式。我正在查看返回的XML,并且我看到Style ID已设置,但不知道如何访问它。 – Raj

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" 

然后查找到<样式>部分,有你觉得这风格和< NUMBERFORMAT>标签:

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

所以实际上,“0%是应用于VALUE 0.61的格式。”

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