none
关于c#提取excel表格数据时遇到数据类型无法转换的问题! RRS feed

  • 问题

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Reflection; // 引用这个才能使用Missing字段
    using System.Text;

    namespace LinePoint
    {

        class Class1
        {
            [STAThread]
            static void Main(string[] args)
            {
                //创建Application对象
                Excel.Application xApp = new Excel.ApplicationClass();

                xApp.Visible = true;
                //得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件
                Excel.Workbook xBook = xApp.Workbooks.Open(@"C:\Documents and Settings\TAK06\My Documents\Visual Studio 2008\G4C-01(sample).xls",
                Missing.Value, Missing.Value, Missing.Value, Missing.Value
                , Missing.Value, Missing.Value, Missing.Value, Missing.Value
                , Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                //xBook=xApp.Workbooks.Add(Missing.Value);//新建文件的代码
                //指定要操作的Sheet,两种方式:

                Excel.Worksheet xSheet = (Excel.Worksheet)xBook.Sheets[1];
                //Excel.Worksheet xSheet=(Excel.Worksheet)xApp.ActiveSheet;

                //读取数据,通过Range对象

                Console.WriteLine("how many of beams");

                int geshu= (int)Convert.ToDouble(Console.ReadLine());
                int a;
                for (a = 1; a < geshu; a++)

                {
                    Excel.Range step1 = xSheet.get_Range("A" + a, Missing.Value);
                    string A = (string)step1.Value2;
                    Console.WriteLine("{0}", A);
                }

                for (a = 1; a < geshu; a++)
                {
                    Excel.Range step2 = xSheet.get_Range("B" + a, Missing.Value);
                    Double B = (Double)step2.Value2; //问题:这里无法转换为我要得Double数据类型,我这个数据是用来计算用的,需要4位小数。
                    Console.WriteLine("{0}", B);
                }

                for (a = 1; a < geshu; a++)
                {
                    Excel.Range step3 = xSheet.get_Range("C" + a, Missing.Value);
                    Double C = (Double)step3.Value2; //问题:这里无法转换为我要得Double数据类型,我这个数据是用来计算用的,需要4位小数。
                    Console.WriteLine("{0}", C);
                }
            }
        }
    }

    以上是我的获取数据的代码,我是个初学者。还有我是用循环形试获取的数据,我希望可以自动装载我的运算代码里面比如三维坐标(x,y,z),然后自动可以生成我循环获取的数据(x1,y1,z1)(x2,y2,z2)........(xn,yn,zn),请问是不是可以实现?
    希望各位高手指教。

    2010年2月19日 0:49

答案

  • 你好!
        这样试试,double应该是小写的:
         double B = (double)step2.Value2;
        另外,检查一下你的step2.Value2是什么类型的数据,是否可以转换为double
    周雪峰
    2010年2月19日 1:16
    版主
  • 你好!

    我按照你的方式,将单元格改为文本和数值只要单元格中填写了数字都能正确的获取到 4 位小数。如果没有填任何值返回的是 null 你需要在你的循环中判断一下为 null 与不是数字格式的情况。

    知识改变命运,奋斗成就人生!
    2010年2月20日 2:23
    版主

全部回复

  • 你好!
        这样试试,double应该是小写的:
         double B = (double)step2.Value2;
        另外,检查一下你的step2.Value2是什么类型的数据,是否可以转换为double
    周雪峰
    2010年2月19日 1:16
    版主
  • 你好!
        这样试试,double应该是小写的:
         double B = (double)step2.Value2;
        另外,检查一下你的step2.Value2是什么类型的数据,是否可以转换为double
    周雪峰
    你好,半年前我想学的时候也是你给我建议学习的书,谢谢。我马上修改一下试验。另外我的关于数据装载的问题可以实现么?
    2010年2月19日 1:20
  • 图层 起点 X 起点 Y 起点 Z 端点 X 端点 Y 端点 Z
    寸法 51522.15 26541.37 2500 45117.79 35078.38 0
    寸法 60340.57 36937.94 0 68121.09 24132.31 0
    寸法 0.000000 21647.35 0 51522.15 26541.37 2500
    寸法 45117.79 35078.38 0 60340.57 36937.94 0
    寸法 2.000000 35078.39 0
    寸法 3.000000 35078.4 0
    寸法 4.000000 35078.41 0
    寸法 5.000000 35078.420000 0
    寸法 6.000000 35078.430000 0      

    我的excel的数据是这样的,excel得格式都是数值类型。
    刚刚换了int格式也不行,但是如果应该string是可以的,但是遇到0得时候就会失败。
    2010年2月19日 1:37
  • 你好!
         不用客气啊!对于0,你可以判断一下,然后做一些处理!
    周雪峰
    2010年2月19日 2:32
    版主
  • 你好!
         不用客气啊!对于0,你可以判断一下,然后做一些处理!
    周雪峰

    好的,关于我的第二个问题可以实现么,我没有这方面的经验。
    如果有的话请赐教,万分感谢。
    2010年2月19日 2:35
  • 你好!
       坐标可以使用三维数组来处理!
    周雪峰
    2010年2月19日 4:04
    版主
  • 我是菜鸟,前来学习。

    2010年2月19日 4:45
  • 你好!
         不用客气啊!对于0,你可以判断一下,然后做一些处理!
    周雪峰

    周先生,实在不好意思。我按照自己的设想测试了下,我无法对0进行处理。
    希望您给给我一个解决方案,万分感谢。
    2010年2月19日 5:03
  • 你好!

    我按照你的方式,将单元格改为文本和数值只要单元格中填写了数字都能正确的获取到 4 位小数。如果没有填任何值返回的是 null 你需要在你的循环中判断一下为 null 与不是数字格式的情况。

    知识改变命运,奋斗成就人生!
    2010年2月20日 2:23
    版主
  • 你好!

    我按照你的方式,将单元格改为文本和数值只要单元格中填写了数字都能正确的获取到 4 位小数。如果没有填任何值返回的是 null 你需要在你的循环中判断一下为 null 与不是数字格式的情况。

    知识改变命运,奋斗成就人生!

    您好,谢谢您的帮助,按照您的提示我修改了EXCEL文档,目前我的问题已经解决了。
    我会尝试你说的NULL得判断,如果失败了,我会再来提问的,谢谢你的帮助。
    2010年2月21日 4:27