【问题标题】:Convert Excel Cell Value From Text To Number Using C#使用 C# 将 Excel 单元格值从文本转换为数字
【发布时间】:2010-09-30 07:22:29
【问题描述】:

我正在使用 Windows 应用程序。在那个应用程序中,我成功地将 DataGrid 导出到 Excel 中......现在的问题是,当我从 Grid 导出到 Excel 工作表时,单元格值在 Excel 工作表的左上角有一些绿色标记......我想那是类型转换问题。我该如何避免这个问题......以及如何将单元格值从文本更改为数字......(即)转换为数字......

谁能告诉我这个问题的解决方法?

我的用于为某些值范围格式化该 Excel 工作表的代码,

wksheet.Range[GetRanges[0].ToString(), GetRanges[GetRanges.Count-2].ToString()].Merge();

wksheet.get_Range(GetRanges[0].ToString(), GetRanges[GetRanges.Count-].ToString()).Interior.Color = Color.FromArgb(192, 0, 0);
                         

【问题讨论】:

    标签: c# excel


    【解决方案1】:

    我目前没有要测试的 Windows 机器,但也许您想尝试更改单元格格式,例如:

    my_range.NumberFormat = "0.0"; // change number of decimal places as needed
    

    这是来自 Microsoft 的完整示例:How to automate Microsoft Excel from Microsoft Visual C#.NET

    【讨论】:

    • 如果它是 int 意味着我应该在你发给我的那个字符串中给出什么
    • 好的,非常感谢......我会检查并告诉你
    【解决方案2】:

    以下例程将从文本文件中的数据(文本和数字)动态填充电子表格。

    踢球者正在使用对象数组来设置值。

    StreamReader STRead;
    String[] STCells;
    object[] cellData;
    int temp;
    Excel.Range tempRange;
    for (int i = 0; i < FileList.Length; i++)
    {
        STRead = FileList[i].OpenText();
        int j = 0;
        while (!STRead.EndOfStream)
        {
            STCells = STRead.ReadLine().Split(',');
            cellData = new object[STCells.Length];
            for (int k = 0; k < STCells.Length; k++)
            {
                if (Int32.TryParse(STCells[k], out temp)) 
                    cellData[k] = temp;
                else
                    cellData[k] = STCells[k];
            }
            tempRange = sheetList[i].get_Range(ReturnCellID(j, 0), 
                                               ReturnCellID(j, STCells.Length - 1));
            j++;
            tempRange.Value2 = cellData;
        }
        STRead.Close();
    }
    

    【讨论】:

      【解决方案3】:

      我在包含常规数字和百分比的 Excel 工作表中遇到了这个问题(这是从 Crystal Report 导出字符串的结果)。

      为了一次改变所有这些,我做了一个类似这样的循环:

      //example range
      Excel.Range rng = mWorkSheet.get_Range("A1", "H25");
      foreach (Excel.Range range in rng)
      {
          if (range.Value != null)
          {
              int number;
              bool isNumber = int.TryParse(range.Value.ToString().Trim(), out number);
              if (isNumber)
              {
                  range.NumberFormat = "#,##0"; 
                  range.Value = number;
              }
              else
              {
                  //the percent values were decimals with commas in the string       
                  string temp = range.Value.ToString();
                  temp = temp.Replace(",", ".");
                  range.Value = temp;
              }
          }
      }
      

      结果是百分比字符串和数字都转换为正确的 Excel 格式。

      【讨论】:

        【解决方案4】:

        当您将值分配给单元格时,请先尝试获取二维数组中的所有值,然后将数组分配给 Range。这样它会非常快,而且我猜单元格中的值将是数字。试试看......希望它应该工作

        【讨论】:

        • 我只将它作为二维数组...我想将一些值范围转换为数字..
        【解决方案5】:

        使用Excel Jet Cell .NET component 可以轻松将单元格值从文本更改为数字。

        Cell["A1"].Style.StringFormat = "##.#"; // or "0.0" same as in MS Excel
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多