日期:2014-05-18 浏览次数:20813 次
public static void ToExcel(DataGridView dgv, string name) { try { //总可见列数,总可见行数 int colCount = dgv.Columns.GetColumnCount(DataGridViewElementStates.Visible); int rowCount = dgv.Rows.GetRowCount(DataGridViewElementStates.Visible); //dataGridView 没有数据提示 if (dgv.Rows.Count == 0 || rowCount == 0) { MessageBox.Show("列表中没有数据无法导出!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } SaveFileDialog save = new SaveFileDialog(); save.Filter = "excel files(*.xls)|*.xls"; save.Title = "请选择要导出数据的位置"; save.FileName = name + DateTime.Now.ToLongDateString(); save.InitialDirectory = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop); if (save.ShowDialog() == DialogResult.OK) { XlsDocument xls = new XlsDocument();//创建空xls文档 xls.FileName = save.FileName;//保存路径,如果直接发送到客户端的话只需要名称 生成名称 Worksheet sheet = xls.Workbook.Worksheets.Add(name); //创建一个工作页为Dome //设置文档列属性 ColumnInfo cinfo = new ColumnInfo(xls, sheet);//设置xls文档的指定工作页的列属性 cinfo.Collapsed = true; //设置列的范围 如 0列-10列 cinfo.ColumnIndexStart = 0;//列开始 cinfo.ColumnIndexEnd = 10;//列结束 cinfo.Collapsed = true; cinfo.Width = 90 * 60;//列宽度 sheet.AddColumnInfo(cinfo); //设置文档列属性结束 //设置指定工作页跨行跨列 MergeArea ma = new MergeArea(1, 1, 1, dgv.ColumnCount);//从第1行跨到第二行,从第一列跨到第5列 sheet.AddMergeArea(ma); //设置指定工作页跨行跨列结束 //创建列样式创建列时引用 XF cellXF = xls.NewXF(); cellXF.VerticalAlignment = VerticalAlignments.Centered; cellXF.HorizontalAlignment = HorizontalAlignments.Centered; cellXF.Font.Height = 24 * 12; cellXF.Font.Bold = true; cellXF.Pattern = 0;//设定单元格填充风格。如果设定为0,则是纯色填充 cellXF.PatternBackgroundColor = Colors.Black;//填充的背景底色 cellXF.PatternColor = Colors.Black;//设定填充线条的颜色 //创建列样式结束 //创建列 Cells cells = sheet.Cells; //获得指定工作页列集合 //列操作基本 Cell cell = cells.Add(1, 1, name, cellXF);//添加标题列返回一个列 参数:行 列 名称 样式对象 //设置XY居中 cell.HorizontalAlignment = HorizontalAlignments.Centered; cell.VerticalAlignment = VerticalAlignments.Centered; //设置字体 cell.Font.Bold = true;//设置粗体 cell.Font.ColorIndex = 0;//设置颜色码 cell.Font.FontFamily = FontFamilies.Roman;//设置字体 默认为宋体 //创建列结束 //生成字段名称 int k = 0; for (int i = 0; i < dgv.ColumnCount; i++) { if (dgv.Columns[i].Visible) //不导出隐藏的列 { Cell title = cells.Add(2, k + 1, dgv.Columns[i].HeaderText); title.HorizontalAlignment = HorizontalAlignments.Centered; title.VerticalAlignment = VerticalAlignments.Centered; k++; } } //填充数据