private void OutClassExcel(string path,string Class)
{
//建立新的Excel工作薄和表单
Excel.Application App = new Excel.Application();
Excel.Workbooks Books = App.Workbooks;
Excel._Workbook Book = Books.Add(Missing.Value);
Excel.Sheets sheets = (Excel.Sheets)Book.Worksheets;
Excel._Worksheet sheet = (Excel._Worksheet)sheets.get_Item(1); //得到表的列标题
System.Data.DataTable dt = GetData(Class);
System.Collections.IEnumerator Fields = dt.Columns.GetEnumerator(); int FieldCount = dt.Columns.Count; Object[] Header = new object[FieldCount];
for(int i=0; i<FieldCount; i++)
{
Fields.MoveNext();
System.Data.DataColumn c = (System.Data.DataColumn)Fields.Current;
Header[i] = c.Caption;
}
Excel.Range m_Range = sheet.get_Range("A1",Missing.Value);
m_Range = m_Range.get_Resize(1,FieldCount);
m_Range.Value = Header;
Excel.Font m_Font = m_Range.Font;
m_Font.Bold = true; //得到表中的数据
//将实际的数据首先复制到数组中,然后利用数组直接复制到Excel表中
int RowCount = dt.Rows.Count;
int ColCount = dt.Columns.Count;
Object[,] Content = new object[RowCount,ColCount];
for (int i = 0; i<RowCount; i++)
{
for (int j=0; j<ColCount; j++)
{
Content[i,j] = dt.Rows[i][j];
}
} m_Range = sheet.get_Range("A2",Missing.Value);
m_Range = m_Range.get_Resize(dt.Rows.Count,dt.Columns.Count);
//m_Range.CopyFromRecordset(dt,Missing.Value,Missing.Value);
m_Range.Value = Content; //保存该表
Book.SaveAs(path,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value,
Excel.XlSaveAsAccessMode.xlNoChange,
Missing.Value,Missing.Value,Missing.Value,Missing.Value);

Book.Close(false,Missing.Value,Missing.Value);
App.Workbooks.Close();
App.Quit();

System.Runtime.InteropServices.Marshal.ReleaseComObject(App);
System.Runtime.InteropServices.Marshal.ReleaseComObject(Book);
System.Runtime.InteropServices.Marshal.ReleaseComObject(sheet);
Book = null;
sheet = null;
App = null;
GC.Collect();
}
在本机器上可以不会留下excel进程,做成安装程序后去服务器上就不行了,导出一次多一个excel进程大人看看代码有问题么?救命

解决方案 »

  1.   

    excel.Application.Workbooks.Close();
    excel.Application.Quit ();
    excel.Quit();
    GC.Collect ();
      

  2.   

    http://dotnet.aspx.cc/ShowDetail.aspx?id=D38781F3-07FE-4BCF-9B67-B657985BA063
      

  3.   

    这样倒:
    http://dotnet.aspx.cc/ShowDetail.aspx?id=8A4CBF47-B888-4832-3389-ED3A3A3C8AAB另外,aspx运行的帐号没有管理员权限的,所以不能删除
      

  4.   

    可以进行帐号模拟http://www.microsoft.com/china/technet/security/guidance/secmod38.mspx