刚才发帖发急了,分数没给对,现增加为120分,另帖在http://community.csdn.net/Expert/topic/5204/5204974.xml?temp=.3398706本人现有代码如下 Excel.Application app = null;
Excel.Workbook book = null;
Excel.Worksheet sheet= null; string FileName="c:\\Book1.xls";
try
{
app = new Excel.Application();
app.DisplayAlerts = false;
app.Visible = false;
app.WindowState = Excel.XlWindowState.xlMinimized; book = app.Workbooks.Open(FileName,0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, 1, 0);
sheet = (Excel.Worksheet)book.Worksheets[1];

int a=sheet.Cells.Rows.Count;
int b=sheet.Cells.Columns.Count; }
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}这是打开C盘根目录下Book1.xls文件
然后给a付值为所打开这个excel文件的总共行
和给b付值为所打开这个excel文件的总共列但最后结果给a付值为65536
b付值为256明显是错误的不知道什么原因,各位有经验的帮忙解答一下,谢谢
另外,我要打开的就是sheet1

解决方案 »

  1.   

    需要遍历获取。
    遍历时判断整个行是否为null即可结束
      

  2.   

    给你个例子你看看
    1,首先添加excel引用,不添加excel引用不行!
    2,代码:// Start a new workbook in Excel.
    objExcel = new Excel.Application();
    objBooks = (Excel.Workbooks)objExcel.Workbooks;
    objBook = (Excel._Workbook)(objBooks.Add(objOpt)); //Add data to cells of the first worksheet in the new workbook.
    objSheets = (Excel.Sheets)objBook.Worksheets;
    //以下得到所有的表名
    string[] strTable = new string[objBook.Worksheets.Count];
    for(int i=0;i<objBook.Worksheets.Count;i++)
    {
    strTable[i] = ((Excel._Worksheet)(objSheets.get_Item(i))).Name;
    }
    //以下对第一张表进行操作
    objSheet = (Excel._Worksheet)(objSheets.get_Item(1));
    objRange = objSheet.get_Range("A1", objOpt);
    objRange.set_Value(objOpt,"Last Name");
    objRange = objSheet.get_Range("B1", objOpt);
    objRange.set_Value(objOpt,"First Name");
    objRange = objSheet.get_Range("A2", objOpt);
    objRange.set_Value(objOpt,"shao");
    objRange = objSheet.get_Range("B2", objOpt);
    objRange.set_Value(objOpt,"zhidong"); // Apply bold to cells A1:B1.
    objRange = objSheet.get_Range("A1", "B1");
    objFont = objRange.Font;
    objFont.Bold=true; // 以下修改第二张表
    objSheet = (Excel._Worksheet)(objSheets.get_Item(2));
    objRange = objSheet.get_Range("A1", objOpt);
    objRange.set_Value(objOpt,"姓名");
    objRange = objSheet.get_Range("B1", objOpt);
    objRange.set_Value(objOpt,"地址");
    objRange = objSheet.get_Range("A2", objOpt);
    objRange.set_Value(objOpt,"校长");
    objRange = objSheet.get_Range("B2", objOpt);
    objRange.set_Value(objOpt,"中国北京海淀");
    //合并单元格
    //假定要合并excel文件中第2行的1~3列,并且显示黑色边框
    Excel.Range rangesummary = objSheet.get_Range(objSheet.Cells[2,1],objSheet.Cells[2,3]);
    rangesummary.Value2 = Type.Missing; //必须的!由于excel本身的设计中考虑了与用户的交互,当此range中有值时,会弹出对话框。所以为了防止这种事情发生,应当清空值
    rangesummary.Merge(Type.Missing);
    rangesummary.Value2 = "小计:";
    rangesummary.Borders.Color = 0;
    rangesummary.Borders.Weight=2; // Save the workbook and quit Excel.
    objBook.SaveAs(strSampleFolder + "Book1.xls", objOpt, objOpt,
    objOpt, objOpt, objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
    objOpt, objOpt, objOpt, objOpt, objOpt);
    objBook.Close(false, objOpt, objOpt);
    objExcel.Quit();
    //以下释放excel进程
    System.Runtime.InteropServices.Marshal.ReleaseComObject(objBook); 
    System.Runtime.InteropServices.Marshal.ReleaseComObject(objBooks); 
    System.Runtime.InteropServices.Marshal.ReleaseComObject(objSheets); 
    System.Runtime.InteropServices.Marshal.ReleaseComObject(objSheet); 
    System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcel); 
    System.Runtime.InteropServices.Marshal.ReleaseComObject(objRange); 
    objBook = null;
    objBooks = null;
    objSheets=null; 
    objSheet=null; 
    objExcel=null; 
    objRange=null;  //把操作Excel文件用到的对象实例全部释放。 
     //然后资源回收! 
                GC.Collect();
      

  3.   

    你这样肯定不行,只会获得excel所有行和列,而不是用过的行和列
    try
    object u_range = ActiveSheet.UsedRange;
      

  4.   

    继续求解 Excel.Application app = null;
    Excel.Workbook book = null;
    Excel.Worksheet sheet= null; string FileName="c:\\Book1.xls";
    try
    {
    app = new Excel.Application();
    app.DisplayAlerts = false;
    app.Visible = false;
    app.WindowState = Excel.XlWindowState.xlMinimized; book = app.Workbooks.Open(FileName,0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, 1, 0);
    sheet = (Excel.Worksheet)book.Worksheets[1];

    int a=sheet.Cells.Rows.Count;
    int b=sheet.Cells.Columns.Count; for (int i=0;i<a;i++)
    {
    for (int j=0;j<b;i++)
    {
    MessageBox.Show(Sheet.UsedRange.Cells(i,j));
    }
    } }
    catch(Exception ex)
    {
    Console.WriteLine(ex.ToString());
    }
    我获得单元格内容写为Sheet.UsedRange.Cells(i,j),但报错误“Excel.Range.Cells”表示“属性”,此处应为“方法”啥意思?
      

  5.   

    用Sheet.UsedRange.Cells[i,j]也报错参数“1” : 无法从“object”转换为“string”
      

  6.   

    int a=sheet.Rows.Count;
    int b=sheet.Columns.Count;
      

  7.   

    写成这样
    MessageBox.Show(pbSheet.UsedRange.Cells[i,j].ToString());程序可以运行,但抛出catch{"HRESULT 中的异常:0x800A03EC。" }
      

  8.   

    int a=sheet.Rows.Count;
    int b=sheet.Columns.Count;是获得excel的行和列不是我当前打开的EXCEL的行和列
      

  9.   

    MessageBox.Show(pbSheet.UsedRange.Cells[i,j].value2
      

  10.   

    好像是:
    sheet.UsedRange.Rows.Count;
    sheet.UsedRange.Columns.Count;
      

  11.   

    pbSheet.UsedRange.Cells[i,j]没有value2这个属性谢谢,各位,我现在的问题已经不是获得当前打开的SHEET行跟列的问题了是这个问题
    MessageBox.Show(pbSheet.UsedRange.Cells[i,j].ToString());程序可以运行,但抛出catch{"HRESULT 中的异常:0x800A03EC。" }Cells[i,j]后只有4个属性 Equals
    GetHashCode
    GetType
    ToString
      

  12.   

    Range _rang = (Range)Cells[i,j];
    _rang.value2;
      

  13.   

    整了,可还是报错误啊Excel.Range _rang = (Excel.Range)Cells[i,j];MessageBox.Show (_rang.Value2);这么整没错吧错误提示名称“Cells”在类或命名空间中不存在
      

  14.   

    问题解决了吗?我也遇到类似的问题了。一直没解决呢
    Range range1 =xlWorksheet.get_Range("u2", "u2"); s1=range1.Value2.ToString();
    这样倒是能提出值来,但要遍历所有的内容就不知道咋用了。用
    while((Range)xlWorksheet.Cells[12,CntCell]!= null)
    {
    string a="";
    CntCell = CntCell + 1;
    range3=(Range)xlWorksheet.Cells[12,CntCell];
    a=range3.Value2.ToString();
    }
    时就不行了,当没有内容时就会报错说a的类型与对象类型的不能转化。range3.value2类型是:System__ComObject
      
      

  15.   

    想找本相关的资料,c#访问office的比较全一点的资料知道哪有吗?
      

  16.   

    book = app.Workbooks.Open(FileName,0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, 1, 0);
    执行这句后,Excel文件会被打开。有没有只打开文件,而不显示出来,读取完数据后,再关闭文件?
      

  17.   

    或者是连接到Excel文件(不是像连接数据库那样),读取数据。只要不打开显示Excel文件即可啊。
      

  18.   

    xlWorkbook=xlApp.Workbooks.Open(name,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing,oMissing);
      

  19.   

    楼上的,oMissing是什么意思?我看不明白啊
      

  20.   

    先将sheet转成Table
    从table转获取即可
      

  21.   

    app.Visible = false;
    楼主将App隐藏了,但是在最后应该将APP关闭,否则在内存里不断地增加Excel进程。
    请教一下该怎么将进程关闭呢?