见过的代码都是这种方法,把EXCEL文档当成数据库,SHEET当成表格,然后取数.
这种方法麻烦,不算.
strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\contacts.xls;Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [EXCEL中的表名$]", strConn);
DataSet myDataSet = new DataSet();
myCommand.Fill(myDataSet);-------------
因我要取数的EXCE文档,数据排放是不规则的.比如:我只要取A5那1个单元格的值.请问怎么做?

解决方案 »

  1.   

    注:本人.NET水平烂,麻烦贴下完整代码.
      

  2.   

    参考:
    http://dotnet.aspx.cc/ShowDetail.aspx?id=4EB79F05-B9A4-4E8A-836F-864393F40405
      

  3.   

    参考:http://dev.csdn.net/develop/article/37/37273.shtm
    http://dev.csdn.net/develop/article/35/35063.shtm
    http://dev.csdn.net/develop/article/34/34509.shtm
    http://dev.csdn.net/develop/article/18/18344.shtm
      

  4.   

    既然你都将EXCEL作为了一个数据集了!!!
    那么你可以通过操作这个数据集或是将这个DATASET绑定到一个DATAGRID上,在通过操作这个DATAGRID来完成啊!
      

  5.   

    http://expert.csdn.net/Expert/TopicView1.asp?id=2928057www.foxhis.com/powermjtest/
    原文代码:
    private void Button1_Click(object sender, System.EventArgs e)
    {
      //写入Excel的方法:
      //定义需要参数。
      string SourceFile="Data.XLS";                                //源文件名称。
      string TemplatePath=Server.MapPath("ExcelTemplate");    //存放源文件的文件夹路径。
      string DownloadPath=Server.MapPath("ExcelDownload");    //副本的文件夹路径。
      //副本的文件名。
      string TempFileName = DateTime.Now.ToString("yyyyMMdd") + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + ".XLS";  
      object missing = System.Reflection.Missing.Value;
      Excel.Application myExcel=new Excel.Application();
      //打开新文件
      myExcel.Application.Workbooks.Open(TemplatePath+"\\"+SourceFile,missing,missing,missing,missing,
    missing,missing,missing,missing,missing,missing, missing,missing); 
      Excel.Workbook myBook=myExcel.Workbooks[1];
      Excel.Worksheet curSheet = (Excel.Worksheet)myBook.Sheets[2];

      string DownloadFilePath=DownloadPath+"\\"+TempFileName;

      int i=0;
      while (i<=10)
      {
        myExcel.Cells[4+i,2]=i.ToString();
        myExcel.Cells[4+i,3]=i.ToString();
        myExcel.Cells[4+i,4]=i.ToString();
        myExcel.Cells[4+i,5]=i.ToString();
        myExcel.Cells[4+i,6]=i.ToString();
        i++;
      }   

      myBook.Saved=true;
      //myBook.SaveAs(DownloadFilePath,missing,"","",false,false,Excel.XlSaveAsAccessMode.xlNoChange,1,false,missing,missing);

      myBook.PrintPreview(0);
      //myBook.PrintOut(missing,missing,missing,missing,missing,missing,missing,missing);
      myBook.Close(false, null,null);
      myExcel.Quit();
      System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook);
      System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel);
      myBook = null;
      myExcel = null;
      GC.Collect();
      //Response.Redirect("ExcelDownload//"+TempFileName); //下载文件
    }
      

  6.   

    还可以通过这种方法 
    strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\contacts.xls;Extended Properties=Excel 8.0;";
    OleDbConnection conn = new OleDbConnection(strConn);
    OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [EXCEL中的表名$]", strConn);
    DataSet myDataSet = new DataSet();
    myCommand.Fill(myDataSet);将这个DATASET绑定到一个DATAGRID上,在通过操作这个DATAGRID来完成啊!
      

  7.   

    C#中的受管代码和非受管代码   在.NET公用语言框架内运行的程序为受管代码。受管代码在程序中所有类型都受到严格检查,没有指针,对内存的管理完全由运行系统控制。受控状态下,编写程序更为容易,且更少出错,我们可以花更多的时间在解决实际问题上而不是在计算机语言问题上。相对而言,那些在.NET框架外运行的程序为非受管代码。比如:COM组件、ActiveX组件、Win32 API函数、指针运算等。C#编程中在某些特定情况下,需要运用非受管代码,例如,要利用一个成熟的COM组件,或者调用一个API函数,或者用指针去编写实时/高效程序等。  Visual C#中调用Excel的COM组件  一个.NET组件事实上是一个.NET下的DLL,它包含的不仅是运行程序本身,更重要的是包含这个DLL的描述信息(Meta Data,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。这些COM组件都是非受管代码,要在Visual C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。所以在用Visual C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。  1、将Excel的COM组件转换为.NET组件  在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到"Microsoft Excel 9.0 Object Library"(Office 2000),然后将其加入到项目的References中即可。Visual C#.NET会自动产生相应的.NET组件文件,以后即可正常使用。  这个转换形成.NET组件不能单独使用,它不过是以前的COM组件的一个外层包装,在.NET中可以通过这个外层包装去发现原来的COM组件并调用其相应的界面函数。所以它必须与原来的COM组件一起起作用。  2、Visual C#打开Excel表格  事实上,在C#中使用一个经转换的COM组件和使用任何一个其它.NET组件完全一样。可以用new关键字创建一个经转换的COM组件,然后再像使用任何一个其它C#对象一样使用这个组件对象。  在转换后的.NET组件中定义了一个命名空间Excel,在此命名空间中封装了一个类Application,这个类和启动Excel表格有非常重要的关系,在Visual C#中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:Excel.Application excel = new Excel.Application ();//引用Excel对象
    excel.Application.Workbooks.Add ( true );//引用Excel工作簿
    excel.Visible = true ;//使Excel可视   但此时的Excel表格是一个空的表格,没有任何内容,下面就来介绍如何往Excel表格中输入数据。  3、往Excel表格中输入数据  在命名空间"Excel"中,还定义了一个类"Cell",这个类所代表的就是Excel表格中的一个单元格。通过给"Cell"赋值,从而实现往Excel表格中输入相应的数据,下列代码功能是打开Excel表格,并且往表格输入一些数据。Excel.Application excel = new Excel.Application () ;
    excel.Application.Workbooks.Add ( true ) ;
    excel.Cells[ 1 , 1 ] = "First Row First Column" ;
    excel.Cells[ 1 , 2 ] = "First Row Second Column" ;
    excel.Cells[ 2 , 1 ] = "Second Row First Column" ;
    excel.Cells[ 2 , 2 ] = "Second Row Second Column" ;
    excel.Visible = true ;  4、实例  下面实例在C#中连接Oracle数据库(Name),从表(TableName)中读取数据,并写入Excel。string cnString="Provider=msdaora.1;Data source=Name; ";
    cnString=cnString+"user id=UserName;password=Password";
    try
    {
     OleDbConnection cn=new OleDbConnection (cnString);
     cn.Open ();
     try
     {
      string s="select * from Name.TableName";
      OleDbCommand cmd=new OleDbCommand (s,cn);
      OleDbDataReader dr=cmd.ExecuteReader ();
      Excel.Application xlApp = new Excel.Application();
      if(xlApp==null){MessageBox.Show ("Can't open Excel!");return;}
      xlApp.Application .Workbooks .Add (true);
      int row=2,fieldcount;
      fieldcount=dr.FieldCount ;
      for(int col=0;col<fieldcount;col++) xlApp.Cells [1,col+1]=dr.GetName(col);
      while (dr.Read ())
      {
       for(int col=0;col<fieldcount;col++) 
        xlApp.Cells [row,col+1]=dr.GetValue(col).ToString();
        row++;
      }
      xlApp.Visible =true;
      xlApp=null;
     }
     catch(Exception ex ){MessageBox.Show (ex.Message );}
     finally {cn.Close();}
    }
    catch(Exception ex){MessageBox.Show (ex.Message );}
    }
    }   5、安装一个使用COM组件的.NET程序  如果要将这样的程序安装运行在另一台机器上,那么除了安装运行程序外,还做三件事。  首先,是安装.NET运行系统。因为任何一个.NET程序都不能离开.NET运行系统去独立运行。  其次,所调用的COM组件必须要安装在目标机器上。本例中大多数目标机器上都装有Microsoft Office的Excel,一般不会有这个问题。但如果是另一个用户自定义的COM组件,那么这个COM组件在运行.NET程序之前必须先安装好。  最后,转换后的.NET组件DLL文件要安装在目标机器上。因为.NET组件不需要在Windows Registry中注册,所以最简单的方法是将.NET组件DLL文件拷贝到运行程序目录下。如果此.NET组件被多个.NET程序共享,可以将其安装在.NET公用组件区中,从而可被任何一个.NET组件使用。只有当一个.NET组件参与了事务处理时,才需要将它注册为一个COM+组件。因为.NET仍然用传统的COM+机制来处理事务的提交、回滚等。  小结  通过以上讨论,我们知道了在C#中,如何使用Excel的COM组件。需要注意的是,Excel对象包含的许多内容我们没有介绍,在使用过程中需要我们不断学习。也使我们了解了在C#中如何使用COM组件。
      

  8.   

    参考:
    http://www.cnblogs.com/elevenwolf/archive/2004/08/30/35324.aspx
      

  9.   

    to: goody9807
       你说的方法我知道,但如果有直接的方法,我不想花时间去尝试这种转1手的方法.
      

  10.   

    我当前用代码是这样的,请问为什么没有生效呀?
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Data.OleDb;
    using Excel;namespace WebApplication
    {
    /// <summary>
    /// WebForm1 的摘要说明。
    /// </summary>
    public class WebForm1 : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.Button Button1; private void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    }
    public void CreateExcel()
    {
    System.Web.HttpContext.Current.Response.Write("<script language=javascript>");
    System.Web.HttpContext.Current.Response.Write("alert('sss');");
    System.Web.HttpContext.Current.Response.Write("</script>"); Excel.Application excel = new Excel.Application ( ) ;
    excel.Application.Workbooks.Add ( true ) ;
    excel.Cells[ 1 , 1 ] = "第一行第一列" ;
    excel.Cells[ 1 , 2 ] = "第一行第二列" ; 
    excel.Cells[ 2 , 1 ] = "第二行第一列" ; 
    excel.Cells[ 2 , 2 ] = "第二行第二列" ; 
    excel.Cells[ 3 , 1 ] = "第三行第一列" ; 
    excel.Cells[ 3 , 2 ] = "第三行第二列" ; 
    excel.Visible = true ; 
    }
    #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.Button1.Click += new System.EventHandler(this.Button1_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void Button1_Click(object sender, System.EventArgs e)
    {
    CreateExcel();
    }
    }
    }
      

  11.   

    执行了这些代码,
    Excel.Application excel = new Excel.Application ();//引用Excel对象
    excel.Application.Workbooks.Add ( true );//引用Excel工作簿
    excel.Visible = true ;//使Excel可视 为什么EXCEL并没有启动呀?
      

  12.   

    Dim oExcel As new Excel.Application
      Dim oBook As Excel.Workbook
      Dim WSheet As New Excel.Worksheet()
      oBook = oExcel.Workbooks.Open(FileStr)
      WSheet = oBook.Worksheets.Item(1)
      WSheet.Select()
      WSheet.Unprotect()  WSheet.Range("A3").Value = SjDanwei
      WSheet.Range("D3").Value = RpYear
      WSheet.Range("G3").Value = Danwei
    oBook =nothing
    oexcel.quit