用dataview
?
?
public void OutputExcel(DataView dv,string str)
{
?? //
?? // TODO: 在此处添加构造函数逻辑
?? //
?????????????????????????? //dv为要输出到Excel的数据,str为标题名称
?? GC.Collect();
?? Application excel;// = new Application();
?? int rowIndex=4;
?? int colIndex=1;
?? _Workbook xBk;
?? _Worksheet xSt;
?? excel= new ApplicationClass();
?
?? xBk = excel.Workbooks.Add(true);
?
?? xSt = (_Worksheet)xBk.ActiveSheet;
?? //
?? //取得标题
?? //
?? foreach(DataColumn col in dv.Table.Columns)
??? {
??? colIndex++;
??? excel.Cells[4,colIndex] = col.ColumnName;
??? xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[4,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置标题格式为居中对齐
?? }
?? //
?? //取得表格中的数据
?? //
?? foreach(DataRowView row in dv)
??? {
??? rowIndex ++;
??? colIndex = 1;
??? foreach(DataColumn col in dv.Table.Columns)
???? {
???? colIndex ++;
???? if(col.DataType == System.Type.GetType("System.DateTime"))
????? {
????? excel.Cells[rowIndex,colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd");
????? xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置日期型的字段格式为居中对齐
???? }
???? else
????? if(col.DataType == System.Type.GetType("System.String"))
????? {
????? excel.Cells[rowIndex,colIndex] = "'"+row[col.ColumnName].ToString();
????? xSt.get_Range(excel.Cells[rowIndex,colIndex],excel.Cells[rowIndex,colIndex]).HorizontalAlignment = XlVAlign.xlVAlignCenter;//设置字符型的字段格式为居中对齐
???? }
???? else
????? {
????? excel.Cells[rowIndex,colIndex] = row[col.ColumnName].ToString();
???? }
??? }
?? }
?? //
?? //加载一个合计行
?? //
?? int rowSum = rowIndex + 1;
?? int colSum = 2;
?? excel.Cells[rowSum,2] = "合计";
?? xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,2]).HorizontalAlignment = XlHAlign.xlHAlignCenter;
?? //
?? //设置选中的部分的颜色
?? //
?? xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Select();
?? xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex = 19;//设置为浅黄色,共计有56种
?? //
?? //取得整个报表的标题
?? //
?? excel.Cells[2,2] = str;
?? //
?? //设置整个报表的标题格式
?? //
?? xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Bold = true;
?? xSt.get_Range(excel.Cells[2,2],excel.Cells[2,2]).Font.Size = 22;
?? //
?? //设置报表表格为最适应宽度
?? //
?? xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Select();
?? xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Columns.AutoFit();
?? //
?? //设置整个报表的标题为跨列居中
?? //
?? xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).Select();
?? xSt.get_Range(excel.Cells[2,2],excel.Cells[2,colIndex]).HorizontalAlignment = XlHAlign.xlHAlignCenterAcrossSelection;
?? //
?? //绘制边框
?? //
?? xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,colIndex]).Borders.LineStyle = 1;
?? xSt.get_Range(excel.Cells[4,2],excel.Cells[rowSum,2]).Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;//设置左边线加粗
?? xSt.get_Range(excel.Cells[4,2],excel.Cells[4,colIndex]).Borders[XlBordersIndex.xlEdgeTop].Weight = XlBorderWeight.xlThick;//设置上边线加粗
?? xSt.get_Range(excel.Cells[4,colIndex],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;//设置右边线加粗
?? xSt.get_Range(excel.Cells[rowSum,2],excel.Cells[rowSum,colIndex]).Borders[XlBordersIndex.xlEdgeBottom].Weight = XlBorderWeight.xlThick;//设置下边线加粗
?? //
?? //显示效果
?? //
?? excel.Visible=true;
?? //xSt.Export(Server.MapPath(".")+""""+this.xlfile.Text+".xls",SheetExportActionEnum.ssExportActionNone,Microsoft.Office.Interop.OWC.SheetExportFormat.ssExportHTML);
?? xBk.SaveCopyAs(Server.MapPath(".")+""""+this.xlfile.Text+".xls");
?? ds = null;
??????????? xBk.Close(false, null,null);
?
??????????? excel.Quit();
??????????? System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk);
??????????? System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
??? System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt);
??????????? xBk = null;
??????????? excel = null;
?? xSt = null;
??????????? GC.Collect();
?? string path = Server.MapPath(this.xlfile.Text+".xls");
?? System.IO.FileInfo file = new System.IO.FileInfo(path);
?? Response.Clear();
?? Response.Charset="GB2312";
?? Response.ContentEncoding=System.Text.Encoding.UTF8;
?? // 添加头信息,为"文件下载/另存为"对话框指定默认文件名
?? Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(file.Name));
?? // 添加头信息,指定文件大小,让浏览器能够显示下载进度
?? Response.AddHeader("Content-Length", file.Length.ToString());
?
?? // 指定返回的是一个不能被客户端读取的流,必须被下载
?? Response.ContentType = "application/ms-excel";
?
?? // 把文件流发送到客户端
?? Response.WriteFile(file.FullName);
?? // 停止页面的执行
?
?? Response.End();
}