GIS~沧海浮沉

导航

导入导出Excel的简单,中等,复杂,方法

#region 导出简单方法
        public static void DataTabletoExcel(System.Data.DataTable tmpDataTable)
        {
            //建立EXECL对象
          
            Excel.Application excel= new Excel.Application();
            excel.Application.Workbooks.Add(true);
            excel.Visible = true;
            //添加字段名称

            int count = tmpDataTable.Columns.Count;

            for (int i = 0; i < count; i++)
            {

                //标头占第一行
                excel.Cells[1, i + 1] = tmpDataTable.Columns[i].ColumnName;
            }
            //填充数据
            int row = tmpDataTable.Rows.Count;
            for (int i = 0; i < row; i++)
            {
                for (int j = 0; j < count; j++)
                {
                    //数据从第二行开始

                    excel.Cells[i + 2, j + 1] = tmpDataTable.Rows[i][j].ToString();

                }
            }
        }
        #endregion



        #region 导出中等方法
        public static void DataTabletoExcel(System.Data.DataTable tmpDataTable,string strFileName)
        {

            if (tmpDataTable == null)
                return;
            int rowNum = tmpDataTable.Rows.Count;
            int columnNum = tmpDataTable.Columns.Count;
            int rowIndex = 1;
            int columnIndex = 0;

            Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
            xlApp.DefaultFilePath = "";
            xlApp.DisplayAlerts = true;
            xlApp.SheetsInNewWorkbook = 1;
            Microsoft.Office.Interop.Excel.Workbook xlBook = xlApp.Workbooks.Add(true);

            //将DataTable的列名导入Excel表第一行
            foreach (DataColumn dc in tmpDataTable.Columns)
            {
                columnIndex++;
                xlApp.Cells[rowIndex, columnIndex] = dc.ColumnName;
            }

            //将DataTable中的数据导入Excel中
            for (int i = 0; i < rowNum; i++)
            {
                rowIndex++;
                columnIndex = 0;
                for (int j = 0; j < columnNum; j++)
                {
                    columnIndex++;
                    xlApp.Cells[rowIndex, columnIndex] = tmpDataTable.Rows[i][j].ToString();
                }
            }
            xlBook.SaveCopyAs(strFileName);
        }
        #endregion



    #region 导出复杂类
    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(ListView mylv, 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;

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

            int rowcount = mylv.Items.Count;
            int colcount = mylv.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 + 1, colcount];
                //创建标题
                foreach (string s in dic.Keys)
                {
                    objdata[rowindex, colindex++] = dic[s].ToString();
                }
                //获取数据
                for (int i = 0; i < rowcount; i++)
                {
                    dcell = 0;
                    foreach (string ss in dic.Keys)
                    {
                        for (int j = 0; j < colcount; j++)
                        {
                            if (mylv.Columns[j].Name == ss)
                            {
                                objdata[i + 1, dcell++] = mylv.Items[i].SubItems[j].Text; //得到样式之后的值
                            }
                        }
                    }
                }
                //写入Excel
                range = ws.get_Range(excelApp.Cells[1, 1], excelApp.Cells[rowcount, 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[1, colcount]);
                range.Font.Bold = true; //标题粗体
                //显示 Excel
                excelApp.Visible = true;

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
    #endregion

posted on 2010-07-16 15:45  GIS_Zhou  阅读(888)  评论(0)    收藏  举报