利用Excel对数据进行格式转换
实例说明
本实例使用C#代码实现了利用Excel对数据进行格式转换的功能。运行本实例,如图1所示,首先选择查询条件,并输入查询关键字,单击“查询”按钮,在Sql Server数据库中执行查询,并将查询结果显示在数据表格控件中;然后单击“Excel格式转换”按钮,将数据表格控件中的查询结果输出到Excel文件中,并对Excel文件中的数据进行格式转换,这里将日期类型转换为长日期格式,数字转换为“000,000.00”格式,字符串格式化为使用双引号括起来,如图2所示。
图1 利用Excel对数据进行格式转换
图2 格式转换之后的Excel文件
关键技术
本实例在对数据进行格式转换时,主要是通过DataGridViewCell对象的ValueType属性判断DataGridView单元格中的数据类型来实现的,下面对其进行详细讲解。
DataGridViewCell对象表示DataGridView控件中的单个单元格,其ValueType属性用来获取或设置单元格中值的数据类型,该属性的语法格式如下:
[BrowsableAttribute(false)]
public virtual Type ValueType { get; set; }
参数说明
属性值:System.Type类型,表示单元格中值的数据类型。
设计过程
(1)打开Visual Studio 2008开发环境,新建一个Windows窗体应用程序,命名为FormatDataInExcel。
(2)更改默认窗体Form1的Name属性为Frm_Main,在该窗体中添加一个ComboBox控件,用来选择查询条件;添加一个TextBox控件,用来输入查询关键字;添加一个DataGridView控件,用来显示Sql Server数据库中的数据;添加两个Button控件,分别用来执行数据库查询操作,和将数据库查询结果输出到Excel文件并对不同的列进行格式转换的操作。
(3)程序主要代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| private void btn_Excel_Click(object sender, EventArgs e) { if (dgv_Info.Rows.Count == 0) return; Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); excel.Application.Workbooks.Add(true); excel.Visible = true; for (int i = 0; i < dgv_Info.ColumnCount; i++) { excel.Cells[1, i + 1] = dgv_Info.Columns[i].HeaderText; } for (int i = 0; i < dgv_Info.RowCount - 1; i++) { for (int j = 0; j < dgv_Info.ColumnCount; j++) { if (dgv_Info[j, i].ValueType == typeof(string)) { excel.Cells[i + 2, j + 1] = "“" + dgv_Info[j, i].Value.ToString().Trim() + "”"; } else if (dgv_Info[j, i].ValueType == typeof(Int16) || dgv_Info[j, i].ValueType == typeof(Int32)) { excel.Cells[i + 2, j + 1] = Convert.ToInt32(dgv_Info[j, i].Value).ToString("N"); } else if (dgv_Info[j, i].ValueType == typeof(Int64)) { excel.Cells[i + 2, j + 1] = Convert.ToInt64(dgv_Info[j, i].Value).ToString("N"); } else if (dgv_Info[j, i].ValueType == typeof(DateTime)) { excel.Cells[i + 2, j + 1] = Convert.ToDateTime(dgv_Info[j, i].Value).ToLongDateString(); } else { excel.Cells[i + 2, j + 1] = dgv_Info[j, i].Value.ToString(); } } } }
|
秘笈心法
心法领悟051:方便的使用“对象初始化器”!
从C#3.0版本开始,我们可以方便的使用“对象初始化器”对所有的对象进行初始化,对象初始化器允许我们在一条语句中为指定对象的多个字段和属性赋值。实例中使用了对象初始化器初始化对象,并将初始化后的对象添加到集合中。