none
.net 4.0如何得到EXCEL单元格中的文本?[ RRS feed

  • 问题

  • range = worksheet.Cells[r + 2, i + 1] as Microsoft.Office.Interop.Excel.Range;
    //下面这句编译不能通过. 
    string text = range.Value;
    2010年8月25日 8:16

答案

  • 你好!

    我本地测试是可以的,你对比一下吧。

    private static object missing = Type.Missing;
    static void Main(string[] args)
    {
    
     Excel.Application application = new Excel.Application();
    
     Excel.Workbook workBook = (Excel.Workbook)(application.Workbooks.Open(@"D:\book1.xls", missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing));
     Excel.Worksheet sheet = (Excel.Worksheet)application.ActiveWorkbook.Sheets[1];
     //Excel.Range r = sheet.get_Range("A1", "A1");
     Excel.Range r = (Excel.Range)sheet.Cells[1, 1];
     
     string s1 = r.Text.ToString(); 
     string s2 = r.Value2.ToString();
    
     Console.ReadKey();
    }
    

     


    知识改变命运,奋斗成就人生!
    2010年8月25日 13:58
    版主

全部回复

  • string text = range.Text.ToString();

    string text = range.Value2.ToString();


    知识改变命运,奋斗成就人生!
    2010年8月25日 12:41
    版主
  • 楼上您好,编译是通过了,但是取不到值啊。

     Microsoft.Office.Interop.Excel.Worksheet worksheet = workbook.Worksheets[2] as Microsoft.Office.Interop.Excel.Worksheet;


                Microsoft.Office.Interop.Excel.Range range = null;
                for (int r = 1; r < 10; r++)
                {
                    for (int i = 1; i < 10; i++)
                    {
                        range = worksheet.Cells[r + 2, i + 1] as Microsoft.Office.Interop.Excel.Range;
                        if (range.Value2 == null)
                        {
                            continue;
                        }
                        string text = range.Value2.ToString();
                        //dynamic text = range.Value2;
                        //string aa = text as string;
                        //if (text == null)
                        //{
                        //    continue;
                        //}
                        //MessageBox.Show(aa);
                        //if (text.Substring(0, 1) == "#")
                        //{
                        //    range.Value2 = "this is new";
                        //}
                        Console.WriteLine(text);
                    }

     

    2010年8月25日 13:39
  • 你好!

    如果 range 只包含一个单元格上面的方式是可以的。

    如果 range 包含多个单元格,你就需要遍历 range.Value2 了,它是一个二维数组。


    知识改变命运,奋斗成就人生!
    2010年8月25日 13:48
    版主
  • 您好,的确是只有一个单元格,但是还是取不到值。

    2010年8月25日 13:50
  • 你好!

    我本地测试是可以的,你对比一下吧。

    private static object missing = Type.Missing;
    static void Main(string[] args)
    {
    
     Excel.Application application = new Excel.Application();
    
     Excel.Workbook workBook = (Excel.Workbook)(application.Workbooks.Open(@"D:\book1.xls", missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing));
     Excel.Worksheet sheet = (Excel.Worksheet)application.ActiveWorkbook.Sheets[1];
     //Excel.Range r = sheet.get_Range("A1", "A1");
     Excel.Range r = (Excel.Range)sheet.Cells[1, 1];
     
     string s1 = r.Text.ToString(); 
     string s2 = r.Value2.ToString();
    
     Console.ReadKey();
    }
    

     


    知识改变命运,奋斗成就人生!
    2010年8月25日 13:58
    版主
  • 您好。取到值了。谢谢。
    2010年8月25日 14:26