• DataTable To Excel File,Create Excel, Create Local Floder 从数据库中读取数据存到本地指定文件夹的Excel中


    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.IO;
    using Microsoft.Office.Interop.Excel;
    using System.Data.SqlClient;

    public partial class Excel : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
          
        }
        protected void BtnExport_Click(object sender, EventArgs e)
        {
            string Path = "E:\\DorFee"//文件夹
            string SubPath = "KQ"//子文件夹
            string ExcelName = "KQ" + DateTime.Now.ToString("yyyyMM") + ".xlsx"//要创建的Excel的文件名
            string ExcelFullPath = Path + "\\" + SubPath + "\\" + ExcelName; //Excel的完整路径
            string str = "SELECT [classID],[className] FROM [SchoolNews].[dbo].[newsClass] ";
            CreateFolder(Path,SubPath,ExcelName);  //创建要保存Excel的文件夹
            Export(str,ExcelFullPath); //从数据库中读取数据写到Excel中
        }
        protected void Export(string str,string excelFullPath)
        {
            // sqlH = new SQLHelper();

            
    //string str = "SELECT [classID],[className] FROM [SchoolNews].[dbo].[newsClass] ";
            SqlConnection sqlCon = new SqlConnection("server=.;database=schoolnews;uid=sa;pwd=;");
            sqlCon.Open();
            SqlCommand sqlcom = new SqlCommand(str, sqlCon);
            System.Data.SqlClient.SqlDataReader sdr = sqlcom.ExecuteReader();
            System.Data.DataTable dt = new System.Data.DataTable();
            dt.Load(sdr);
            sdr.Close();
            sqlCon.Close();

            int[] index = { 01 };
            string[] heads = { "classID""className" };
            //string name = Server.MapPath("file/template.xls");
            string name = excelFullPath;
            ExportToExcel(dt, excelFullPath, index, heads);// Server.MapPath("file/template.xls")
            System.IO.FileInfo aFile = new System.IO.FileInfo(name);
            //页面弹出保存窗口,exe中不需要
            
    //string na = Path.GetFileName(name);
            
    //Response.Clear();
            
    //Response.ClearHeaders();
            
    //Response.BufferOutput = false;
            
    //Response.ContentType = "application/ms-excel";
            ////Response.AddHeader("Content-Disposition","attachment;filename="+na);  
            
    ////上面这条中文会乱码,应该下面这样写  
            //Response.AppendHeader("Content-disposition", "attachment;filename=" + HttpUtility.UrlEncode(na, System.Text.Encoding.UTF8));
            
    //Response.AddHeader("Content-Length", aFile.Length.ToString());
            
    //Response.WriteFile(name);
            
    //Response.Flush();
            
    //Response.End();
        }
        // DataTable To Excel
        public static bool ExportToExcel(System.Data.DataTable table, string excelName, int[] columnIndexs, string[] columnHeads)
        {
            #region 将方法中用到的所有Excel变量声明在方法最开始,以便最后统一回收。
            object missing = System.Reflection.Missing.Value;

            Microsoft.Office.Interop.Excel.ApplicationClass oExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();
            Microsoft.Office.Interop.Excel.Workbook obook = null;
            Microsoft.Office.Interop.Excel.Worksheet oSheet = null;
            Microsoft.Office.Interop.Excel.Range range = null;
            #endregion
            try
            {
                obook = oExcel.Workbooks.Add("");

                oSheet = (Microsoft.Office.Interop.Excel.Worksheet)obook.Worksheets[1];
                int rCount, cCount;
                rCount = table.Rows.Count;
                cCount = table.Columns.Count;
                object obj = System.Reflection.Missing.Value;

                if (cCount < columnIndexs.Length || cCount < columnHeads.Length)
                {
                    throw new ArgumentOutOfRangeException("columnIndexs 与 columnHeads 长度必须一致。");
                }
                for (int i = 1; i <= columnIndexs.Length; i++)
                {
                    //Excel.Range = (Excel.Range)oSheet.Columns.get_Item(i, obj); 
                    range = (Microsoft.Office.Interop.Excel.Range)oSheet.Columns.get_Item(i, obj);
                    range.NumberFormatLocal = "@";
                }
                for (int c = 0; c < columnIndexs.Length; c++)
                {
                    oSheet.Cells[1, c + 1] = columnHeads[c];
                    for (int r = 1; r <= rCount; r++)
                    {
                        oSheet.Cells[r + 1, c + 1] = table.Rows[r - 1][columnIndexs[c]].ToString();
                    }
                }
                obook.Saved = true;
                obook.SaveCopyAs(excelName);

                //必须调用 obook.Close(), 否则无法释放进程。
                obook.Close(false, System.Reflection.Missing.Value, System.Reflection.Missing.Value);
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                // 调用System.Runtime.InteropServices.Marshal.ReleaseComObject(object)方法释放方法中
                
    //用到的所有的Excel 变量, 记住是所有的。 比如说此方法中的range 对象, 就容易被遗忘。

                System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oSheet);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obook);

                // 很多文章上都说必须调用此方法, 但是我试过没有调用oExcel.Quit() 的情况, 进程也能安全退出,
                
    //还是保留着吧。
                oExcel.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(oExcel);
                // 垃圾回收是必须的。 测试如果不执行垃圾回收, 无法关闭Excel 进程。
                GC.Collect();
            }
        }

            protected void CreateFolder(string physicsPath, string toFindDirectoryName, string FileNameToCreate)
        {
            string path = "";
            string fullpath = physicsPath + "\\" + toFindDirectoryName + "\\" + FileNameToCreate; //要查找的文件的全部路径
            FindDirectory(physicsPath + "\\", toFindDirectoryName, out path);//用递归的方式去查找文件夹
            if (!string.IsNullOrEmpty(path)) //如果存在,在此文件夹下建立Excel
            {
                CreateExcel(fullpath);
            }
            else
            {
                //没有找到路径,创建新文件夹,在此文件夹下创建Excel
                Directory.CreateDirectory(physicsPath + "\\" + toFindDirectoryName);
                CreateExcel(fullpath);
            }
        }

        /// <summary>
        
    /// 在指定目录下递归查找子文件夹
        
    /// </summary>
        
    /// <param name="bootPath">根文件夹路径</param>
        
    /// <param name="directoryName">要查找的文件夹名</param>
        private void FindDirectory(string bootPath, string directoryName, out string filePath)
        {
            //在指定目录下递归查找子文件夹
            DirectoryInfo dir = new DirectoryInfo(bootPath);
            filePath = "";
            try
            {
                foreach (DirectoryInfo d in dir.GetDirectories()) //查找子文件夹
                {
                    if (d.Name == directoryName) //找到,返回文件夹路径
                    {
                        filePath = d.FullName;
                        break;
                    }
                    FindDirectory(bootPath + d.Name + "\\", directoryName, out filePath); //否则继续查找
                }
            }
            catch (Exception )
            {
                return;
            }

        }
        //在某个路径下生成 Excel
        public void CreateExcel(string fileName)
        {
            Object missing = System.Reflection.Missing.Value;
            //判断要创建的Excel文件是否已经存在
            if (File.Exists(fileName))
            {
                File.Delete(fileName);
            }

            Microsoft.Office.Interop.Excel.Application m_objExcel = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbooks m_objWorkBooks = m_objExcel.Workbooks;
            Microsoft.Office.Interop.Excel.Workbook m_objWorkBook = m_objWorkBooks.Add(true);
            Microsoft.Office.Interop.Excel.Sheets m_objWorkSheets = m_objWorkBook.Sheets; ;
            Microsoft.Office.Interop.Excel.Worksheet m_objWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)m_objWorkSheets[1];
            m_objWorkBook.SaveAs(fileName, missing, missing, missing, missing, missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
                    missing, missing, missing, missing, missing);
            m_objWorkBook.Close(false, missing, missing);
            m_objExcel.Quit();
            //创建一个新的Excel 不需要网页弹出保存
            
    //Response.ClearContent();
            
    //Response.ClearHeaders();
            
    //Response.AppendHeader("Content-Disposition", "attachment;filename=C:\\DorFee\\KQ\\KQ.xls");
            
    //Response.Buffer = true;
            
    //Response.ContentType = "application/ms-excel";
            
    //Response.Flush();
            
    //Response.Close();
            
    //System.IO.File.Delete("d:cms.xls");
        }
    }
  • 相关阅读:
    将抓包工具证书从用户目录移动至系统目录,解决反爬对于本地证书认证(安卓7)
    《C++ concurrency in action》 读书笔记 -- Part 2 第三章 线程间的数据共享
    《C++ concurrency in action》 读书笔记 -- Part 3 第四章 线程的同步
    C++14 也快要来了
    《C++ concurrency in action》 读书笔记 -- Part 4 第五章 C++的多线程内存模型 (1)
    利用表达式树构建委托改善反射性能
    使用Task简化Silverlight调用Wcf(再续)
    逆变与协变详解
    Beginning Silverlight 4 in C#数据访问和网络
    使用Task简化Silverlight调用Wcf(续)
  • 原文地址:https://www.cnblogs.com/hishanghai/p/2559119.html
Copyright © 2020-2023  润新知