这样:
Session["user"]是当前登录的用户,主要用于产生文件名
Session["vData"]是datagrid的数据源,我用的是DATATABLE。
另外,OWC好像没办法进行格式控制.private void Button1_Click(object sender, System.EventArgs e)
{
string sFileName = Session["user"].ToString() + DateTime.Now.ToFileTime().ToString() + ".xls";
OWC.SpreadsheetClass xlsheet = new OWC.SpreadsheetClass();
DataTable dt = (DataTable)Session["vData"];
int numbercols = dt.Columns.Count; //插入列名
for (int i = 0 ; i < numbercols ; i++)
xlsheet.ActiveSheet.Cells[1,i+1] = dt.Columns[i].ColumnName; //插入数据
for (int k = 0 ; k < dt.Rows.Count ; k++)
for (int i=0;i<numbercols;i++) 
xlsheet.ActiveSheet.Cells[k+2,i+1] = dt.Rows[k][i].ToString(); //保存为本地临时文件,用户下载完后删除
xlsheet.ActiveSheet.Export("e:\\ExcelFiles\\" + sFileName,OWC.SheetExportActionEnum.ssExportActionNone); DownloadFiles("e:\\ExcelFiles\\" + sFileName);
RemoveFiles("e:\\ExcelFiles\\" + sFileName);
}private void DownloadFiles(string strPath)
{
FileInfo fi=new FileInfo(strPath);
Response.Clear();
Response.ClearHeaders();
Response.Buffer = false;
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition","attachment;filename=" +HttpUtility.UrlEncode(fi.FullName,System.Text.Encoding.UTF8));
Response.AppendHeader("Content-Length",fi.Length.ToString());
Response.WriteFile(fi.FullName);
Response.Flush();
}private void RemoveFiles(string strPath)

FileInfo fi = new FileInfo(strPath);
fi.Delete();
Response.End();
}