1. 程式人生 > >MVC 下 打包多個word到壓縮包

MVC 下 打包多個word到壓縮包

情況 ron lena ram lse .sql add 報告 length

第一步 引入dll

技術分享圖片

控制器代碼

     /// <summary>
        /// 導出Word表格
        /// </summary>
        /// <param name="Pyaid">選中數據ID</param>
        /// <param name="type">是否結束的報告(狀態)</param>
        public void ToWord(string[] Pyaid, int type)

        {
            //獲取選中的id
            string
[] j = Pyaid[0].Split(,); AchievementExpand achieve = new AchievementExpand(); if (Pyaid != null) { int[] output = Array.ConvertAll<string, int>(j, delegate (string s) { return int.Parse(s); }); if (output.Length > 0) {
string filePath = null; for (int i = 0; i < output.Length; i++) { if (type == 0) { //獲取所有成績信息 string sql = @"SELECT su.subject_name, syp.AddTime, us.user_name, ac.*, st.student_no FROM Achievement ac LEFT JOIN student_info st ON ac.stu_id = st.student_id left join class_info sy ON sy.class_id=ac.cla_id left join user_info us on us.user_id=sy.class_teacher left join Sy_PracticalTraining syp on syp.ID=ac.pya_id left join subject su on su.subject_id=sy.class_subject WHERE ac.IsEnd=0 and ac.ID=
" + output[i]; achieve = entity.Database.SqlQuery<AchievementExpand>(sql).FirstOrDefault(); // 創建HSSFWorkbook對象(excel的文檔對象) } else { //獲取歷史成績信息 string sql = @"SELECT su.subject_name, syp.AddTime, us.user_name, ac.*, st.student_no FROM Achievement ac LEFT JOIN student_info st ON ac.stu_id = st.student_id left join class_info sy ON sy.class_id=ac.cla_id left join user_info us on us.user_id=sy.class_teacher left join Sy_PracticalTraining syp on syp.ID=ac.pya_id left join subject su on su.subject_id=sy.class_subject WHERE ac.IsEnd=1 and ac.ID=" + output[i]; achieve = entity.Database.SqlQuery<AchievementExpand>(sql).FirstOrDefault(); } Random rd = new Random(); string fileName = achieve.PyaName + "-" + achieve.student_no + ".doc"; //存儲路徑 string path = Server.MapPath("~/UpFiles/DoxlFiles/") + fileName; //創建字符輸出流 StreamWriter sw = new StreamWriter(path, true, System.Text.UnicodeEncoding.UTF8); //需要導出的內容 string str = ""; str += "<html><head><title>實訓報告</title></head><body>"; str += "<div style=‘text-align:center‘>實訓報告</div>"; str += "<table border=‘1‘ cellspacing=‘0px‘style=‘border - collapse:collapse; text - align:center‘><tr style=‘background:#bec6b9‘>"; str += "<th>學號</th>"; str += "<th>姓名</th><th>班級</th><th>專業</th><th>指導教師</th><th>實訓名稱</th><th>流程得分</th><th>教師評分</th> <th>利潤率</th> <th>總分</th></tr><tr>"; str += "<td>" + achieve.student_no + "</td>"; str += "<td>" + achieve.Stu_Name + "</td><td>" + achieve.Claa_Name + "</td><td>" + achieve.subject_name + "</td><td>" + achieve.user_name + "</td><td>" + achieve.PyaName + "</td><td>" + achieve.Processscore + "</td><td>" + achieve.Teacherrating + "</td><td>" + achieve.rate + "</td><td>" + (achieve.Processscore + achieve.Teacherrating) + "</td></tr>"; str += "</table></body></html>"; //寫入 sw.Write(str); sw.Close(); //把所有文件名放在字符串裏用 | 隔開 filePath += fileName + "|"; } //調用壓縮 DownLoadFiles(filePath); } } }

技術分享圖片
        ///<summary>
        /// 批量打包下載壓縮
        /// </summary>
        /// <param name="fileName">文件名稱</param>
        public void DownLoadFiles(string filePath)
        {
            int length = filePath.Length;
            //截取除最後一位的 | 前面所有字符
            filePath = filePath.Substring(0, length - 1);
            //所有放在服務器的文件的名字集合
            List<string> filePaths = filePath.Split(|).ToList();
            MemoryStream ms = new MemoryStream();
            byte[] buffer = null;
            using (ZipFile file = ZipFile.Create(ms))
            {
                file.BeginUpdate();
                file.NameTransform = new MyNameTransfom();//通過這個名稱格式化器,可以將裏面的文件名進行一些處理。默認情況下,會自動根據文件的路徑在zip中創建有關的文件夾。
                //文件名集合循環
                filePaths.ForEach(t =>
                {
                    string s = Server.MapPath(@"~/UpFiles/DoxlFiles/" + t);
                    //循環把文件加入壓縮包
                    file.Add(s);
                });
                file.CommitUpdate();
                buffer = new byte[ms.Length];
                ms.Position = 0;
                ms.Read(buffer, 0, buffer.Length);
            }
        
            Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("批量下載實訓報告.zip", System.Text.Encoding.UTF8));
            Response.BinaryWrite(buffer);
            Response.Flush();
            Response.End();
            //循環刪除放在服務器的模板
            filePaths.ForEach(t =>
            {
                FileInfo fi = new FileInfo(Server.MapPath("~/UpFiles/DoxlFiles/" + t));//刪除存在項目文件夾的模板
                fi.Delete();
            });
        }
DownLoadFiles 技術分享圖片
    /// <summary>
    /// 壓縮包幫助類
    /// </summary>
    public class MyNameTransfom : ICSharpCode.SharpZipLib.Core.INameTransform

    {
        #region INameTransform 成員

        public string TransformDirectory(string name)
        {
            return null;
        }

        public string TransformFile(string name)
        {
            return Path.GetFileName(name);
        }

        #endregion
    }
MyNameTransfom 幫助類

MVC 下 打包多個word到壓縮包