【问题标题】:Paste from Excel to clipboard using XMLSpreadsheet使用 XMLSpreadsheet 从 Excel 粘贴到剪贴板
【发布时间】:2015-02-17 17:04:41
【问题描述】:

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

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

【问题讨论】:

    标签: c# excel clipboard


    【解决方案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(或乘以后转换为字符串,并添加“%”)。

    【讨论】:

    • 我的问题不是如何在 GridView 中显示“%”,所以您的选项 1 和 3 不是我想要的。我想从 excel 接收数据为 50 或 50% 而不是 0.5,同时仍使用“XML 电子表格”数据格式。我正在查看返回的 XML,我看到样式 ID 已设置但不知道如何访问它。
    【解决方案2】:

    如果您有一个包含值“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>
    

    不幸的是,您需要付出一些努力才能正确提取这些值。 在 标签中,请注意这个属性:

    ss:StyleID="s69"
    

    然后查看 部分,您会在其中找到该样式和 标签:

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

    所以实际上,“0% 是将应用于 VALUE 0.61 的 FORMAT。

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

    【讨论】:

      猜你喜欢
      • 2015-07-29
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-30
      相关资源
      最近更新 更多