zoukankan      html  css  js  c++  java
  • MVC 下 打包多个word到压缩包

    第一步 引入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 帮助类
  • 相关阅读:
    软件工程网络1514龚厦彬个人阅读作业2-提出问题
    软件工程网络15个人阅读作业1 201521123115 龚厦彬
    Java课程设计——学生信息系统(团队)
    Java程序设计——学生基本信息管理系统
    201521123115《Java程序设计》第14周学习总结
    201521123115《Java程序设计》第13周学习总结
    201521123115 《Java程序设计》第12周学习总结
    毕设01--第一阶段的内容
    网络15软工个人作业5——软件工程总结
    个人作业4——alpha阶段个人总结
  • 原文地址:https://www.cnblogs.com/wangshaod/p/10609262.html
Copyright © 2011-2022 走看看