大树下好乘凉

导航

C#处理Excel简例

首先引用COM接口的Excel:
    Microsoft.Office.Interop.Excel.Application excel对象表示 Excel 应用程序本身。       

Application 对象

    Application 对象公开了大量有关正在运行的应用程序、应用于该实例的选项以及在该实例中打开的当前用户的对象的信息。
workbook对象
    Microsoft.Office.Interop.Excel.Workbook 类表示 Excel 应用程序中的单个工作簿。
Worksheet 对象
    Microsoft.Office.Interop.Excel.Worksheet 对象是Worksheets集合的成员。

    Microsoft.Office.Interop.Excel.Worksheet 的许多属性、方法和事件与 Application 或Microsoft.Office.Interop.Excel.Workbook 类提供的成员完全相同或相似。

 

    Excel 提供Sheets集合作为 Microsoft.Office.Interop.Excel.Workbook 对象的属性,但是 Excel 中没有Sheet类。相反,Sheets 集合的每个成员都是一个Microsoft.Office.Interop.Excel.Worksheet 对象,或者是一个Microsoft.Office.Interop.Excel.Chart对象
Range 对象

    Microsoft.Office.Interop.Excel.Range 对象是 Excel 应用程序中最常用的对象。在能够处理 Excel 内的任何范围之前,必须将它表示为 Range 对象,并处理该对象的方法和属性。Range 对象表示一个单元格、一行、一列、包含一个或多个单元格块(可以连续,也可以不连续)的单元格选定范围,甚至多个工作表中的一组单元格。

 

    一个简单的从DataGridView里面读入到Excel里的实现代码:

        /// <summary>
        /// 导出Excel的自定义方法
        /// </summary>
        /// <param name="dgv">所需要导出数据所在的DataGridView</param>
        /// <param name="isShowExcel">是否显示</param>
        /// <returns>导出成功则返回true</returns>
        private bool ExportDataGridView(string excelName,DataGridView dgv, bool isShowExcel,Exception ex)
        {
            if (dgv.Rows.Count == 0)
                return false;
            try
            {
                //建立Excel对象
                Excel.Application MyExcel = new Microsoft.Office.Interop.Excel.Application();
                MyExcel.Application.Workbooks.Add(true);
                MyExcel.Visible = isShowExcel;              
                //表名
                for (int i = 0; i < dgv.ColumnCount; i++)
                {
                    MyExcel.Cells[1, 1] = excelName;
                }
                //添加列名
                for (int i = 0; i < dgv.ColumnCount; i++)
                {
                    MyExcel.Cells[2, i + 1] = dgv.Columns[i].HeaderText;
                }
                //填充数据
                for (int i = 0; i < dgv.RowCount; i++)
                {
                    for (int j = 0; j < dgv.ColumnCount; j++)
                    {
                        MyExcel.Cells[i + 3, j + 1] = dgv[j, i].Value.ToString();
                    }
                }
                return true;
            }
            catch(Exception _ex)
            {
                ex = _ex;
                return false;
            }
        }

    扩展一句,在转换为Excel时上述方法为比较基础的,但是有一定的局限性,比如不同版本word的识别,用户安装excel正确性的识别等,并且有时候运行的效率不是很好。
    还有一种替代的方案,就是使用FlexCell类库,具体使用方法就不做介绍了。

posted on 2009-09-07 14:10  大树下好乘凉  阅读(643)  评论(0编辑  收藏  举报