使用XMLSpreadsheet从Excel粘贴到剪贴板

我有一个Excel电子表格中的数据,像这样的值:31%和69%

parsing剪贴板后,我得到的值为.31和.69。 我预计会得到31和69或者31%和69%

我有一个C#程序从剪贴板parsing这些数据。

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电子表格”格式,它可以帮助我find正确的date格式[2月14日给我02/01/2014]我正在寻找。

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

正如你应该知道的,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. parsingC#代码中的值,例如将值乘以100(或者在乘以之后将其转换为string,并添加“%”)。

如果您的单元格包含值“61%”,那么实际上,这是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>部分,find这个样式和<NUMBERFORMAT>标签:

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

所以实际上,“0%是将被应用于0.61值的格式。

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