使用XML电子表格从Excel粘贴到剪贴板

时间:2012-08-30 20:56:31

标签: c# excel clipboard

我在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日给我02/01/2014]我正在寻找。

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

2 个答案:

答案 0 :(得分: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(或在乘以后将其转换为字符串,并添加“%”)。

答案 1 :(得分: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>

不幸的是,您需要做一些努力才能正确提取值。 在&lt; CELL&gt;中标签,请注意此属性:

ss:StyleID="s69"

然后查看&lt;样式&gt;部分,你找到这种风格和&lt; NUMBERFORMAT&gt;标记:

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

事实上,&#34; 0%是格式,将应用于VALUE 0.61。

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