导出Excel

/// <summary>
 
        ///
 
        /// </summary>
 
        /// <param name="dt">数据源</param>
 
        /// <param name="sheetName">sheetName名称</param>
 
        /// <param name="filePath">导出路径</param>
 
        /// <param name="Filename">文件名称</param>
 
        /// <returns>string.empty</returns>
 
        public static string ExportExcel(System.Data.DataTable dt, String sheetName, string filePath, string Filename)
 
        {
 
            if (null == dt)
 
                return "数据源不能为null";
 
            if (sheetName == string.Empty || sheetName == "")
 
                return "sheetName名称不能为空";
 
            if (filePath == string.Empty || filePath == "")
 
                return "文件路径不能为空";
 
            if (Filename == string.Empty || Filename == "")
 
                return "文件名称不能为空";
 
            string allPath = filePath + Filename;
 
            try
 
            {
 
                object objOpt = System.Reflection.Missing.Value;
 
                Microsoft.Office.Interop.Excel.Application excel;
 
                Microsoft.Office.Interop.Excel._Workbook wbk;
 
                Microsoft.Office.Interop.Excel._Worksheet wst;
 
                excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
 
 
 
                wbk = excel.Workbooks.Add(true);
 
 
 
                wst = (Microsoft.Office.Interop.Excel._Worksheet)wbk.ActiveSheet;
 
                wst.Visible = Microsoft.Office.Interop.Excel.XlSheetVisibility.xlSheetVisible;
 
                wst = (Worksheet)wbk.Worksheets[1];
 
                wst.Name = sheetName;
 
                int cnt = dt.Rows.Count;
 
                int columncnt = dt.Columns.Count;
 
                // *****************获取数据********************
 
                object[,] objData = new Object[cnt + 1, columncnt];  // 创建缓存数据
 
                // 获取列标题
 
                for (int i = 0; i < columncnt; i++)
 
                {
 
                    objData[0, i] = dt.Columns[i].ColumnName;
 
                }
 
                // 获取具体数据
 
                for (int i = 0; i < cnt; i++)
 
                {
 
                    System.Data.DataRow dr = dt.Rows[i];
 
                    for (int j = 0; j < columncnt; j++)
 
                    {
 
                        objData[i + 1, j] = dr[j];
 
                    }
 
                }
 
                //********************* 写入Excel******************
 
                Range r = wst.get_Range(wst.Cells[1, 1], wst.Cells[cnt + 1, columncnt]);
 
 
 
                r.Value2 = objData;
 
                for (int j = 0; j < columncnt; j++)
 
                {
 
                    if (dt.Rows[1][j] is int || dt.Rows[1][j] is decimal)
 
                    {
 
                        Range rColumCost4 = wst.get_Range(wst.Cells[1, j], wst.Cells[dt.Rows.Count + 1, j]);
 
                        rColumCost4.NumberFormat = "#,##0";
 
                        rColumCost4.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignRight;
 
                    }
 
                    if (dt.Rows[1][j] is DateTime)
 
                    {
 
                        Range rColumCost4 = wst.get_Range(wst.Cells[1, j], wst.Cells[dt.Rows.Count + 1, j]);
 
                        rColumCost4.NumberFormat = "yyyy-MM-dd";
 
                        rColumCost4.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignRight;
 
                    }
 
 
 
                }
 
                Range rangeTitle = wst.get_Range(wst.Cells[1, 1], wst.Cells[1, columncnt]);
 
                rangeTitle.Interior.ColorIndex = 15;
 
                rangeTitle.Font.Bold = true;
 
                r.EntireColumn.AutoFit();
 
                wbk.SaveAs(allPath, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
 
                    Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,
 
                    Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
 
                wbk.Close(objOpt, objOpt, objOpt);
 
            }
 
            catch (Exception ex)
 
            {
 
 
 
                throw (ex);
 
            }
 
            finally
 
            {
 
                //扼杀线程Exel
 
                foreach (Process p in Process.GetProcessesByName("Excel"))
 
                {
 
                    if (string.IsNullOrEmpty(p.MainWindowTitle))
 
                    {
 
                        p.Kill();
 
                    }
 
                }
 
            }
 
            return string.Empty;
 
        }

  

posted @ 2014-04-17 17:26  只不过一场戏  阅读(70)  评论(0编辑  收藏  举报