您的位置:首页 > 编程语言 > C#

C# DataGridView导出Excel,设置单元格合并,隐藏行

2009-07-23 22:34 471 查看
不得不承认,做程序需要研究。

DataGridView导出Excel的源码

using System.Windows.Forms;
using System.Collections.Generic;
using System;
using Microsoft.Office.Interop.Excel;
public class CommanPrint
{
/// <summary>
/// 导出Excel

/// 版权所有 : 天山寒雪 QQ:757015000 MSN: haijun.qin@hotmail.com

/// </summary>
/// <param name="mydgv">控件 DataGridView </param>
/// <param name="dic">中英文对照的标题 </param>
public static void ExportTasks(DataGridView mydgv, Dictionary<string, string> dic)
{
// 定义要使用的Excel 组件接口
// 定义Application 对象,此对象表示整个Excel 程序
Microsoft.Office.Interop.Excel.Application excelApp = null;
// 定义Workbook对象,此对象代表工作薄
Microsoft.Office.Interop.Excel.Workbook workBook;
// 定义Worksheet 对象,此对象表示Execel 中的一张工作表
Microsoft.Office.Interop.Excel.Worksheet ws = null;
//定义Range对象,此对象代表单元格区域
Microsoft.Office.Interop.Excel.Range range;

// Microsoft.Office.Interop.Excel.c

int dcell = 1;
int rowindex = 0; int colindex = 0;

int rowcount = mydgv.Rows.Count;
int colcount = mydgv.Columns.Count;
int dispcolcount = dic.Count;
try
{
//初始化 Application 对象 excelApp
excelApp = new Microsoft.Office.Interop.Excel.Application();
//在工作薄的第一个工作表上创建任务列表
workBook = excelApp.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
ws = (Worksheet)workBook.Worksheets[1];

// 命名工作表的名称为
ws.Name = "Sheet1";
//创建缓存
Object[,] objdata = new object[rowcount + 2, colcount];
//创建标题
foreach (string s in dic.Keys)
{
objdata[rowindex, colindex++] = dic[s].ToString();
}
//创建缓存
//Object[,] objdata1 = new object[rowcount + 1, colcount];
//创建标题
colindex = 0;
foreach (string s in dic.Keys)
{
objdata[1, colindex++] = s;
}
//获取数据
for (int i = 0; i < rowcount; i++)
{
dcell = 0;
foreach (string ss in dic.Keys)
{
for (int j = 0; j < colcount; j++)
{
if (mydgv.Columns[j].Name == ss)
{
objdata[i + 2, dcell++] = mydgv.Rows[i].Cells[j].FormattedValue.ToString(); //得到样式之后的值
}
}
}
}
//设置表头

range = ws.get_Range("A1", "A2");
range.Merge(false);
range.Value2 = "客户名称";
range = ws.get_Range(excelApp.Cells[1, 2], excelApp.Cells[1, 3]);
range.Merge(true);
range.Value2 = "合计";
range.HorizontalAlignment = Constants.xlCenter;
range = ws.get_Range("D1","D2");
range.Merge(false);
range.Value2 = "单位";
//写入Excel
range = ws.get_Range(excelApp.Cells[3, 1], excelApp.Cells[rowcount+1, dispcolcount]);
range.Value2 = objdata;
System.Windows.Forms.Application.DoEvents();
//设置格式
excelApp.Cells.HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlLeft; //全局左对齐
excelApp.Cells.EntireColumn.AutoFit();
range = ws.get_Range(excelApp.Cells[1, 1], excelApp.Cells[2, colcount]);
range.Font.Bold = true; //标题粗体
//excelApp.Rows[2].Hidden = true;
range = ws.get_Range(excelApp.Cells[3, 1], excelApp.Cells[3, colcount]);
range.EntireRow.Hidden = true;
//range.Merge(true);
//range.Value2 = "wwww";
range = ws.get_Range(excelApp.Cells[1, 2], excelApp.Cells[1, 3]);
range.HorizontalAlignment = Constants.xlCenter;
//显示 Excel
excelApp.Visible = true;
//range.Hidden = true;
}
catch (Exception ex)
{
throw ex;
}
}
}

这里使用的是天山寒雪的源码,保留原信息,并致以感谢。

我从他的源码的基础上加上了关于多表头的设置和行的隐藏,在多表的设置中需要用到单元格合并。

range = ws.get_Range("A1", "A2");
range.Merge(false);
range.Value2 = "客户名称";

选择A1和A2两个单位格,合并,设值。属于上下合并

range = ws.get_Range(excelApp.Cells[1, 2], excelApp.Cells[1, 3]);
range.Merge(true);
range.Value2 = "合计";

选择第一行第二个和第一行第三个单元格,合并,赋值,左右合并。

隐藏row

range = ws.get_Range(excelApp.Cells[3, 1], excelApp.Cells[3, colcount]);
range.EntireRow.Hidden = true;
选中部分单元格,把选中的单元格所在的行的Hidden属性设为true。

完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: