我首先sheet上所有有内容的单元格的范围得到,比如:Range range = xlsheet.get_Range("A1","E10")
然后从这个range里要把每个单元格的数据再取出来使用,用了range[1,1].value2为什么不行,运行的时候总是出错,另外试了range.cells[1,1].value 也一样不行

解决方案 »

  1.   

    注意大小写啊
    Value,Value2
      
      

  2.   

    .value2取出来的值是单元格类型,若是字符串类型,要.value2.ToString();
    当然若你的get_Range范围内的单元格没有合并的话,返回的会是一个代表你的单元格对象范围信息的值,类似system[object,object]这种样子。若是一个单元格那肯定是可以的
    Range range= .get_Range("A1","A1"); 
    string str=range.value2.tostring().trim();trim()是去除多余空格,最好加上
      

  3.   

    师范代码
            /// <summary>
            /// 读取一个连续区域的Cell的值(矩形区域,包含一行或一列,或多行,多列),返回一个一维字符串数组。
            /// </summary>
            /// <param name="StartCell">StartCell是要写入区域的左上角单元格</param>
            /// <param name="EndCell">EndCell是要写入区域的右下角单元格</param>
            /// <returns>值的集合</returns>
            public string[] getCellsValue(string StartCell, string EndCell)
            {
                string[] sValue = null;
                //try
                //{
                xlRange = (Excel.Range)xlSheet.get_Range(StartCell, EndCell);
                sValue = new string[xlRange.Count];
                int rowStartIndex = ((Excel.Range)xlSheet.get_Range(StartCell, StartCell)).Row;  //起始行号
                int columnStartIndex = ((Excel.Range)xlSheet.get_Range(StartCell, StartCell)).Column; //起始列号
                int rowNum = xlRange.Rows.Count;     //行数目
                int columnNum = xlRange.Columns.Count;    //列数目
                int index = 0;
                for (int i = rowStartIndex; i < rowStartIndex + rowNum; i++)
                {
                    for (int j = columnStartIndex; j < columnNum + columnStartIndex; j++)
                    {
                        //读到空值null和读到空串""分别处理
                        sValue[index] = ((Excel.Range)xlSheet.Cells[i, j]).Text.ToString();
                        index++;
                    }
                }
                //}
                //catch (Exception e)
                //{
                //    CloseXlApp();
                //    throw new Exception(e.Message);
                //}
                return (sValue);
            }
      

  4.   

    string ss = ((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[1, 1]).Value2.ToString();另外Excel没有[i,j](i=0或者j=0);
      

  5.   


       public static DataSet ReadExcel2003(string excelPath)
            {
                DataSet ds = new DataSet();            //string workName = "";
                Microsoft.Office.Interop.Excel.Application xApp = new Microsoft.Office.Interop.Excel.ApplicationClass();            xApp.Visible = false;
                //得到WorkBook对象, 可以用两种方式之一: 下面的是打开已有的文件
                Microsoft.Office.Interop.Excel.Workbook xBook = xApp.Workbooks._Open(excelPath,
                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,两种方式:            Microsoft.Office.Interop.Excel.Sheets xSheets = xBook.Sheets;
                for (int k = 1; k <= xSheets.Count; k++)
                {
                    Microsoft.Office.Interop.Excel.Worksheet xSheet = (Microsoft.Office.Interop.Excel.Worksheet)xSheets[k];
                    //查找列数
                    int rowCount = 0;
                    for (int i = 1; i < xSheet.Rows.Count; i++)
                    {
                        if (((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[i, 1]).Value2 == null)
                        {
                            rowCount = i;
                            break;
                        }
                    }
                    //查找行数
                    int columnCount = 0;
                    for (int i = 1; i < xSheet.Columns.Count; i++)
                    {
                        if (((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[2, i]).Value2 == null)
                        {
                            columnCount = i;
                            break;
                        }
                    }
                    DataTable dt = new DataTable();
                    for (int i = 1; i < columnCount; i++)
                    {
                        string ss = ((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[1, i]).Value2.ToString();
                        if (ss != "")
                        {
                            dt.Columns.Add(ss);
                        }
                        else
                        {
                            dt.Columns.Add("Column" + i);
                        }
                    }
                    for (int i = 2; i < rowCount; i++)
                    {
                        DataRow dr = dt.NewRow();
                        for (int j = 1; j < columnCount; j++)
                        {
                            dr[j - 1] = ((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[i, j]).Value2 == null ? "" : ((Microsoft.Office.Interop.Excel.Range)xSheet.Cells[i, j]).Value2.ToString();
                        }
                        dt.Rows.Add(dr);
                    }                ds.Tables.Add(dt);
                }
                try
                {
                    xBook.Save();                //Microsoft.Office.Interop.Excel.Worksheet xSheet2=(Microsoft.Office.Interop.Excel.Worksheet)xApp.ActiveSheet;
                    xBook.Close(false, false, Missing.Value);
                    xApp.Quit();
                }
                catch { }
                IntPtr t = new IntPtr(xApp.Hwnd);
                int m = 0;
                GetWindowThreadProcessId(t, out m);
                Process p = Process.GetProcessById(m);
                p.Kill();
                return ds;
            }
    这个可以读取多个excel的工作簿返回dataset
      

  6.   

    上面需要添加引用using System.Runtime.InteropServices;注册一个方法[DllImport("User32.dll", CharSet = CharSet.Auto)]
            public static extern int GetWindowThreadProcessId(IntPtr intptr, out int ID);