那你的编译器坏了,我都不会出错,我也用过excel

解决方案 »

  1.   

    打开运行:C:\WINNT\system32\dcomcnfg.exe
    配置DCOM将EXCEL的所以权限都放开,一切OK!
    但就是在创建EXCEL进程的时候有点慢,这点始终是个问题
    最后总结:机子好的导出EXCEL速度越快
      

  2.   

    我成功了,原是这样的:
    首先要引用microsoft.excel11.0 object library,然后要用下面的语名才能找个所要的方法
    using Excel = Microsoft.Office.Interop.Excel;
    在MSDN里这方面的帮助太少了,现在我还不知
    Excel.Range 的EntireColumn.AutoFit();什么意思呢?
      

  3.   

    Excel.Range 的EntireColumn.AutoFit();  自动调整列宽
      

  4.   

    5.0好象是不可以,我也试过。可能名称空间不是excel.
    高版就可以操作。
    我现在都是操作XML的,不过必须要XP或以上版本。
    好处就是不用担心COM释放问题,效率高,不过XML文件比SLX文件大很多。
      

  5.   

    Excel.Range 的EntireColumn.AutoFit() 自动调整列宽
      

  6.   

    /// <summary>
    /// 向EXCEL表格里插入数据库记录
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void btnExcel_Click(object sender, System.EventArgs e)
    {
    //查询数据库内容判断 AccFlage的值,如果其值是1则用'√'替换,如果是0则为空
    string query_sql = "select AccDate,No,Abr_AccId,Abr_Content,Abr_Person,(select case when AccFlag = 1 then '√' when AccFlag = 0 then ''else ''end as 'AccFlag'),DbtAmt,CrdAmt,EndAmt from accounttype where accno = '" + cboNo.SelectedValue + "'and AccDate between '" + dateStart.Value.Date + "' and '" + dateEnd.Value.Date + "'";
    SqlConnection con = new SqlConnection(ConStr);
    SqlDataAdapter da = new SqlDataAdapter(query_sql,con);
    DataSet ds = new DataSet();
    da.Fill(ds,"accounttype"); string query = "select endamt from accounttype where id = '" + this.txtDate.Text + "'";
    SqlDataAdapter daNow = new SqlDataAdapter(query,con);
    DataSet dsNow = new DataSet();
    daNow.Fill(dsNow,"accounttype");
    txtNow.DataBindings.Clear();
    txtNow.DataBindings.Add("Text",dsNow,"AccountType.EndAmt"); string str;
    if(this.radioMoney.Checked)
    {
    str = "0";
    }
    else
    {
    str = "1";
    } if(str == "0")
    {
    string query_money = "select * from money where MoneyAttr = 2";
    SqlDataAdapter damoney = new SqlDataAdapter(query_money,con);
    DataSet dsmoney = new DataSet();
    damoney.Fill(dsmoney,"money");
    txtMoney.DataBindings.Clear();
    txtMoney.DataBindings.Add("Text",dsmoney,"Money.Money");
    }
    else
    {
    string query_money = "select * from money where MoneyAttr = 3";
    SqlDataAdapter damoney = new SqlDataAdapter(query_money,con);
    DataSet dsmoney = new DataSet();
    damoney.Fill(dsmoney,"money");
    txtMoney.DataBindings.Clear();
    txtMoney.DataBindings.Add("Text",dsmoney,"Money.Money");
    }

    string filename="";
    //将模板文件复制到一个新文件中
    SaveFileDialog mySave = new SaveFileDialog();
    mySave.Filter="Excel文件(*.XLS)|*.xls|所有文件(*.*)|*.*";
    if(mySave.ShowDialog()!=DialogResult.OK)
    {
    return;
    }
    else
    {
    filename = mySave.FileName;
    //将模板文件copy到新位置,建议实际开发时用相对路径,如Application.StartupPath.Trim()+"\\report\\normal.xls"


    FileInfo mode=new FileInfo(Application.StartupPath.Trim() + @"\Report\CashReport.xls");
    try
    {
    mode.CopyTo(filename,true);
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.Message);
    return;
    }
    }
    //打开复制后的文件
    object missing = Missing.Value;
    Excel.Application myExcel = new Excel.Application ( );
    //打开新文件
    myExcel.Application.Workbooks.Open(filename,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing); 
    //将Excel显示出来
    myExcel.Visible=true;
    //将列标题和实际内容选中
    Excel.Workbook myBook = myExcel.Workbooks[1];
    Excel.Worksheet mySheet = (Excel.Worksheet)myBook.Worksheets[1];
    mySheet.Cells[2,5] = this.dateStart.Value.Date;
                mySheet.Cells[2,8] = this.dateEnd.Value.Date;
    mySheet.Cells[1,1] = "安徽省建行现金出纳统计表------" + this.cboNo.SelectedValue;
    //判断是否有余额,如果没有就把初期额添加入EXCEL中
    if(this.txtDate.Text == "")
    {
    mySheet.Cells[5,9] = txtMoney.Text.ToString();
    }
    else
    {
    mySheet.Cells[5,9] = txtNow.Text.ToString(); }
    //向EXCEL里插记录


          int HeadLines=5;
    int j=0; for(int r = 0;r<ds.Tables[0].Rows.Count;r++)
    {
    if (((r+1) % 22)==0)
    {
    for(int i = 0;i<ds.Tables[0].Columns.Count;i++)
    {
    mySheet.Cells[j*2+r+HeadLines+1,i+1] = ds.Tables[0].Rows[r][i];
    }
    mySheet.Cells[j*2+r+HeadLines+2,4] = "过次页";
    mySheet.Cells[j*2+r+HeadLines+3,4] = "呈上页";
    mySheet.Cells[j*2+r+HeadLines+3,9] = ds.Tables[0].Rows[r][8];;
    j++;
            }
    else
    {
    for(int i = 0;i<ds.Tables[0].Columns.Count;i++)
    {
    mySheet.Cells[j*2+r+HeadLines+1,i+1] = ds.Tables[0].Rows[r][i];
    }
    }
    }
    }
    数据导入EXCEL没问题,你看看吧
      

  7.   

    我也关心怎么释放excel的问题。
      

  8.   

    EXCEL释放问题,我也关心,我试验发现在Excel Xp中不会有EXCEL释放不掉的问题,而在2003下就释放不掉了, cantops(劣等游民)你看看
      

  9.   

    EXCEL释放确实是个问题,
    用两个方法,一个方法foun1执行你的操作,并关闭,另外一个方法foun2:
    provate void foun2()
    {
       foun1();
       GC.Collect();//强行销毁}
      

  10.   

    Microsoft.Office.Interop.Excel.Application myExcel=new Microsoft.Office.Interop.Excel.ApplicationClass();
                               Microsoft.Office.Interop.Excel.Worksheet mySheet=new Microsoft.Office.Interop.Excel.WorksheetClass();
    myExcel.Visible=true;
    myExcel.Workbooks.Add(true);//这样写才对不能释放是应为你没有把引用都断开
    System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheets);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
    ...
    System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
    worksheets=null;
    worksheet=null;
    ...
    excelApp=null;
    range=null;把操作Excel文件用到的对象实例全部释放。然后资源回收!
    GC.Collect();//这样就能都释放了
      

  11.   

    EXCEL释放问题, 有没有用Sheet.Close()?