Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XMLSpreadsheet从Excel粘贴到剪贴板_C#_Excel_Clipboard - Fatal编程技术网

C# 使用XMLSpreadsheet从Excel粘贴到剪贴板

C# 使用XMLSpreadsheet从Excel粘贴到剪贴板,c#,excel,clipboard,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); Memo

我在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年1月2日]


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

您应该知道,Excel将百分比数据存储为1的一部分,因此当您在Excel单元格中看到“50%”时,xls文件中实际存储了“0.50”。我可以想出3种选择:

  • 如果您使用的是DevXPress Gridview(如我所见,您可以这样做),则可以使用以下代码将数据显示为百分比,而不是1的份额:

    //myPercentColumn - a column in which you want to put your percentile data...
    myPercentColumn.DisplayFormat.FormatType = FormatType.Numeric;
    myPercentColumn.DisplayFormat.FormatString = "p0";
    
  • 将Excel的单元格格式更改为“文本”-最糟糕的选项,因为您将无法在Excel公式中使用该单元格值

  • 解析C代码中的值,比如将值乘以100(或者在相乘后将其转换为字符串,并添加“%”)


  • 您应该知道,Excel将百分比数据存储为1的一部分,因此当您在Excel单元格中看到“50%”时,xls文件中实际存储了“0.50”。我可以想出3种选择:

  • 如果您使用的是DevXPress Gridview(如我所见,您可以这样做),则可以使用以下代码将数据显示为百分比,而不是1的份额:

    //myPercentColumn - a column in which you want to put your percentile data...
    myPercentColumn.DisplayFormat.FormatType = FormatType.Numeric;
    myPercentColumn.DisplayFormat.FormatString = "p0";
    
  • 将Excel的单元格格式更改为“文本”-最糟糕的选项,因为您将无法在Excel公式中使用该单元格值

  • 解析C代码中的值,比如将值乘以100(或者在相乘后将其转换为字符串,并添加“%”)


  • 如果单元格包含值“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>
    
    然后向上查看该部分,您会发现此样式和标记:

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


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

    如果有一个单元格包含值“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>
    
    然后向上查看该部分,您会发现此样式和标记:

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


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

    我的问题不是如何在GridView中显示“%”,因此您的选项1和3不是我想要的。我希望从excel接收50%或50%的数据,而不是0.5,同时仍然使用“XML电子表格”数据格式。我正在查找返回的XML,我看到设置了样式ID,但不知道如何访问它。我的问题不是如何在GridView中显示“%”,因此您的选项1和3不是我要查找的。我希望从excel接收50%或50%的数据,而不是0.5,同时仍然使用“XML电子表格”数据格式。我正在查找返回的XML,我看到设置了样式ID,但不知道如何访问它。